Learning
VOL. XI · NO. 18 · Bonus Models · 01 JAN 1970

布鲁克斯定律:人月神话

额外模型 · 01 JAN 1970 · 11 min read · 2,793 words
· · ·

"给一个已经延期的项目加人——只会让它更慢。"这不是说加人不干活——而是说新人的上手成本、沟通成本、协调成本,在已经延期的项目上会超过他们带来的额外产出。

**预计时间:**25 分钟读完 + 25 分钟做练习 = 50 分钟。

本课核心论点
布鲁克斯定律(Brooks' Law)是 Fred Brooks 在《人月神话》中提出的:"Adding manpower to a late software project makes it later."(给一个已经延期的软件项目加人,只会让它更慢。)原因是:(1) 新人需要时间上手——这个时间是从已经延期的项目中"借"的;(2) 更多人意味着更多的沟通和协调成本——不是线性的;(3) 有些工作是"不可分解的"(sequential work)——10 个人不能比 1 个人快 10 倍地完成它。

一、为什么加人会让项目更慢

1.1 三种”减速”机制

机制说明量化
培训成本现有团队成员需要花时间带新人——这些时间本应花在实际开发上新人上手期(2-12 周),老成员的效率会下降 20-50%
沟通成本N 个人的沟通路径 = N(N-1)/2——加人后路径数平方增长5 人团队:10 条路径;10 人团队:45 条路径
任务不可分割有些任务不能并行——你必须等 A 做完,B 才能开始”9 个女人不能在一个月内生出一个孩子”——Brooks 的经典比喻

1.2 布鲁克斯定律的数学直觉

假设一个项目需要 100 人月,已经花了 20 人月完成了 20%。还剩 80 人月的工作量。你觉得再加 5 个人 → 剩下 80 人月由原来的 5 人 + 新 5 人 = 10 人,8 个月做完?

实际上:新 5 人需要 2 个月上手(前 2 个月产出很少→老 5 人还需要花时间教他们)。2 个月后,10 人一起做剩下的 80 人月——但沟通成本增加了。原本的进度可能变成:前 2 个月几乎没有额外产出(老成员在带人),第 3-6 个月 10 人做了一部分——总时间可能 >12 个月。

二、布鲁克斯定律的例外

2.1 什么时候加人有效

  • 项目早期:还在架构设计和任务分解阶段——新人可以在”独立的任务块”上工作,不干扰核心
  • 任务高度可分解:比如测试、文档、数据迁移——这些任务可以独立进行,不需要太多上下文
  • 已经有明确的设计和接口规范:新人不需要理解全系统——只需要按照接口规范做一部分
  • 不是延期项目:正常进度的项目加人可以提前——但延期的项目加人大概率会更慢

2.2 什么时候加人特别无效(甚至有害)

  • 项目已经延期了(最经典的违反)
  • 架构还在变动中(新人学到的知识很快就过时了)
  • 没有完善的文档和环境搭建指南(新人上手慢)
  • 需要”全栈”理解才能做贡献的任务

三、布鲁克斯定律的应对策略

3.1 不加人——而是缩小范围

如果项目延期了,最好的选择不是加人——而是和业务方商量”哪些功能可以推迟到 V2”?减少范围比增加人手更有效。

3.2 做”可逆”的架构设计

将系统设计成”可并行开发”的模块——这样在需要加速时,可以分配多个团队并行工作而不增加沟通成本。但这需要在早期就做好——不是延期时能做的工作。

3.3 用更好的工具和自动化

与其加人——不如投资在 CI/CD、自动化测试、代码生成、脚手架工具上。这些工具的回报在下一个项目也会持续体现。

3.4 新人入职有”缓冲区”

不要指望新人一进来就全速产出。给他们 2-4 周的”缓冲区”——这段时间他们学习系统、熟悉流程、做小任务。团队的 Sprint 容量在这段时间不应该把新人算进去。

芒格怎么说
芒格说:"如果我知道我会死在哪,我就永远不去那个地方。"布鲁克斯定律告诉你加人=死路——那你就不要在项目延期时加人。芒格在 Berkshire 也强调"small, centralized team"——即使 Berkshire 是万亿级公司,核心投资团队只有不到 10 人。这不是巧合——他知道加人不一定能加快决策。

四、实战案例

4.1 案例 1:经典的反面教材

某金融系统项目延期了——管理层决定从其他项目组调 5 个人来”支援”。

  • 5 个人来了——但他们不熟悉交易业务
  • 原有的 3 个核心开发需要花时间给他们讲解架构、业务逻辑、代码规范
  • 前 4 周:原团队的产出下降了 60%(因为 3 个人都在带新人)
  • 第 5 周:新人开始能做一些独立任务——但沟通会议从每周 3 小时变成了每周 8 小时
  • 第 8 周:项目进度比”不加人”还慢了 20%

管理层很困惑:“我们加了人啊!“——这就是布鲁克斯定律的经典场景。

4.2 案例 2:正确的做法

另一个项目也延期了——团队做了不同的事:

  • 不是加人——而是和业务方重新讨论优先级:把 V1 范围缩小 40%
  • 砍掉的功能:次要报表、管理后台的一些页面、非核心流程的优化
  • 保留了核心交易流程、风控、核心报表
  • 结果是:V1 在延期 2 周后上线——而不是延期 3 个月等”加人的效果显现”

4.3 案例 3:架构”可分解”的例子

一个项目在设计时已经考虑到了可并行性:

  • 清晰界定了 API 契约(服务间接口)
  • 每个模块的数据库有独立的 Schema
  • 文档完整(包括本地开发环境搭建指南)
  • 结果:加入 2 个新人后,第 1 周就有独立的模块可做——因为接口定义清楚了,不需要理解全系统

这是布鲁克斯定律的反面——当系统可分解时,加人是有效的。

五、测验(11 题)

1

布鲁克斯定律的核心是?

2

"9 个女人不能在一个月内生出一个孩子"——Brooks 的比喻说明了?

3

新人加入团队时,老成员的效率通常会?

4

5 人团队的沟通路径数是?

5

布鲁克斯定律什么时候成立?

6

项目延期后,比加人更有效的第一步是?

7

下面哪种情况适合在项目中加人?

8

"新人入职的前 4 周不算 Sprint 容量"——为什么要这样做?

9

Berkshirie 核心投资团队不到 10 人——体现了芒格对什么的理解?

10

布鲁克斯定律给 PM 最重要的启示是?

场景题

R1

R1. 场景:你的交易结算模块项目已经延期 1 个月了。VP 说"我再给你调 3 个人过来"。你应该?

R2

R2. 场景:你正在启动一个新项目——你有机会在团队组建时就做好"可扩展"的架构。你该做什么?

六、答题提示

展开提示

  • Q1-3 核心:培训成本 + 沟通成本 + 任务不可分解 = 加人更慢。
  • Q4-5 沟通路径 = N(N-1)/2——平方增长。
  • Q6-7 缩范围 > 加人;但架构清晰时加人有效。
  • Q8-10 新人缓冲期不可忽视;芒格的”小团队”本质上是对布鲁克斯定律的直觉理解。
  • R1-R2 延期时不要本能扩张——先缩范围;新项目先打好架构基础。

七、本课行动清单

  1. 回顾你经历过的延期项目——是不是有过”加人反而更慢”的经历?如果有,把那次经历写下来作为团队的学习材料。
  2. 在项目启动时,做一次”可分解性评估”:这个项目能否拆成可并行开发的任务块?如果不能——提前警告利益相关方”加人不会加快”。
  3. 在新人入职时,确保有文档、有 Mentor、有缓冲区——不要让新人第一周就全速投入。
  4. 下次项目延期时,先试着谈范围缩减——在没有尝试过范围缩减之前,不要谈加人。

八、参考来源

  • ② 经典:Frederick P. Brooks Jr.,《The Mythical Man-Month》(1975)——布鲁克斯定律的原始出处,软件项目管理经典中的经典
  • ③ 严肃著作:Frederick P. Brooks Jr.,《The Design of Design》——关于设计过程和可分解性的延伸思考
  • ③ 严肃著作:Tom DeMarco & Timothy Lister,《Peopleware: Productive Projects and Teams》——从”人”的角度看项目管理,与布鲁克斯定律互相印证
  • ④ 实用读物:Steve McConnell,《Rapid Development》——快速开发的最佳实践,包括如何避免布鲁克斯陷阱

**下一步:**看 Lesson 0019 · 侯世达定律