软件项目为什么总是延期?为什么投入更多人手反而让进度更糟?布鲁克斯在IBM负责System/360操作系统开发时,用血的教训发现了一个反直觉的真相:人月不能互换。
大部分项目管理者面对延期时的第一反应是加人。这看起来合理——9个女人1个月生不出孩子,但9个程序员应该能1个月写出本来需要9个月的代码。布鲁克斯告诉你这个类比为什么错误:软件开发不是简单的加法,而是一个充满依赖关系的复杂系统。
读这本书,你会明白几个关键判断。第一,为什么向落后项目增加人手只会让它更晚。新人需要培训,沟通成本呈几何级数增长,而能拆分给新人的工作往往不在关键路径上。第二,为什么没有银弹能解决软件开发的根本复杂性。技术工具可以解决偶然复杂性,但软件的本质复杂性——需求变化、系统集成、概念完整性——不是任何工具能消除的。
这本书最有价值的地方在于,它不是从理论出发,而是从一个大型项目的实际经历中总结出规律。布鲁克斯不是在讲应该怎么做,而是在解释为什么那些看起来合理的做法会失败。
如果你是技术管理者,这本书能帮你避开最常见的管理陷阱。如果你是程序员,它能帮你理解为什么项目总是延期,以及在什么情况下你应该坚持还是妥协。如果你从来没管过软件项目,读完它你至少知道为什么软件项目这么容易失控。
读完这本书,你不会获得一套万能的项目管理方法,但你会获得对软件开发本质约束的清醒认识。这种认识比任何技巧都重要——它能让你在做判断时,不被表面的合理性误导。