◆变动控制:项目推行到一半时,团队成员同意非正式地做个由主管或客户直接提出来的大副变动。他们一开始并没有系统化地控制项目的变动,结果产品范围扩大了25%~50%以上,而预算跟工时也跟着追加了。
◆质量保证:在初期没设定好消除错误程序的项目,陷入了似乎永无止境的测试—改错—修改—重新测试的冗长循环中。项目末尾的测试结果找到了相当多的错误,“更好控制布告栏“上每天都开会排定不同错误修正的顺序。由于错误太多了,软件推出时还有许多已知(虽然不严重)错误。最糟的情形下,软件质量可能永远达不到推出水准。
◆不受限制的审查:项目中太晚发现的重大错误让软件在测试阶段还须被重新设计并重写,使项目在本来不受任何规划控制的情形下严重脱轨。
◆错误追踪:太晚开始追踪项目中的错误情形,忘了来修正一些已知的错误,而让这些可能很好修正的错误跟着产品一起推出。
◆系统整合:不同开发人员发展的组件到项目末期才整合的结果,使得组件之间的接口缺乏协调,而要花费更多精力才能让这些组件步伐一致。
◆自动化源代码控制系统:源代码修定控制建立太晚,让开发人员以外将自己的程序版本盖过源代码正本或其他人的源代码档案。
◆时程安排:在缺乏时间表的项目中,开发人员常被要求每周或经常重估剩余工作所需花费的时间占整体开发工作时间的比例。
一个起初就对各种开发程序漠不关心的项目,会让开发人员在此后觉得他们把时间都花费在开会跟修正错误上,而非用在加强软件功能上。他们知道项目进度脱节了,当他们发现不能满足时间底限时,他们的求生念头开始萌生,使他们退回“单独开发模式“——只求满足个人的时间底限。他们不再去跟主管、客户、测试人员、技术写作者跟开发团队中的其他人打交道,使得项目纪律荡然无存。
远远不如图3-1所示水准稳定的生产性工作比例、不太注重开发程序的中型项目一般都经历了如图3-3中所示的生产力变化方式:
图中,项目经历了推动中工作过节状况递增的情形。等项目推动到途中,团队才会明白工作脱节耗去了许多时间,如果能进行一些对应的开发处理程序是会有好处的,不过已为时晚矣,对项目的伤害都已经出现了。项目团队试着增加开发处理程序的功效,可是这样的努力做得再多也弥补不了工作脱节的严重情形。有时努力步伐太慢一样会让工作脱节得更严重。
较幸运的项目还可以在仍有残余的工作时间里把产品赶出来,不幸的项目就没办法在工作脱节之前完成产品。这种情形持续数周或数个月后,这些项目一般都会因为主管或客户明白项目推动进度受阻而遭到取消。如果你认为项目中的开发程序设定是件不必要的额外负担,想想看一件被取消的项目可能让你更划不来吧。