三、需求变化带来的问题
这个问题始终贯穿着软件开发的历史,在进入互联网时代之前,需求变化已经是“臭名昭著”了。需求变化可能来自于一个喋喋不休的老板,或者是那些心比天高的用户,又或者是强悍的竞争对手,市场部的兄弟姐妹们也经常充当这个“可恨”的角色。当然,还有一些是开发者给自己挖的坑。而要满足这些需求,开发团队能用的工具显得如此之少,几乎只剩下一个选择,就是加班。不管是做出来的产品不是客户想要的,还是做出来的产品有大量的BUG,又或者是根本就追不上发布计划,总之大多数公司都会下令:做完为止。
需求变化内容也令人难以捉摸,有的是要增加功能,有的是要限制功能,还有的是要求恢复以前的旧功能。从一两个界面的文字修改、按钮大小的调整,到整个功能几乎全部不能用的都有。有时候这种需求还非常紧急,昨天才说半年后可能需要,今天又说明天就要。开发团队对于这些需求变化导致的代码质量下降,往往无可奈何。
需求不断地变化,导致软件迟迟不能交付,加上需求变化似乎飘忽不定,原定架构无论怎样高瞻远瞩都无法涵盖,而对于软件的频繁修改,更是带来了大量的缺陷,这里我们有一个通用的叫法:BUG。
需求的持续变化,带来了更多深层次的问题,最核心的就是开发团队的士气问题。“人心散了,队伍就不好带了”,无止境的需求变化就会带来无止境的BUG,以及无止境的重构甚至推倒重写,然后就是无止境的加班。开发团队人员越来越疲劳,对项目失去信心,得过且过,或者直接跳槽。
如果开发人员跳槽了,就算能找到别人接手,新人面对一大堆别人写的、修修补补的代码,也是一个巨大的挑战,于是项目需要停下来等新程序员掌握旧代码,最终导致越来越多地拖延进度。需求变化就如同一个潘多拉盒子,一旦打开,就会引发后续的连锁反应,直至把项目拖入失败的深渊。大量的软件项目都是死于“做不完”和“赶不及”,而很少是死于“做不出来”。
经典软件项目管理书籍把“需求变化”比喻为焦油坑——很多史前巨兽,如猛犸象、剑齿虎一旦陷进了焦油坑,无论它们如何挣扎,最终都会越陷越深,以致遭受灭顶之灾。这些焦油坑保留到现在,也是这些史前巨兽的化石宝库,可以让现在的人来研究。而那些大量的因为需求变化而失败的项目,也是我们现在用来研究软件项目管理的最好资料。
无论多么强大的软件公司,或者是技术多么高超的程序员,面对软件项目时,经常都会发现自己处于一个项目的焦油坑中:无论是继续增加人手、投入资金还是购买服务,都无法顺利地结束这个已经延迟了很久的项目。只能眼睁睁看着所有人在项目里无望地挣扎。而软件项目管理的知识,就是一种避免开发团队陷入这种“焦油坑”的经验。