需求为什么会错:问题先于方案
这一章讲三件事: 为什么需求错误的根子在「问题没定义」;为什么真实需求只有等用户摸到东西才浮现; 以及四个对应的做法——尽早交付、准备抛弃、能买不造、写下假设。 第 04 章会给出一个数字:这里犯的错,拖到交付时修要贵 200 倍。本章先解决「为什么会错」。
1. 先看现象:需求评审通过了,系统上线了,没人用
需求阶段最容易出的三种事,作者列成「三种徒劳的希望」——草率写完需求就冲向编码, 指望其中某一个成立1:
- 任何系统都比没有系统好;
- 需求的问题「迟早会解决」;
- 设计师边做边会搞清楚该做什么。
三种希望有一个共同前提:假设「要做的事」是清楚的,只是还没写细。 这一章要拆掉的正是这个前提——多数失败的需求,错不在「写得不够细」,错在「问题就没找对」。
先立一个词。需求:一个系统必须表现出的外部行为,也就是「它得做到什么」。 把这些写成正式文档,得到的东西叫需求规格说明2。 本章管「把需求找对」,第 04 章管「把需求写清楚」。
2. 顶层全景:需求错在哪一环
世界里有个「不舒服」(现象)
│ ① 谁的问题?他图什么?──多数项目跳过 这一步
▼
问题定义(电梯问题:六种解法,成本差几个数量级)
│ ② 真实需求不在嘴上,在手上的反馈里
▼
尽早交付(5%~20% 资源时给用户第一次摸)
│ ③ 所以第一个系统大概率要扔
▼
做好抛弃的准备(Royce:预发布版要花 25% 资源)
│ ④ 能不造就不造;说不出口的假设单独记账
▼
能买不造(10 倍价差) + 假设清单(每 10 行代码一条)
图说:①→④ 层层递进:问题定义错了,后面全白干;
就算定义对了,不摸到实物,用户自己也说不全。
3. 核心原理
3.1 主走查:一栋楼的电梯,六种「解决方案」
书里最著名的一段,来自 Gause 与温伯格的书中案例,值得整段走完3:
场景: 一栋高层办公楼,住户抱怨等电梯时间太长。 工程团队的直觉方案是「让电梯更快」。但先停一下,问两个问题——
这是谁的问题?
| 站谁的角度 | 问题其实是 |
|---|---|
| 住户 | 我的时间被浪费了 |
| 房主 | 抱怨会变成退租,入住率和租金要跌 |
同一个现象,两个主人,两种「修好」的定义。
有哪些解法? 书里列了六条,我们补上量级感(成本数字是为演示编的,用来说明「差多少」):
| # | 解法 | 成本量级 | 风险 | 生效前提 |
|---|---|---|---|---|
| 0 | 提高电梯速度(直觉方案) | 高(几十万级改造) | 施工停运 | 物理上还提得动 |
| 1 | 新增一部电梯 | 最高(百万级,还要打洞) | 建筑结构 | 井道位置存在 |
| 2 | 错峰安排上班时间 | 低(管理成本) | 租户不配合 | 房主说得起话 |
| 3 | 给快递/货运保留专用电梯 | 低 | 快递员绕路 | 货梯存在 |
| 4 | 提高租金,接受低入住率 | 负(还增收) | 市场行情 | 房主肯认 |
| 5 | 改进电梯的归位算法(闲着的电梯自动移到需求大的楼层) | 最低(改代码,2 人周级) | 程序缺陷 | 电梯系统可编程 |
(归位算法:让闲置电梯「住」在历史需求高的楼层附近等活,而不是固定回底层。)
六条解法的成本、风险、生效时间差出几个数量级——而它们解决的都是同一个「抱怨」。 书里给出的收束句是本章的题眼:方案的变化总是比构建系统的成本低3。 在纸上多列五个方案只花一下午;选错了再盖楼,花的是解法 1 的百万级。
走查的结论: 需求错误的根源,是在「这是谁的问题」都没回答时,就冲向了第 0 号方案。 工程师的通病是「匆忙提供解决方案」——问题对的时候方案灵,问题错的时候方案越努力越错3。
3.2 真实需求不在嘴上:尽早交付
就算问题定义对了,还有第二层坑:用户自己也说不全他要什么。 作者的原话很直接:需求阶段你再怎么努力,都不如给他们一个东西用——用,才是确定真实需求的最有效方法4。
传统做法(书里叫瀑布式开发:一口气从需求走到测试、中间不回头的流程)的问题用数字看得最清楚: 99% 的开发资源(人手、钱、时间)已经耗尽之后,客户才第一次见到产品——所有反馈都发生在改不动之后4。
书里给的替代路径,把第一次见面提前到了资源消耗 5%~20% 时: 先快速拼一个粗糙的原型(能跑、能点、能看,但内部马虎的样品),交出去,收反馈, 然后才写正式的需求规格说明、开始正规开发4。
作者 2021 年复审时补了一段现身说法,等于给这条原则盖了章: 他后来创业,「向客户提供一系列不断增大的最小可行产品(MVP)以获取反馈」至关重要—— MVP 指只带最核心功能、足够验证方向的最小版本5。
配套还有一条「弄清优先级」的纪律(原则 130):很可能,客户只要能按时拿到必需的 10% 的功能, 就可以忍受其余 90% 晚拿到——作者的感叹是「一定要弄明白!」6。 这句话把「尽早」的目的说穿了:早交付不是为了交差, 是为了把「客户眼里真正的 10%」问出来——而这个问题,坐在会议室里是问不出来的。
3.3 所以第一个系统要扔:做好抛弃的准备
既然第一次交付的目的是「学」,那么第一个系统大概率不合格。这条原则的历史很硬: 第一个被完整部署的系统,往往是第二个被创建的系统——这话是 Royce 1970 年说的, Brooks 后来在《人月神话》里压缩成那句著名的「无论如何,你一定要做好抛弃的准备」7。
而且它有预算口径:Royce 建议,拿大约 25% 的资源做这个用来学习、注定被扔的预发布版本7。 按 100 人月的项目算,就是 25 人月买到「关键设计问题提前暴露」——对照第 02 章的兑换率, 这是全项目性价比最高的一笔支出。