一个小故事
一天早上,一名经理找到我询问我是否可以花几个星期为一家公司刚刚启动的投资建立一个简单的信息系统。我正厌烦手头的项目而渴望新项目启动带来刺激,于是我为这个机会欢欣雀跃--我快速开始行动,为新的伟大解决方案进行开发,而摆脱我工作的大型机构的官僚和手续的束缚。
事情在开始阶段进行得很顺利。在头六个月中,我都工作很长时间并且自得其乐。我的工作效率不可思议,并且一些工作堪称是我职业生涯中的杰作。开发周期是快速的,而且我每隔几周就可以完成系统中一些新的主要部分。与用户的交互过程简单而直接,我们都属于一个紧密联系的团队,而且可以免除一些手续和文档。也没有什么正式的设计;代码就是设计,设计也就是代码。一切都是这样的完美!
这种完美只持续了一段时间。随着系统开发的进行,我们需要开展更多的工作。现有代码随着问题的变更而必须进行完善,而且我们也相应精化了所需工作的概念。我雇了一些开发人员帮助进行开发。我们就像一个单元一样工作,经常对一些问题互相讨论。这加强了沟通同时也免除了形式。
一年过去了。
我们还在增加开发人员。整个团队从 3 个人到 5 个人,然后是 7 个人。每次增加人员时,都要花很长的时间来学习,如果没有经验,那么就很难理解和解释整套系统,即使是一个概览。我们开始使用白板图来更加正式地展示系统的整体结构、主要概念和接口。
我们仍然在使用测试作为验证系统是否满足需要的主要手段。很多新来的开发人员都站在用户的立场上,我们发现项目早期非正式的需求和个人联系已经不能满足需要了。我们花费了更长的时间来计划我们要建立的目标内容。结果由于我们保留了讨论的文字记录,而不用频繁地回想已经做过的决定。我们还发现描述需求和使用场景有助于向系统的新用户介绍情况。
系统的规模和复杂度不断增加,意外的情况发生了--需要清楚地描述系统的构架。在项目初期,构架大部分存于我的头脑中,后来潦草地记在笔记或活动挂图中。不过,随着项目的人员越来越多,构架有些失控。由于不是每个人都和我一样富有经验,他们无法发现某些变更对整个构架带来的影响。我们不得不使用更精确的术语定义对系统构架的约束。任何可能影响构架的变更都需要团队进行商讨,并且最终获得我的同意。我们绕了一圈后才发现了这个问题,接受了一些重大教训之后,这在真正认识到构架的重要性。
这是一段真实经历。它只讲述了这个项目中的一部分困难经历。这些经历只在一个方面是不同寻常的:我们中的一部分人从开始的最后一直在一起,时间一年有余。开发人员经常在一个项目中半途而来,没等结束就已经离开,丝毫看不到他们的所作所为带来的后续影响。
这个项目本该使用一些过程进行管理。过程太多会误事,但是不使用过程会带来新的风险。就像投资高风险股票的人仅仅看到高回报一样,几乎不使用过程 的项目组忽略了项目环境中的关键风险,其实是在"期望得到最好的结果,但是没有为最坏的情况做打算"。
引自:http://www-900.ibm.com/developerworks/cn/rational/r-rup-xp/index.shtml