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

架构

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

EN →

这一章讲什么?

上一章说:软件要发得又快又稳,靠的是每天合并、自动检查这些做法。可很多团队会喊冤——我们也想天天发啊,可是发不动。改一行字,要等另外七个组一起排队、等一个月一次的「上线窗口」。第 5 章要回答的就是这个:是什么东西卡住了他们?答案出乎意料——不是他们不努力,是房子的结构不对。

先说个怪事

研究者本来以为,做手机 App 的团队肯定比守着几十年老系统的团队快。结果一查数据:老系统、买来的现成软件、装在设备里的软件……做什么类型的系统,几乎看不出快慢差别。跑在几十年前那种老机器上的团队,照样能进最快的那一档。

旧世界为什么难

想象一栋楼,所有房间共用一根总水管,而且没有分闸。你想换自家水龙头,就得通知全楼、约一个统一停水的晚上、所有人一起动工、一起验收。不是换水龙头难,是「必须整栋楼一起来」这件事难。

软件里到处是这种没有分闸的楼:想验证一点小改动,得先把全公司的系统凑齐搭成一整套;想上线,得等所有人都准备好。人越多越难约,于是加人反而更慢

核心机制:给房子装上分闸

这一章说,判断一个系统的结构好不好,只需要问两个非常朴素的问题:

一、我能不能自己一个人验?不用把别人的东西凑齐搭一整套,就能把我这块改动大部分检查完。做法上,就是给邻居家做个「假门面」——一个照着约定好的样子应答的替身,我只管测自己这一侧。

二、我能不能自己一个人发?不用等别人、不用挑统一的窗口,我这块想什么时候上线就什么时候上线。前提是我和邻居之间有一份写清楚、不随便变的「接口约定」,我按约定改,就不会砸到别人家。

这两条一旦成立,一件很妙的事情就发生了:沟通量降下来了。原来要开的那些跨部门协调会,本质上是在替「没有分闸」还债。装了分闸,每个小组自己就能把活干完。

带来了什么

最值得记住的一条是关于人多了会怎样。数据显示:结构好的团队,人越多,人均产出还在往上走;结构差的团队,人越多,人均产出反而往下掉——新来的人大部分时间都花在等别人和开会上。所以架构真正决定的不是「技术先不先进」,而是你加的人到底变成了产能,还是变成了协调成本

还有一条对管理者的提醒:别去规定大家用什么工具。这一章发现,能自己挑趁手工具的团队,反而干得更好——因为工具好不好用,只有天天用它的人知道。

一句话记住

架构好不好,别看图画得多漂亮、也别看是不是最时髦的技术,就问两句话:我能不能自己测完?我能不能自己发出去?两个「能」,剩下的就顺了。诚实的代价是——装分闸要花钱:拆得越开,要管的零件越多、要维护的约定越多,拆过了头,你只是把开会换成了排查故障。

想进到具体机制、研究结论和示意图? → 切到精读版