第四、规约崩溃
这种情况只有两种结果:要么发生,要么不发生,不会有不同程度的影响。但它真的发生时,它会直接毁灭你的整个项目。在项目启动之初,项目各方需要通过一系列商谈来确定需求的范围,规约崩溃就是指这个谈判过程的崩溃。在商谈期间,很多时候当遇到严重冲突时,由于双方都不愿意让步,但又不想放弃这个项目,从而导致这些冲突被掩盖起来。最终项目便朝着一个带着缺陷的、含混不清的目标前进了,被掩盖的问题暂时不会打扰你,但不是永远。尽管你可以含混说明一个产品,但不能含混构造一个产品,所以,最终在项目晚期这些问题将发生,在大半甚至所有预算时间和金钱都已付出的时候,此时,任何一方不再全力支持,都将使项目被取消。任何规格文档中的含糊标志着不同的系统参与者之间存在着未解决的冲突。只要在开发过程中有多个参与者,就一定会有冲突存在。谈判困难而调解容易,如果两个人的利益是完全或部分相斥的,预先做好安排,准备好请双方通过调解来解决冲突。同样,现代敏捷方法论通过客户的积极参与胜过合同谈判的方试,来尽早发现和避免规约崩溃。
第五、低效率
对于项目成功而言,项目人员的素质、人员的组织和管理是比使用的工具或采用的技术方法更重要的因素。团队质量是项目成功最大的决定因素,对人的关注、激励和培养胜过一切。项目管理人员的职责不是要人们去工作,而是给人们创造工作的可能。创造力来自于个人,而不是组织架构和流程,项目管理者面临的中心问题就是如何设计架构和流程,来提高而不是压制人们的主动性和创造力。通过权力的向下委派,从而产生了改进的质量、提高的生产率、高涨的士气,进而使中心的权威实际上得到了加强。就整体而言,组织机构会更加融洽和繁荣。增加加班时间只会降低生产力,压力之下的人们无法更快地思考既也会降低生产力。使用压力和加班的真正原因是为了在项目失败时让人们看上去能好受一些。
正式的过程改进程序需要花钱、花时间,特定的过程改进工作还会延缓项目进度,尽管最终会体现生产力上的收获,它们也不可能抵消花在过程改进上的时间。多种技术的改进程序(如CMM提级)很可能让项目比不实施这些程序完成得更晚,对于人员超编的项目,标准过程会为多余的人们制造出足够的工作,让所有人都忙个不停,尽管很多是无用的,这也导致生产率低下。人员超编的团队往往生产率低下,因为它们团队内部耦合度提高,会议时间、重复劳动和无效工作都会增加。理想的人员安排是在项目的大部分时间里由小型核心团队来做设计工作,在开发的最后阶段再逐渐加入大量人手。如果不大幅度减少调试的时间,就没办法让项目大幅度提前完成,而要成比例减少调试时间,就需要成比例增加设计所需时间,因为绝大多数的错误源于接口缺陷,编码前进行的正规而完善的设计,可以大幅度减少错误。同样,现代敏捷方法论通过注重人、快速迭代开发、自组织的团队和提倡可持续的开发速度,来避免跑的过快导致团队精力耗尽、出现短期行为而导致崩溃的问题,从而保持了稳定的生产率。
精兵简政是失败公司使用的办法,它让员工负担失败的责任。成功公司的目标应该正好相反:兴旺、发达、而人性化。
企业的最大风险则与价值相关:在低价值的项目上浪费资源,付出高价值的机会成本,就这是企业最大风险。勇于承担风险是好事,但必须由收益来导航,愿意承担多少风险,必须取决于能获得多少收益。真正的项目评估不是倾向于不断削减成本,来提高价值,而是在风险与价值之间取得平衡点。通过不确定的价值和不确定风险组合效果的净收益图,来指导你把资本投入到最适当的地方。我们每个软件从业人员都必须明白:顾客真正需要的,是我们能够给他的、某种他想得到的利益。