过度的预先设计是不好的,这是最近几年形成的共识。缺乏预先设计是不好的,这是长期以来被广泛认可的。
解决这个问题的思路仍然是中庸之道:一定的、适当的、不过分的预先设计是应该并且必要的。下一个问题是,怎样的预先设计是适当并且不过分的?
解决的思路是精益:核算成本和收益,消除浪费。当一个问题既可以用简单的方式实现、也可以引入一个复杂并且具有灵活性的设计时,考虑以下几个问题:
- 那个灵活的设计是什么?
- 灵活的设计所针对的新需求有多大的可能性出现?
- 灵活设计应对新需求带来的收益是什么?
- 现在实现灵活设计所需的成本是什么?
- 等到新需求出现时再实现灵活设计的成本是什么?
请特别注意最后两个问题。在面对一个复杂并且灵活的设计时,首先要衡量的不是实现它的收益,而是“现在实现它”与“将来实现它”之间成本的差额。不论一个灵活的设计的收益和成本如何,只要这个差额非常小——等到未来实现它也没有什么额外的困难,就应该毫不犹豫地推迟决策,等到真正需要的时候再引入灵活的设计。感谢现代化的IDEs,很多时候我们讨论的这个成本差额确实非常小,这是敏捷设计通常取简单方案的原因所在。
另一方面,如果这个成本差额相当大,就需要认真考察成本和收益,来判断是否应该预先引入灵活的设计了。这个时候往往需要更丰富的经验作为判断依据。
