概述

我发现,在介绍Scrum基本原则时,如果把这些原则与推动传统计划驱动的顺序开发活动理念进行对比,会得到更大的启发。人们更容易理解Scrum与自己已知的方法有哪些异同。

把敏捷原则与传统开发原则进行对比,目的不是为了说明Scrum好而计划驱动的顺序开发不好。这两种方法都是专业开发人员工具箱中的工具。没有不好的工具,只有使用时机不当的工具。在第1章介绍Cynefin框架背景时我曾简单说过,Scrum与传统计划驱动的顺序开发分别适用于解决不同类型的问题。

在比较这两种方法的时候,我采用纯正的或“教科书式”的方式来描述计划驱动的顺序开发方法。从这个视角描述传统开发方式,可以更好地提炼出两者的区别并更清晰地阐明Scrum开发的基本原则。

纯正而传统的计划驱动开发常常称为“瀑布开发”(参见图3.1)。不过,计划驱动过程(也称为“传统开发”、“顺序式开发”、“预想式开发”、“预言式开发”或“说明性开发过程”)的类别很广泛,瀑布开发只是其中的一个例子。

图3.1 瀑布过程

计划驱动的开发来源于人们总是希望计划和预测工作内容(客户希望最终产品包含哪些特性),确定最佳工作方式(这些特性以哪一种最合适的方式完成)。它的思路是:计划制定得越好,对产品的理解就越好,执行也就越好。计划驱动过程常称为“顺序过程”,因为每个实际工作者按照顺序依次执行,在完整的需求分析之后是完整的设计、编码∕构建,然后是测试。

对于明确定义、可预测且不可能发生任何重大变更的问题,计划驱动开发方式是很适用的。问题是,大多数产品开发工作根本就不可预测,刚开始的时候尤其如此。因此,虽然计划驱动过程让人感觉有条理、可以解释清楚、可以度量,但这种印象会产生一种错误的安全感。毕竟,产品开发很少是按照计划进行的。

对很多人来说,计划驱动的顺序过程是合情合理的:首先是理解问题,然后设计、编码、测试、部署,全部都按照明确制定的计划执行。他们相信传统开发过程是可行的。如果使用计划驱动的方法没有效果,大多数人都会觉得一定是我们自己做错了事。即使计划驱动的过程反复产生令人失望的结果,但很多组织仍然还在沿用,傻乎乎地相信只要能够做得更好一些,结果就会有所改善。然而,问题并不在于执行。问题在于计划驱动方法所奉行的理念根本无法适应大多数产品开发工作所固有的不确定性。

另一方面,Scrum则奉行另一套不同的理念,该理念很好地处理了高不确定性而导致很难做出宏观预测这个问题。本章所描述的敏捷原则来源较多,包括敏捷宣言(Beck et. al,2001)、精益产品开发(Reinertsten 2009b;Mary and Tom Poppendieck,2003)和《Scrum指南》(Schwaber and Sutherland, 2011)

如图3.2所示,这些原则可以分为如下几类。

我们先讨论产品开发固有的可变性和不确定性的相关原则。再讨论如何平衡预测和适时调整之间的关系。然后着重讨论认知原则和半成品的管理原则。本章结束时再重点介绍进度和性能的相关原则。