铅笔素描:一条被杂物堆埋住的传送带,末端只出来一个小盒子

让每行代码的业务价值最大化

有了 AI,合入的 PR 比去年翻了一倍。需求卡片一张接一张被拖进「已完成」。很多团队连建单都跟不上,不少改动干脆没有单子,直接合进主干。那么,用户得到的东西、业务上的数字,也翻倍了吗?

如果没有,那就是数错了东西。关掉的需求单、合入的 PR、AI 生码率、交付周期——它们回答的都是「什么时候、完成了多少」,是产出,是一个个点。而业务价值是在上线之后、在持续被使用的日子里一点点攒起来的。它不是点,是随时间铺开的面积。

工程师的工作,不是堆产出,也不是拼速度,而是让手里每一行要长期背着的代码,撑起尽可能大的面积。

产出是点,价值是面积

上线那天,你的代码价值为零。

只有用户开始用,价值才会按某个速率流出来:保住的收入、省下的人力、躲开的风险、依赖它的项目。这个速率,乘以它持续有用的时间,就是面积。上线晚、没人用、三天两头出故障——只要占一条,提交记录再热闹,面积也小。

同一天发布,只有被使用的那个才有面积 同一天发布的两个功能。每个方格是一天,当天用的人越多颜色越深;下方的柱子是同样的数字按周取平均。被使用的批量编辑功能不断积累面积,从未被使用的导出功能面积始终为零。数值为示例。 批量编辑 功能 被使用 4月 5月 6月 7月 8月 9月 一 三 五 0 1,000 2,000 3,000 人/天 发布 使用天数 138天中 135天 面积合计 35万 人·天 用的人少的一周 多的一周 故障 500 3,100 导出 功能 从未被使用 0 1,000 2,000 3,000 138天中 0天 0 人·天

ROI 也好,人效也好,分子都是这块面积。上得再快,没人用,分子就是零,只有分母上的成本在涨。这不叫低成本买到了价值,只是为一个没人用的功能付了钱和时间。

新功能和维护,扩的是同一块面积

真正能扩大面积的工作,逃不出这五类:

  1. 早点上线——把起点往前挪,让价值流得更久。
  2. 把价值做厚——提高单位时间的成果,把用户的问题解得更透。
  3. 守住眼下的价值——故障、走不通的链路、没人察觉的 bug。把面积上的窟窿补上。
  4. 别丢掉将来的价值——停止维护、被迫升级、被锁死的底座。防止未来的面积凭空消失。
  5. 让系统一直改得动——保持可改性,别让下一次改动越来越贵。

新功能大多作用于 1 和 2,维护和稳定性工作作用于 3 到 5。瞄准的是同一块面积,只是推的边不同。

扩大同一块面积的五种方法 每次只动一个手段。虚线是今天的面积(100),彩色部分是这个手段增加的面积,每个都是同样的 +10%。黑色是业务工作,绿色是可靠性与维护工作。 ① 更早发布 +10% ② 让价值更厚 +10% ③ 现在不丢价值 +10% ④ 以后不失价值 +10% ⑤ 保持可持续 +10% 0 6 12 18 24 个月

但不管选哪一招,最后手里都会留下代码。

功能是资产,代码记在负债那一栏

想象你是一栋楼的房东。每加盖一层,就多一份租金。随之而来的,是建造成本、招租、维修、应付租户、退租交接,还有物业费。哪怕整层空着,维修和物业费照样年年交。代码也一样。真正送到用户手上的功能在替你收租;而你留下的每一行,都带着 review、测试、迁移、oncall,还压在下一个读它的人脑子里。开源项目还得加上回 issue 和兼容性承诺。不管这一行有没有在产生价值,这些都跑不掉。

空置的楼层每月仍要占用 120 小时维护 把代码库画成一栋六层楼,每层是一个功能。维护指评审、测试、升级和值班,按每月工程师小时计(160 小时=一名工程师)。两个空置楼层没有用户,每月仍占用 120 小时。数值为示例。 楼层(功能) 每周用户 维护 小时/月 1F 结账 4.8万 90 2F 旧版同步 0 空置 75 3F 搜索 3.2万 60 4F 账单 2.1万 75 5F 导出 0 空置 45 6F 报表 0.9万 50 合计 11万 395 ≈ 2.5名工程师 空置楼层 0 120 ≈ 0.75名工程师

代码总量越大,维护占的比例越高。人不加、摊子铺大,能投到新价值上的力气只会越来越少。要维护的东西不减,还想一直往前走,就只能一直加人。就算 AI 能用比人更低的成本接手维护,也只是多出一笔维护 AI 的成本。

出路只有一条:减少要维护的东西。

删代码,是本职工作

所以删除和清理不是闲下来才做的大扫除,而是工程的本职工作。能在不损失价值的前提下做减法,才是顶尖工程师的标志。

拆掉空置楼层,每月 120 小时回到新工作 同一栋楼拆除两个空置楼层前后的对比。每周用户仍是 11 万;维护从每月 395 小时降到 275 小时,约 0.75 名工程师回到新工作。斜线窗户表示没有用户的楼层。 结账 90 旧版同步 75 搜索 60 账单 75 导出 45 报表 50 结账 90 搜索 60 账单 75 报表 50 拆除前 维护 小时/月 拆除后 维护 小时/月 −120小时/月 拆除2个空置楼层 11万 每周用户 395 11万 每周用户 不变 275 −120小时/月 ≈ 0.75名工程师

没人用的功能和配置项、早已下线的活动和实验留下的残骸、为兼容某个早就没人用的东西打的补丁——这些是业务债。和空置的楼层一样,只有成本,没有面积。该删就删。要删的是没有面积的代码,不是把代码压缩到没人看得懂。能把同一类错误彻底堵死的抽象,哪怕行数变多,价值也在涨。

剩下的,往往是技术债:还在产生价值,却很难安全改动的代码。这部分不删,而是在不破坏现有面积的前提下修、合并。目的不是好看,是让下一块面积造得更便宜。拖着不还,最后还是得还——连本带息,而且多半是在故障或被迫迁移的当口。

在 AI 工厂里,第一件事是删

就算软件工厂成了黑灯工厂,成群的 AI 日夜构建、维护,管工厂的仍然是人。

管理后台的看板上,今天照例是合入的 PR 数。某天,出了一个 AI 修不好的故障,你第一次走进工厂里面。里面是一座屎山,勉强还能出货。

你会怎么做?

先删,对吧。找出没有面积的代码,对留下的每一行追问:它在产生什么价值?这个问题不必等工厂停摆才开始问。从今天的 diff 就可以。

AI 时代,堆代码的诱惑前所未有。要顶住。


让每行代码的业务价值最大化。