长久以来,人们都把软件开发和工业开发做类比,认为两者有很大的相似性。所以,也就有了传统软件开发模式,认为在一开始把所有都定义好,后面使用一些项目管理和质量管理的方法,项目就会获得成功。
Scrum和敏捷开发的模式,对软件开发的本质提出了不同意见。Scrum的创始人Ken Schwaber认为软件开发更类似于新产品的研发,而不是生产制造模型。生产制造业的流程有一个重要的特性,那就是“可重复”,把定义好的流程运用到同样的输入上一定能产出同样的结果。这是大规模生产中流程控制和质量控制的前提。而这点对软件开发xx不适用,把同一份需求(且不说对需求的理解不同)给两个不同的人,做出来肯定是不同的软件,即使是同一个人在不同的时刻,也很有可能做出不同的东西。更重要的是,没有任何定义能清楚地说明谁做出的是对的,谁做出的是错的。因为这软件开发本身的复杂性决定了很难定义清楚全部细节。所以,在一开始拿到一份需求,认为{zh1}做出的软件就能满足这份需求,这是很不实际的。因为没有定义清楚的东西太多了。
对于新产品的研发,大家都会认同输出是不可控的。可以通过不断的尝试,不断地反馈来不断地改进。{zh1}做出一个让人满意的产品。Scrum基于软件开发更类似于新产品研发的假设,其框架本身就继承了不断获得反馈和改进的机制,小到每天每刻,大到每个Sprint每个Release都在不断调整和提高。很多人认为Scrum和敏捷都是从实践中来,而没有理论基础,事实上,这一点可以看做是Scrum理论基础假设的一个方面。