敏捷原则(1)——来自《Scrum精髓》
计划驱动的开发得名于试图一开始就想明白、事先规划和考虑用户可能需要的最终产品中的所有特性并敲定这些特性的最佳构建方式。它的思路是:计划制定得越好,对产品的理解就越好,执行也就越好。计划驱动过程常称为“顺序过程”,因为每个实际工作者按照顺序依次执行,在完整的需求分析之后是完整的设计、编码∕构建,然后是测试。
对于明确定义、可预测且不可能发生任何重大变更的问题,计划驱动开发方式是很适用的。可问题是,大多数产品开发工作根本就不可预测,刚开始的时候尤其如此。因此,虽然计划驱动过程让人感觉有条理、可以解释清楚、可以度量,但这种印象会产生一种错误的安全感。毕竟,产品开发很少是按照计划进行的。
对很多人来说,计划驱动的顺序过程是合情合理的:首先是理解问题,然后设计、编码、测试、部署,全都按照明确制定的计划执行。他们相信传统开发过程是可行的。如果使用计划驱动的方法没有效果,大多数人都会觉得一定是我们自己做错了事。即使计划驱动的过程反复产生令人失望的结果,但很多组织仍然还在沿用,傻乎乎地相信只要能够做得更好一些,结果就会有所改善。然而,问题并不在于执行。问题在于计划驱动方法所奉行的理念根本无法适应大多数产品开发工作所固有的不确定性。
另一方面,Scrum则奉行另一套不同的理念,该理念很好地处理了因不确定性程度高而很难做出宏观预测这个问题。本章所描述的敏捷原则来源较多,包括敏捷宣言(Beck et. all,2001)、精益产品开发(Reinertsten 2009b;Maryand Tom Poppendieck,2003)和“Scrum指南”(Schwaber and Sutherland, 2011)
敏捷原则可以分为如下几类:
我们先讨论产品开发固有的可变性和不确定性的相关原则。再讨论如何平衡预测和适时调整之间的关系。然后着重讨论认知原则和未完工产品的管理原则。本章结束时再重点介绍进度和性能的相关原则。