在成功建立试点项目后,下一步就是在需要的项目中实施Scrum,这就是我们所说的PRN Scrum。PRN来自于拉丁语pro re nata,意思就是“当亟需时使用”。因此,PRN Scrum就是指在急需Scrum支持的项目中实施Scrum。下面是一个例子。
Fidelity Investment在1997年开始使用Scrum,为他们的客户提供基于网页的功能。Charles Schwab和E-Trade的客户已经能够在线管理基金了,但是Fidelity却没有提供这样的功能。那个时候,Fidelity是瀑布式流程的忠实拥护者。他们已经尝试了几次网页版软件的开发,却没有一次能够成功。在绝望之际,Fidelity开始转向Scrum。在几个月之 内,Fidelity.com的第一个实例成功上线运行。在18个月之内,投资者能够使用Fidelity.com进行操作,正如其他竞争对手所提供的功能一样,为此他们感到非常高兴。Fidelity获得了成功,而Scrum却在Fidelity退役了。
通过这个项目,Fidelity懂得了在危难之际使用Scrum。在接下来的7次紧急项目中,Fidelity都使用了Scrum。然而,Fidelity确没有得到他们本该依靠经验积累能够得到的好处。他们本该在每个Scrum项目都能比上一个项目变得有效。无论如何,Fidelity选择了只在紧急关头使用Scrum,这就是所谓的PRN。
永远保持警惕
我们知道可以利用Scrum迎接挑战、把握机会。在第一个Sprint开始之前,通常我们都想知道项目大概需要多长时间以及成本是多少。我们可以通 过先进行几个Sprint,然后由这几个Sprint得出的数据使用外推法对整个项目的时间和成本有个初步的估计。举个例子,假设我们在头两个 Sprint里分别完成了20个单位的功能,而整个项目大概需要220个单位。也就是说,需要再完成180个单位。以每个Sprint20个单位的速度来 算,还需要9个Sprint就可以完成整个项目。如果在项目过程中增加或减少了功能,可以用剩余的工作量除以每个Sprint可以完成的工作量,就能够得 出剩余所需的时间了。
当然,使用历史数据来预测未来需要非常小心。外推法是从已知数据点推算出新数据点的一种方法,内推法和外推法类似,不过推算的是已知数据点之间的数 据点。外推法得出的数据没有内推法那么具有实际意义,同时也伴随着更多不确定性。我们都知道软件开发是复杂的,未知的事情比已知的多。虽然我们可以进行推 测,但是必须要检验推测的数据。因此,在每个迭代结束的时候,都需要检查实际进展如何,而不是推断进展如何。事实永远比期望更可靠。
新的机会会带来新的问题。要探索新的机会,要么创造全新的方法,要么沿用老的方法。无论使用哪种方式,我们都需要对很多新事物进行考量,例如如何适 应潮流趋势重新开发或定制软件等等。传统上,我们被迫在开发软件前深思熟虑,这个过程叫做需求计划,而其产物则是一份产品文档或者市场需求文档。然而,这 样做的问题是,我们在做计划的时候还不完全清楚到底需要什么。就算已经有了确定的想法,但通常最好的解决方案在开发过程中才会涌现出来。因为对复杂问题的 定义是:未知的比已知的事情多,因此要提前做计划是非常困难的,而且计划还常常充满错误和遗漏。而使用Scrum以后,我们可以一边计划一边开发,随着项 目的进行就能够找出真正所需。可预测性来自基于实践成果所作出的即时决策。虽然我们一开始就估算项目的周期和成本,但是随着项目的进行我们仍然持续地修正 计划。而在传统开发流程里,虽然对项目的周期和成本的估算同样发生在项目开始前,但是在项目完成至少90%以前,我们都无法获得修正计划所需的有效数据。