先别把它当成一个纯粹的技术问题
前阵子和一家做支付的公司聊。他们的发布流程是这样的:每周三晚上十点,后端全员到场。一个人点发布按钮,另外五个人盯着监控大屏。谁都不敢先走。 这个仪式,持续了四年。 我问CTO,为什么不换成灰度加蓝绿?他说,改是能改。但改完之后,没人敢保证那套对账逻辑还对不对。那是2016年写的,作者早走了,注释只有一行字——“勿动”。 你看,这就是技术债务。它不在代码里。它在人的日程表里。 很多团队对技术债务的理解停留在“代码写得丑”。错得离谱。代码丑不丑,编译器根本不在乎。真正让人难受的,是每一次改动都要先做一遍考古工作——读历史提交、问离职同事、在预发环境上小心试探。这些动作不产出任何业务价值,但一个都省不掉。 把它们加起来,就是利息。Ward Cunningham 说的其实不是烂代码
1992年,Ward Cunningham 借用了金融里的债务隐喻,描述第一次交付时那种“不成熟的代码”。他的原意相当中性:就像借钱买船出海,赚了钱再还债。债务本身是加速器。 他后来自己都抱怨过,这个隐喻被彻底曲解成了“写得烂”的同义词。 差别在哪?借债得有明确的债权人和还款计划。大部分团队有吗?没有。所以严格说,它们干的不是借债。是非法集资。 我更喜欢一个更窄的定义:技术债务是当前决策对未来变更成本的折现。关键词是“变更成本”。 这解释了一个反直觉的现象。有些团队代码质量报告很漂亮,交付速度却一直上不去。因为它们的债务压根不在可读性上。在耦合上。两个模块之间那根隐形的线,比任何一坨屎山都致命。
为什么没人能算出一张技术债务的资产负债表

AI 正在制造一种全新的债务形态
2023年之后,代码的生成成本掉了。写一个 CRUD,写一层适配,写一套脚手架,几乎免费。 但审查成本没掉。 这是最要命的不对称。生成一秒钟,审查十分钟。当生成量涨十倍、而审查带宽纹丝不动的时候,多出来的那部分代码去了哪? 被“看起来没问题”地合并了。 我们内部管它叫审查债——没人真正读过的代码,以事实资产的形式活在生产环境里。 后果长什么样?我见过好几个项目,三个月后没人能解释某个分支判断为什么存在。翻 git blame,提交者是 Copilot,提交信息写着 “refactor”。这不是科幻。这是正在发生的事。
谁在为这笔债付钱

治理的目标不是清零
我的立场很明确:“技术债务清零”是个有害的目标。 理由简单。清零意味着更高的抽象、更完备的测试、更严格的规范。全都要花当期产能。而债务的产生速度,是由业务变化速度决定的。业务越快,债务越快。想清零,等于让公司别再变了。 可行的做法只有三条。 **一,标出高息债务。** 看变更频率,不看丑陋程度。git log 里一年改五十次的文件,才值得动。一年改零次的?先放着,别浪费时间。 **二,给修复配预算,而不是配口号。** 硅谷流传很久的“20% 时间”,多数公司执行不下去,因为没法验证。更实际的做法是把重构和生产需求塞进同一个迭代队列排队,让产品经理和工程师当面对吵。吵出来的优先级,比制度文件真实得多。 **三,让债务可见到能被非技术的人听懂。** 别说“这个模块圈复杂度 47”。要说“这个模块的存在,让我们每次调价都要多花三天做回归测试”。 至于把技术债务写进 OKR 或者做成考核项……我持保留意见。一旦它变成 KPI,就一定有人去刷。前面说的那种“假绿”,就是这么长出来的。未来三到五年,我押注的三个判断

作者|fawen
排版|fawen
审核|小准
大讲堂