专业书籍精读 · Accelerate · 第 2 章

测量效能

Accelerate: The Science of Lean Software and DevOps · Ch 2 · Forsgren, Humble & Kim · 2018

EN →

这一章讲什么?

想知道一个厨房好不好,你可以去数它一天洗了多少个盘子——但这跟客人吃得满不满意几乎没关系。《Accelerate》(中译《加速》)第 2 章要解决的正是这件事:给一个软件团队打分,到底该数什么?上一章说「交付的本事能量出来」,这一章把话兑现:量什么、怎么量、为什么偏偏是那几个数。

先说个怪事

公司里最常用的三把尺子——写了多少行代码、这个月干完多少活、人排得有多满——每一把用得越认真,团队反而变得越差。数代码行,代码就越写越臃肿;数干活量,估算就集体注水;把人排到满,交付反而更慢。

旧世界为什么难

问题不在于「还没找到对的尺子」,而在于这三把尺子有个共同的毛病:它们量的是「你有多忙」,不是「东西有没有到用户手里」。

最反直觉的是「人排得有多满」那一把。把人排满听起来天经地义——闲着不就是浪费吗?可它和高速公路一个道理:车不多时来一辆走一辆;一旦车流填满路面,前面稍微一脚刹车,后面就堵成一片。日程排到一点缝都不剩,计划外的事没地方塞,只能排队——而排队的时间,往往比真正干活的时间长得多。

还有一层更隐蔽的毛病:这些尺子都只量一个格子。写代码那边考核「交了多少功能」,管线上那边考核「有没有出事」,两边的最优解正好相反。于是两边数字都达标,用户什么也没等到。

它的点子:改数四个「结果」

这一章立了两条挑尺子的规矩,比它最后挑了哪四个数更值钱

第一,要量整条链的结果,不能只盯一个格子,否则团队之间必然互相拆台;第二,要量「东西到了没、好不好用」,不量「人忙不忙、写了多少」。按这两条筛出来的四个数,说白了就是四句家常话:多久发一次版从代码写完到用户能用要多久发出去的东西有多大比例把线上搞坏了搞坏之后多久能恢复。前两个说「快」,后两个说「稳」。

为什么偏偏是这四个

妙处在于这四个数互相拽着。想让「发得勤」好看,就得靠自动化把每次改动做小,否则「搞坏的比例」立刻难看;反过来想让「不出事」好看,最省事的办法是干脆别发版,可那样「多久发一次」立刻见底。没有哪一侧能靠牺牲另一侧来刷分——这就是它防作弊的地方。

还有一处观念换挡:「多久能恢复」这个问法承认了故障是躲不掉的——该问的不是「多久不出事」,而是「出事了多久能好」。

诚实的代价只有一句:这四个数是体检报告,不是 KPI——一旦拿去排名或者折算奖金,人立刻会去刷它,而刷它比真改进它容易得多。

一句话记住

别数「干了多少」,去数「到了没、稳不稳」。四个数——多久发一次、从写完到能用要多久、发坏了多大比例、坏了多久修好——前两个管快、后两个管稳;四个一起看,谁也没法靠牺牲另一边给自己刷分。

想进到四个指标的操作定义、具体量级与防刷设计? → 切到精读版