专业书籍精读 · Accelerate · 第 8 章
Accelerate: The Science of Lean Software and DevOps · Ch 8 · Forsgren, Humble & Kim · 2018
你手机上大概有两种 App:一种一年只在节前更新一次大版本,另一种每周都悄悄变一点。《Accelerate》第 8 章问的是——后者除了「技术好」,在「怎么决定要做什么」上做了什么不一样的事。前几章讲的都是工程师那一半,这一章把镜头转到产品那一半,并且发现这两半是互相喂养的。
做一桌菜。旧做法是照菜谱一次做满十二道,全端上桌才知道客人不吃辣;新做法是先做一小碟让人尝一口,再决定下一道怎么做。花的总时间一样,但你从「尝一次」变成了「尝十二次」。这一章几乎所有建议,都是在把「尝一次」改成「尝很多次」。
需求常常由离客户最远的人一次性写死,团队只负责实现;做到一半发现不对也改不动,因为那份规格是别人的。更要命的是真相要等到上线才出现。于是最贵的浪费不是写得慢,是把三个月花在了没人用的东西上——这笔账在任何工程效率指标里都看不见。
这章挑出四件能测量的产品侧做法:① 把活切到一周之内能做完、能交出去;② 从想法到客户手上这一整条链,全组都看得见;③ 主动去问客户,并且真按反馈改;④ 开发团队自己就能改规格,不用等外面批准。
关键在于第④件必须配着前三件用:有权自己试、一周能试一次、还看得见客户的反应,这才叫「试」;少了后两样,自主只是让你猜得更快。
一般人以为「想清楚再做」最省钱。可大公司自己的数据说:就算是被精挑细选过的好主意,真做出来能改善目标的也只是一部分。既然事前分不出好坏,省钱的办法就不是把会开得更久,而是让每一次试错变得更便宜——这正是「小批量」存在的全部理由。
小批量、看得见、真听客户、团队能自己改主意——这四件产品侧的事和交付效能互为因果:交付得快才试得起,试得起又逼着交付更快。要诚实的一点:这些结论来自问卷与统计模型,是相关关系,不是实验室里证成的因果。
想进到具体判据、统计口径和示意图? → 切到精读版
你以为产品管理是「业务侧的事」、和交付效能是两条平行线;这一章把它们焊成一个回路:精益产品管理(lean product management)由小批量、价值流可见、客户反馈落地、团队自主改规格四项构成,它预测软件交付效能与组织绩效,而交付效能又反过来让这四项成为可能。最容易读错的一条:第④项单独拿出来是危险的——没有②③兜着,「团队自主」只是让你更快地造出没人要的东西。
本章属 Accelerate Part I「研究发现」。上承 Ch7 管理实践——那一章测的是管理侧四项(限制在制品、可视化、生产反馈、轻量审批),本章测的是产品侧四项;两章合起来构成「非工程」的那一半。下启 Ch9 可持续工作、Ch10 员工满意度。现实里对应的是:季度大版本 vs 每周切片、需求委员会 vs 团队自主定规格,以及 feature flag 与 A/B 实验平台这类基础设施。
工程侧优化到极限,只解决「把已经定下来的东西快速送出去」,不解决「定得对不对」。一个具体场景:12 周一个季度大版本,规格在第 1 周就定死,真相要等到第 12 周上线才出现。方向错了,浪费的是 12 周 × 整个团队——而这笔账在构建时长、测试覆盖率里一个数字都看不见。
反过来也成立:一天能部署 10 次,但一个季度才决定一次要做什么,那 10 次部署买不到任何东西。交付效能的价值只在产品侧真的用起来时才兑现。不解决会怎样:DevOps 退化成「更快地生产没人用的功能」,四大指标很漂亮、业务毫无感觉。这章的任务,就是把产品侧的做法也变成可测问卷项、放进同一张统计模型,证明它进得了这张图。
是什么:把功能切成一周内能完成的片,并且追求先做 MVP 去验证想法,而不是一次交付完整设想。
直觉:批量大小决定反馈周期的下限。12 周攒一版,无论你多努力,这 12 周里只会拿到 1 次真实反馈;切成 12 片,同样的 12 周能拿到 12 次。机制上还有第二个收益——批量越小,一次出错要回滚的面越小、要排查的改动越少,所以小批量同时压低了变更失败率与恢复时间。
权衡在哪:切片本身有工程成本——需要 feature flag(把未完成功能藏在开关后面上线)、向后兼容的接口、能分批跑的数据迁移。小到一定程度,这些开销会超过收益。给个量级锚:Google 公开的评审指南把「100 行算合理、1000 行通常太大」作为代码层面的同一条原则(见 §「落到真实系统」),而本章说的批量是交付给客户的价值单元,比代码单元更粗一层。
是什么:团队对从业务一路到客户的整条工作流有理解与可见度,包括产品和功能当前处在哪一步。
判据落在终点上:很多团队的看板只到「已上线」或「测试通过」就结束了,那条链的最后一段——真的有人用吗、用了之后怎么样——是黑的。机制上,链条不可见的直接后果是每个环节只优化自己那一段:开发把工单推给测试就算完成,交接处的等待没有任何人负责,而前置时间的大头往往正好藏在这些交接里。
和 Ch7 的「可视化」别混:Ch7 看的是团队内部的队列(谁被堵住了),本章看的是端到端价值流(客户拿到了什么)。一个向内,一个向外。
是什么:组织是否主动且定期收集客户反馈,并把它并入产品与功能的设计。
判据是后半句:有没有因此改掉设计。季度满意度问卷发了、数据存进了 BI、但排期一个字没动——这一项就是零分。机制上说得通:反馈只在「还能改」的时候才有价值,所以它必须和①(一周内改得动)与④(有权改)绑在一起,三者缺一就退化成留档。
把它做实的典型形态是把反馈变成量化信号:受控实验(A/B)让「客户喜不喜欢」从会议上的形容词变成一个带置信区间的差值。诚实的一面:客户能告诉你哪里疼,未必能告诉你该怎么治。
是什么:开发团队有权在开发过程中创建和修改规格,不需要团队之外的批准。
为什么这样设计:因为事前分不出哪个想法好(§「落到真实系统」里有大厂自己的数据)。如果好主意的命中率本来就不高,那么「先由远处的人想清楚、再交给近处的人执行」这条链的前半段,价值远低于直觉——真正稀缺的能力是在过程中根据新信息改主意。机制上这和 Ch5 的松耦合架构、Ch7 的轻量变更审批是同一条逻辑:把决策搬到信息最多的那个位置。
权衡在哪:这一项不能单独上。团队有权改规格、却看不见价值流也没有客户反馈,结果是把局部最优加速——做得又快又爽,方向照旧是拍的。它也不是「不要 PM、不要规格」:改的是谁有权改,不是取消规格。
把这四项和交付效能之间画成一根单向箭头,是读错了。本章模型里两者互相加强:交付效能高(部署便宜、回滚可靠),团队才试得起一周一片;而产品侧一旦真按周验证,就会持续把压力推回工程侧——自动化测试、feature flag、可回滚部署都从「该做」变成「不做就转不动」。
实践含义很硬:单边改造会被弹回去。只上流水线不改决策权,新买来的产能会被季度节奏吃掉;只喊敏捷不修流水线,「一周一片」做不到。
四项不是四个等价开关,成本与失败模式差得很远。落地顺序上:②③ 最便宜(改的是信息流),① 次之(要动工程基础设施),④ 最难(动的是权力)。
表 1 · 四项实践:书里怎么测、落地成本、典型失败模式
| 实践 | 书里怎么测它 | 落地成本 | 典型失败模式 |
|---|---|---|---|
| ① 小批量 | 工作是否切成一周内能完成的片、是否用 MVP 验证 | 中到高——要 feature flag、兼容接口、可分批的数据迁移 | 切成 10 个 PR 但攒到季度末一起发 → 反馈周期一点没变 |
| ② 价值流可见 | 团队对从业务到客户的流程与状态是否有可见度 | 低——多半是把已有信息接到客户那一端 | 看板只到「已上线」 → 最后一段是黑的,局部最优 |
| ③ 客户反馈 | 是否主动定期收集反馈,并并入设计 | 低到中——渠道多半已有,缺的是「改设计」这一步 | 问卷发了、数据存了、排期没动 → 变成留档 |
| ④ 团队自主改规格 | 团队能否不经外部批准创建 / 修改规格 | 高——要动的是决策权,不是工具 | 只给自主、不给 ②③ → 局部最优被加速 |
表 2 · 批量大小怎么选:反馈周期、错一次的代价、工程前提
| 季度大版本 | 双周迭代 | 周内切片 + feature flag | 连续实验(A/B) | |
|---|---|---|---|---|
| 反馈周期 | 约 12 周 1 次 | 2 周 1 次 | ≤ 1 周 1 次 | 随时,按流量 |
| 方向错一次的代价 | 12 周 × 全团队 | 2 周 | ≤ 1 周 | 一小部分流量 |
| 工程前提 | 几乎没有 | 自动化测试 + 稳定的发布窗口 | feature flag、向后兼容、可靠回滚 | 实验平台、指标体系、足够样本量 |
| 代价 / 风险 | 规格早早定死,真相来得太晚 | 仍可能攒着不发,退化成「小瀑布」 | 开关债:flag 不清理会长成配置迷宫 | 样本不够时结论不可靠;只能测能量化的东西 |
| 适合 | 合规强制的发布窗口、硬件绑定的交付 | 内部系统、B2B 定制 | 本章推荐的默认 | 有大流量与清晰指标的面客功能 |
要诚实的一点:不是所有东西都能小批量。一次性的数据迁移、受监管的资质发布、与硬件绑定的固件都有不可再切的最小单元;这时该做的是把可切的部分切开(先上开关关闭的代码、先做只读双写),而不是假装整个东西能一周交一次。
这一章的实用价值是给了你一句能当场问出口的话:「我们上一次因为客户反馈、改掉已经写进规格的东西,是什么时候?」答不上来,说明④和③都是零分,交付流水线再快也只是把产能换成了更多没人用的功能。架构评审与面试里同理——被问「怎么提升交付效能」只答 CI/CD 与容器是答了一半,本章那一半对应的是 trunk-based development、feature flag 平台、A/B 实验平台这些让「一周试一次」在工程上成立的基础设施。
大厂实证
① 一句话:产品侧的做法同样可测——四项精益产品管理实践预测组织绩效,并与软件交付效能双向相关。
② 四项是:把活切到一周内可交付、价值流端到端可见、主动收集并落实客户反馈、团队可自主改规格。
③ 结构性发现:技术实践与产品实践互为因果。交付得快才试得起,试得起又逼着工程侧继续变强;单边改造会被弹回去。
④ 批量大小决定反馈周期的下限:12 周一版 = 1 次验证,12 片 = 12 次验证;顺带压低变更失败率与恢复时间。
⑤ 判据都在细节上:可见性要看终点是不是客户,客户反馈要看有没有改设计——不是「有没有看板 / 有没有问卷」。
⑥ 第④项不能单独上:团队自主 + 无②③ = 更快地造出没人要的东西。
⑦ ④的底层理由是事前判断不可靠:微软实验平台自评「结果令人谦卑,让人质疑事前优先级排序」。
⑧ 落地顺序:②③ 最便宜(改信息流)→ ① 次之(要 feature flag 等工程前提)→ ④ 最难(动决策权)。
⑨ 边界:不可切的最小单元(一次性迁移、合规发布、固件)该切的是可切的部分;结论是统计相关,样本偏消费互联网。