返回文章列表

Codex 真正改变的不是写代码速度,是变更的“责任边界”

生成代码很快,真正贵的是你把‘谁负责把关’这件事悄悄换了

我第一次在团队里大规模引入 Codex 的时候,最先变好的不是“写得更快”,而是一些小改动终于愿意做了。

之前很多人心里都清楚:这段代码要重构,这个脚本要补测试,这个边界要补日志。但它们都卡在同一个现实里,动手要付出注意力成本,写完还得扛 review。

Codex 把“动手的摩擦”降下来了。

问题也从那天开始埋下。

因为摩擦降下来的同时,责任边界也在悄悄移动

你以为你买到的是更快的作者,实际你买到的是更多的变更。变更一多,系统需要的不是更快的作者,而是更清晰的验收和更强的把关机制。

如果没有,Codex 的效率会以另一种形式还给你:线上事故,review 疲劳,以及一次次“看起来都对但就是不稳”的返工。

事情是怎么一步步变成“审阅者负责”的

引入 Codex 的第一周,大家用得都很克制。

  • 写一个小工具
  • 改一段命名
  • 补一个 if 判断

这些改动即使不完美,风险也有限。

第二周开始,改动变大了。

有人开始让 Codex “顺便把周围的代码也整理一下”,有人开始让它“把这个模块一起重构掉”,甚至有人把一段复杂逻辑整段替换成生成版本。

在这个阶段,最常见的一句话是:

你看,代码都写好了,逻辑也对。

问题是,这句话里隐藏了一个偷换。

以前“逻辑对不对”主要由作者负责。作者写的时候要经历一次完整的收敛:为什么这么改,边界是什么,失败会怎样,怎么回滚。

Codex 把中间这段收敛过程压扁了。作者变成了“提需求的人”,把收敛留给了 review。

于是责任边界从:

  • 作者负责把变更收敛到可上线

变成了:

  • 审阅者负责把变更筛到不出事

这不是道德问题,这是机制问题。

生成代码的模式天然倾向于“先把一版写出来”,而不是“先把边界想清楚”。只要你的流程没有把边界显式化,这个责任迁移就会发生。

你会在三个地方立刻付出代价

1) Review 变成了“考古”

以前 review 看的是作者的选择:

  • 为什么用这个实现
  • 为什么拆成这些函数
  • 为什么在这里加这个保护

现在 review 看的是输出:

  • 这段生成代码有没有漏掉边界
  • 有没有引入新的副作用
  • 有没有把旧逻辑悄悄改语义

这不是同一种工作。

前者是判断作者的推理过程,后者是在陌生代码里找陷阱。后者的成本更高,而且更依赖审阅者对上下文的熟悉程度。

你很快会看到一种现象:

  • 代码合进去了
  • 线上出问题
  • 复盘时谁也说不清当时为什么这样写

因为“为什么”从来没被写下来过。

2) 测试被当成“可选项”

生成代码最大的诱惑是:看起来很完整。

函数拆得很漂亮,命名也像那么回事,甚至还会顺手给你补点单测。

问题是这些单测经常是在“验证实现”,不是在“验证需求”。

典型症状是:

  • 覆盖率上升
  • 事故没少

因为你缺的是验收标准,而不是缺一套 JUnit/pytest 的格式。

3) 回滚路径被忘了

手写改动通常会让人天然想到“如果不行怎么办”。

生成改动很容易让人产生错觉:这就是一段更干净的实现,应该没问题。

但线上最痛的不是“写错”,而是“改动太大,回不去”。

当生成变更跨越多个文件,多处重构,回滚就不再是撤一个 commit,而是要重新拼回旧语义。

这就是责任边界移动之后,最昂贵的账单。

把责任边界拉回来,要做的不是“禁用 Codex”

很多团队看到这些问题,第一反应是限制使用:

  • 禁止大段生成
  • 禁止改核心模块
  • 必须手写关键逻辑

这些规则短期有用,但很快会变成形式主义。

真正有效的做法,是把“作者负责”的那部分前移到 Codex 使用流程里。

我最后收敛成四条硬要求,缺一条就不让合:

  1. 变更意图必须写清楚:一句话描述要改变什么行为,不是“重构一下”。
  2. 验收标准必须可执行:输入是什么,期望输出是什么,失败时怎么表现。
  3. 风险边界必须列出来:这次改动影响哪些调用方,最坏会怎样。
  4. 回滚方案必须明确:回滚到哪一版,数据怎么处理,降级开关在哪。

Codex 可以帮你写实现,但这四条它替不了。

更关键的是:这四条写出来之后,review 变轻了。

审阅者不需要从代码里猜“你到底想干嘛”,只需要判断“你写的意图和实现是否一致”。

最常见的误区

误区 1:把 Codex 当成“会写代码的新人”

新人会在不知道的地方卡住,会问问题,会暴露不确定性。

Codex 不会。

它会在不确定的时候给你一个看起来最顺的答案。你如果没有验收标准,它就会把不确定性埋进代码里。

误区 2:用更多提示词弥补缺失的工程流程

提示词可以帮助它更贴近你的风格,但它无法替代你的把关机制。

你把流程缺失塞进 prompt,最后会得到一份“写得越来越长的组织记忆”,但它没有版本控制,没有回滚策略,也没有故障演练。

误区 3:只统计“节省了多少时间”

最危险的指标是:每个需求节省了多少开发时间。

因为它会驱动所有人追求更大的生成范围。

我更愿意盯两个指标:

  • 生成变更合入后的返工率
  • 生成变更引入的事故占比

它们才和责任边界有关。

适用边界

不是所有团队都需要这么重的约束。

如果你的系统足够小,发布足够频繁,回滚足够简单,Codex 的风险会被吞掉。

但一旦满足下面任意一条,责任边界就必须显式化:

  • 变更会影响支付、风控、审批这类高代价链路
  • 发布周期长,回滚成本高
  • 代码所有权模糊,review 已经是瓶颈

在这些场景里,Codex 的“更快”会先把你推到更慢。

结尾

Codex 当然能让写代码更快。

但它真正改变的,是团队对“变更谁负责”这件事的默认答案。

如果你不把意图、验收、边界和回滚前移,责任就会自然滑到审阅者身上。

最后你会发现,省下来的不是开发时间,花出去的是整个团队的注意力。这个账,比 token 贵多了。