无中生有
道生一, 一生二, 二生三, 三生万物
兵来将挡, 水来土掩
见招拆招
模式名称
- 问题驱动模式
意图
- 通过从问题出发引出实践, 而不是生搬硬套既有实践, 避免"强加给团队既有方案"带来的负面问题, 包括争执, 怀疑等; 更重要的是, 可以真正获得改进.
动机
当团队试图从从一种开发模式转换到另一种时, 往往有一个效率(按原先的定义)大幅降低的阶段, 而团队也对日常的工作表现出各种不适应, 从而对整个改进工作产生怀疑.
这种怀疑会导致比较严重的后果: 团队很可能因此放弃改进, 把孩子和洗澡水一起倒掉. 或者产生某种心里阴影, 从而在后续的工作中对其它改进持续抵抗.
原因有很多, 其中一个常见的原因是对流程进行了过度设计, 比如对一些不存在的问题进行防御. 又或者根本没有设计, 而是照搬了其它团队或者书本上的实践.
我们需要更实际, 更加实用主义.
方案
有几个殊途同归的思路可以借鉴.
第一个是精益原则, 需求拉动而不是推动. 即使我们手头有一大堆方法和实践都在不同场合证明过其有效性, 也不能保证在当前场景下是合适的. 推动会产生浪费, 因为可能并不需要. 因此我们应该收起我们的既有方案, 专心研究问题, 通过问题引出具体的方法.
第二个例子来自于REST. Roy Fielding的博士论文, 除了提出REST这一架构风格外, 更值得一提的是他推导REST风格时所用的方法. 这是一种类似精益需求拉动的方法, 开始时没有任何约束, 从"空"风格开始. 然后逐渐添加约束, 方案也逐渐受到限制. 直到所有约束都添加完毕, 方案也会成形.
"There are two common perspectives on the process of architectural design, whether it be for buildings or for software. The first is that a designer starts with nothing--a blank slate, whiteboard, or drawing board--and builds-up an architecture from familiar components until it satisfies the needs of the intended system. The second is that a designer starts with the system needs as a whole, without constraints, and then incrementally identifies and applies constraints to elements of the system in order to differentiate the design space and allow the forces that influence system behavior to flow naturally, in harmony with the system. Where the first emphasizes creativity and unbounded vision, the second emphasizes restraint and understanding of the system context. REST has been developed using the latter process."
--From 5.1.1 Starting with the Null Style
另外一种思路来自卡尔・波普尔. 他强调科学不应该从观察开始, 而应该从问题开始.
"专业科学家所宣称的方法是:从观察开始;观察再观察。专业历史学家所宣称的方法是:从文献开始;读完一份又一份。 这两种宣称的方法恰恰相似,都是无法实行的规则:它们在逻辑上是不可能的。不能从观察开始:首先必须知道要观察什么,即必须从问题开始。而且,没有像未加解释的观察这样的事物。所有观察都被根据理论进行解释。文献也同样如此。我到帕丁顿的往返车票是历史文献吗?又是又不是。如果我被指控犯有谋杀罪,这张车票也许可以为不在犯罪现场提供证据,从而成为重要的历史文献。然而我们不应当建议历史学家以收集废火车票开始他的工作。…整个过程可由我称作四个一组的图解的简化的图解表示:P1→TT→CD→P2[问题1→尝试性理论→批评性讨论→问题2] 我们可以从某个问题P1开始——无论理论问题还是历史问题——接着做出尝试性解答——推测的或假设的解答,一种尝试性理论——把它提交按照证据进行的批评性讨论,如果可得到证据的话,结果出现新的问题P2。"
相关模式