敏捷的世界观

2020-08-17 17:06:07 浏览数 (1)

我在公司内部推广实施敏捷4年多了,我认同敏捷的根本原因是因为我认同敏捷的软件开发世界观。传统开发方式的拥护者和敏捷开发方式的拥护者看待软件开发的世界观是不同的。

在传统开发的眼里,软件开发过程是确定的、可测的,只要在一开始努力收集到需要的信息并制定好计划,然后忠实的执行计划就应该可以成功。如果不成功一定是你在一开始就没有做好,没收集到必要的信息,计划做的不好或者执行不到位。然后传统开发方式就试图引入更多的流程,文档,试图让每一步都做到万无一失。

而在敏捷的眼里世界可不是这样的,敏捷认为在软件开发中,世界是变化的,有很多不确定性的。一方面,从认知角度来说,我们是无法在一开始就收集到确保成功所需要的所有信息的,必然是随着开发的进行,我们对正在做的东西的认识才越来越深刻。因而做一段时间后常常有发现需求需要调整,或之前的设计不是最合适的情况发生。另一方面,世界本来就是在快速变化中,我们不得不随之做出调整。因此敏捷的很多实践主要针对如何应对变化。

这对这一目标,敏捷要回答两个问题:

第一,我们如何及时的知道要做变化和做什么样的变化?

第二,一旦要做变化,我们如何能以最小的代价完成这种变化?所以敏捷的实践大多在回答这两个问题。

那么到底那种想法更接近现实世界的情况呢?

在实际当中我所经历的项目介于这两者之间,即并非完全的可测或不可测,但通常随着项目复杂度的增加,项目的不可测因素就会大大增加,变得越来越的难以把控。而大多数项目都属于这种有着相当不确定性范畴的。完全可预测,确定的,在一开始就能完全把握的几乎没有。所以我认为实际情况更符合敏捷的世界观。如果这一前提成立,自然敏捷方法就更有效了。

我很喜欢把传统开发方式比喻成普通火炮,而把敏捷开发比喻成导弹。两种武器打击目标的过程很形象的说明了两种软件开发过程的区别。火炮打击目标时,要想打的准,则要寄希望于一开始瞄的够准,而且对目标运动轨迹估计的够准。一旦炮弹发射出去,就无法对速度、方向进行控制了。任何瞄准偏差,没有预料到的目标移动轨迹变化,甚至风向的变化都会导致炮弹打偏。而导弹就不一样了,只要设定好目标方位,并不需要一开始就精确瞄准。导弹发射出去后,会持续的收集自己的位置、方向、速度并根据目标的方位不断的调整,最终能够较精确的长距离命中目标。

其实这一切的根源都在于软件开发是一个复杂的过程,复杂到各种基于预测的软件开发方法和流程都不是太好使,因为这样的成功要依赖于你在一开始就什么都想到了、都做对了。更何况既定的流程很难应对好这种复杂带来的不确定性。反而基于经验式的方法,比如敏捷,不依赖于在一开始就什么都想对、做对,而是依靠团队紧密协作并不断地在向前摸索中根据实际情况做出调整,小步快跑,反而像导弹一样,更容易命中目标。我在这里并不是说流程不重要,而是在敏捷开发中,和流程相比,团队成员的自发协作更重要。

0 人点赞