有不少刚刚了解Scrum的一些朋友经常会问到什么样的项目适合使用Scrum? 什么样的项目不适合Scrum? 针对这些朋友的一些疑惑,本文从软件项目的特点,Scrum的核心要素,思维模式,Scrum能够解决的问题这几个方面来看到底什么样的项目适合Scrum。
大部分的软件项目是复杂的项目
Ralph Stacey 在他的著作Complexity and Creativity in Organizations中使用下图从不同的维度对项目的复杂度进行了分类和定位,我们可以基于下图来看我们的项目是在一个什么位置。
这张图从技术的维度和需求的维度两个维度来看,横轴是技术的确定性,纵轴是需求的确定性。 他们之间的交集决定了项目的复杂程度。对于大部分的软件项目来说,都会存在一定的技术不确定性,比如对新技术的运用,团队新人技术能力提升等。对于绝大多数软件项目来说会存在需求的不确定性,软件非常的抽象一开始看不见摸不着,客户往往很难再一开始就能说清楚他真正想要的是什么。另外,由于开发软件产品是一个知识性的工作,那么人的因素就非常的关键,每个人对工作的态度、心情、身体状态、性格都会对工作的成果带来一些不确定性,所以加上人的维度,那么软件项目通常都是非常复杂、充满着不确定性的项目。
那么,什么样的方法对于这种复杂的项目会比较凑效呢?
在回答这个问题之前,我们先来看看对于过程的一个定义。
过程控制通常有两种形式,一种叫做预定义过程,另外一种叫做经验性过程。
预定义过程的特点:
- 每一项工作都可以被完全理解
- 给予合理的输入定义,每次便可以得到相同的输出
- 过程启动后,允许运行直到结束,每次运行产生相同的结果
预定义过程的示例比如:生产混凝土的过程,只要原料配比确定,加入的顺序以及搅拌动作、搅拌时间确定,那么产出的结果将完全一样。
传统的瀑布开发模式是基于预定义过程来设计的。
经验性过程的特点:
- 过程是不能够完全预先定义好
- 结果是不可预知的
- 生产过程是不可重复的
- 通过不断的检查和调整使得过程能够产出我们需要的结果
经验性过程的示例比如:一场足球赛,我们不可能规定好每个人的动作,我们也不能预测比赛的结果,我们只能通过激励,通过不断检视和调整团队,让他们发挥到更好的水平,以达成战胜对手的目标。
Scrum是一个经验性过程,它的核心是在项目的整个过程中提供给项目的参与者以及干系人高度的透明性,基于透明性来进行不断的检查和调整,通过不断的检查和调整持续的优化过程和产出结果,提升团队交付能力,以此达到按时交付高质量的,客户真正需要的产品。
Scrum适合管理复杂的项目
基于上述的对比,显而易见的是管理这种复杂的项目,我们不可能在一开始把整个的过程预先定义好,项目的结果如何,我们也很难再一开始就完全预知,项目存在很多的不确定性,整个项目过程也是不可能重复进行的。所以,管理这样的项目需要使用Scrum这样的经验性的过程来达到更好的效果。
总结
Scrum是否适合您的项目取决于项目的特点,如果项目需求非常明确,项目交付使用的技术团队也轻车熟路,已经有过往交付的经验,那么可以使用传统的瀑布流程,对于大部分复杂的项目,适合使用Scrum方法。
作者:廖靖斌
本文属于Scrum中文网,转载请注明。