当代码不再稀缺 - 04

Share
当代码不再稀缺 - 04
Photo by Isaac Smith / Unsplash

AI 时代还需要 Estimate 吗?

Don't estimate how long it takes to generate code. Estimate what it takes to trust the change.

不要只估算生成代码需要多久,要估算团队需要付出什么,才能相信这个 change。

上一篇:别再用更多 Ticket 衡量 AI Productivity

如果现在有人问 engineer:“这个 ticket 要多久?”答案可能越来越像这样:

“代码今天能出来。至于什么时候敢上线,我不知道。”

这不是 engineer 在打太极,而是“多久”这个问题里,本来就混着好几个不同的问题。

AI 让其中一个答案突然变得很短,于是我们终于看见其他问题一直都在那里。

一个 Estimate,其实混合了三个时钟

过去做项目,我们经常把一个 ticket 估成三天、五天或者几个 story points。

这个数字看起来是在估算 coding effort,实际上偷偷打包了至少三件事:

  1. 多久能写出一个实现;
  2. 多久能确认它是对的;
  3. 多久能通过 review、QA、dependency 和 release;

Coding 足够慢的时候,这三个时钟经常被 implementation 遮住。反正代码还没写完,review、QA 和 release 都不用着急。

AI 把第一个时钟压缩以后,剩下两个时钟就集体站到了台前。

所以 AI 没有让 estimation 失效。它只是让我们过去最常用的 proxy——coding effort——变得更不可靠了。

第一个时钟:Candidate Time

Candidate time 是从 intent 到获得一个 plausible implementation 的时间。

这是 AI 最容易压缩的部分。API、页面、migration、tests,很多时候都能很快生成。Engineer 甚至可以同时让几个 agent 尝试不同方案。

但 candidate 只是“一个看起来可行的答案”,不是 verified outcome。

如果我们把“AI 已经把代码写出来了”当作百分之八十完成,后面往往就会体验那种熟悉的项目管理惊喜:剩下百分之二十又做了很久。

不是最后一点工作特别神秘,而是我们一开始只估了 generation,没有估 confidence。

第二个时钟:Confidence Time

Confidence time 是团队获得足够 evidence、愿意相信这个 change 正确所需要的时间和 attention。

它包括:

  • Reviewer 理解 intent 和 system fit;
  • Tests / evals 验证业务行为;
  • QA 覆盖 corner cases;
  • Security 和 performance 检查;
  • 验证 business invariants;
  • 准备 failure recovery。

这里可以继续用床位管理的例子。

“判断某一天床位是否被预约”,从代码上看像一个简单的时间区间查询。AI 很快就能生成一个合理实现。

但系统真正使用的是“业务日”:当天 UTC 12:00:00 PM check-in,次日 UTC 11:59:59 AM check-out。查询“某一天是否被占用”,和查询“当前这一秒是否落在预约区间”,是两个不同的问题。

Implementation 很小,背后的 invariant、时间边界和验证 permutations 却不小。

如果只估 coding,这可能是一个 tiny ticket;如果估 confidence,它需要 domain context、边界测试和真正理解业务语义的 reviewer attention。

这正是 AI 时代 estimation 最大的变化:

实现大小不再稳定地代表验证难度。

第三个时钟:Delivery Time

就算 candidate 已经生成、tests 也通过,change 还不一定能立刻进入 production。

它可能还在等待:

  • 另一个团队的 dependency;
  • Reviewer attention;
  • QA 环境;
  • Security approval;
  • Data migration;
  • Release window;
  • Rollout 和 rollback 准备。

这些 queue 不会因为 AI 写代码更快就自动消失。相反,如果 generation capacity 上升,大量 candidate 同时进入下游,等待时间还可能增加。

所以“多快能写完”和“什么时候能交付”必须成为两个不同的 forecast。

前者主要看 generation;后者看整个 delivery system。

这也是第四章停止计时的边界。Engineer 的 estimation 到 change 获得足够 confidence、能够安全进入 production 为止。上线后的 operational acceptance 和 user / business outcome 由 PM / Ops 主责,不再作为第四个工程时钟。

但 Eng 不能因此退出 outcome loop。Confidence Time 仍应包括建立 instrumentation、dashboard、logs、data-quality checks 和 diagnostic path,使 PM / Ops 上线后能够基于可信 evidence 做判断。Eng 负责让结果可验证;PM / Ops 负责解释结果并决定是否达成业务目标。

不要停止 Estimate,要改变估算对象

AI 时代真正应该减少的,不是 estimation,而是对 coding effort 的过度依赖。

与其先问“几天能写完”,不如先判断五个维度。

1. Intent clarity

  • 业务问题是否清楚;
  • Acceptance evidence 是否定义;
  • Invariants 是否显式;
  • 是否存在多个合理解释。

Intent 越模糊,AI 越可能快速生产 slop,然后把澄清成本推给 reviewer 和 QA。

2. Change surface

  • 影响多少模块、服务和数据;
  • 是否修改公共 abstraction;
  • 是否有 migration 或兼容性问题;
  • 是否会制造重复实现。

代码 diff 很小,也可能跨过一个高风险系统边界。

3. State space

  • 涉及多少业务状态;
  • 是否存在权限、并发和时间边界;
  • Happy path 是否足够代表真实行为;
  • 哪些 permutations 必须被验证。

4. Reversibility 和 blast radius

  • 出错后能否快速 rollback;
  • Failure 是否容易被发现;
  • 是否影响账务、权限、数据完整性或核心业务;
  • Recovery cost 是什么。

5. Evidence cost

  • 什么证据才足以发布;
  • 哪些验证可以自动化;
  • 哪些需要稀缺 domain expertise;
  • 哪些 evidence 必须在 release 前建立。

这些维度比“AI 写这段代码要多久”更能解释项目为什么延迟,也更适合用来判断 forecast range 和 confidence。

Estimate Net Allocation,不要只做成本加法

很多 AI business case 会先保留过去的 implementation estimate,再在后面新增更多 review、QA 和 governance。这样算出来,AI 当然像一个又贵又麻烦的实习生。

更合理的 forecast 应该拆开四类 allocation:

Remaining implementation allocation
+ Transition cost
+ Confidence / verification forecast
+ Delivery constraints

第一项应该随着 AI 替代 implementation work 而下降;第二项在转型期暂时上升;第三项吸收一部分 freed engineering capacity;第四项反映 queue、dependency 和 release reality。

EM 在 estimation 时不能只问“还要增加多少 verification”,还要问:

  • 哪些 implementation effort 已经被 agent 可靠替代;
  • 哪些 freed capacity 可以在当前阶段真正转成 verification expertise;
  • 团队还要支付多久的 learning、workflow 和 double-work transition cost;
  • 哪些旧 allocation 或 output expectation 应该从 forecast 中移除。

这避免把同一份 capacity 计算两次,也解释了为什么转型初期的总周期未必立刻按 generation benchmark 缩短。

Risk 用来校准 Forecast,不用来设计 Attention Routing

说到这里,很容易出现一个危险冲动:既然 story point 不够用了,那我们发明 attention point 吧。

然后开一场 planning meeting,认真讨论这个 ticket 是三个 attention points 还是五个。兜兜转转,又回到了熟悉的 framework theater。

Attention 很难被压成一个可比较的数字。一个 domain expert 连续半小时的判断,可能比一个不熟悉系统的人读一天代码更有价值;一次被打断十次的 review,也不等于一段连续的 deep focus。

第四章不解决“有限 attention 应该分配给谁”,那是上一篇的 attention allocation 问题。Estimation 在这里要回答的是:attention、expertise 和 verification burden 会怎样影响 forecast。

Risk 和 uncertainty 应该改变四件事:

  • Range: 未知越多,delivery range 越宽;
  • Confidence: 关键 assumption 尚未验证时,不能给出高 confidence commitment;
  • Learning step: 可以先用 spike 或早期 candidate 消除最影响 forecast 的未知;
  • Checkpoint: 明确何时更新 estimate,以及什么变化会让原 forecast 失效。

低 uncertainty、可逆且有历史数据的 change,可以给更窄的 range。Domain 语义不清、dependency 未确认或 recovery cost 很高的 change,需要更宽的 range 和更早的 checkpoint。

Risk 在这一章是 forecast input,不是 workflow routing rule。

EM 应该怎样问 Estimate

过去的问题是:

这个 ticket 几天能写完?

新的 estimation conversation 应该包含:

  1. 多快能得到 candidate?
  2. 最大 uncertainty 是什么?
  3. 什么 evidence 才足以相信它?
  4. Verification 依赖哪些稀缺 expertise 和 capacity?
  5. 哪些 queue、dependency 和 release constraint 决定 delivery time?
  6. 如果判断错了,blast radius 和 recovery cost 是什么?

这不是为了让 planning meeting 变得更长。对 uncertainty 低、历史数据充分的 change,团队可以快速形成 forecast。真正需要先做 spike 或设置早期 checkpoint 的,是那些“代码看起来很简单,但未知很多”的 change。

管理层还是需要一个日期

最强的反对意见通常很现实:讲了这么多 confidence、risk 和 evidence,老板最后还是会问,哪天上线?

合理。项目管理不能只输出哲学思考。

但一个负责任的日期,不应该只来自 coding effort。它应该来自:

  • 团队历史 flow;
  • 当前 queue 和 WIP;
  • External dependencies;
  • Verification burden 和 required expertise;
  • Risk 和 reversibility;
  • 尚未解决的 uncertainty。

比起给一个看起来精确的单点日期,更诚实的方式是给出:

  • 一个 range;
  • 当前 confidence;
  • 关键 assumptions;
  • 下一次 checkpoint;
  • 什么变化会让 forecast 失效。

如果最大的 uncertainty 还没有被验证,可以先做一个短 spike,让 AI 快速生成 candidate、暴露未知,再更新 forecast。

AI 的价值不只是让 delivery 更快,也可以让 learning 更早发生。

这其实也不是一个新理论

一个资深 EM 可能会说:Estimation 本来就应该包含 uncertainty、risk 和 dependency。你只是把正常的项目管理重新说了一遍。

这个反对意见也是对的。

原则没有变。变化的是过去很多团队可以偷懒地把 coding effort 当作整体复杂度的 proxy,因为 implementation 本身占据了足够大的成本。

AI 让这个 proxy 更快失效了。

今天,一个 change 可以在几分钟内生成,却需要几天理解、验证和排队;另一个 change 代码很多,却高度可逆、automated evidence 完整,可以快速进入 production。

当 generation cost 和 confidence cost 开始脱钩,继续只估 coding effort,就不再是简化,而是误导。

下周可以做的一个小实验

选择一个即将开始的 feature,不要先给一个总 story point。

分别记录:

  1. Candidate time forecast;
  2. Confidence plan 和 required attention;
  3. Delivery constraints 与 queue;
  4. 最大 uncertainty;
  5. Reconsider / checkpoint 条件。

交付后再看,真正造成 forecast 偏差的是哪个时钟。

你可能会发现,AI 对 estimation 最大的帮助,不是让 estimate 更准,而是让 candidate 更早出现,让团队更早知道自己原来不知道什么。

不要只估算代码什么时候生成。估算团队什么时候有理由相信它。

Read more

当代码不再稀缺 - 03

当代码不再稀缺 - 03

别再用更多 Ticket 衡量 AI Productivity Code is cheap. Verified outcomes are not. AI 可以廉价制造代码,但不能廉价制造可信结果。 上一篇:AI 没有消灭瓶颈:Slop 正在吞掉团队的注意力 下一篇:AI 时代还需要 Estimate 吗? 有一种项目周会,特别容易让 EM 心情愉快。 这个 sprint 完成的 ticket 比以前多了,PR 数量涨了,commit 也很活跃。自从团队开始用 AI,dashboard 上的每一条线都在往右上角走。管理层一看:不错,AI productivity 已经兑现了。 然后 reviewer 默默打开

By andy
当代码不再稀缺 - 02

当代码不再稀缺 - 02

AI 没有消灭瓶颈:Slop 正在吞掉团队的注意力 When generation becomes abundant, attention is all we have. 当生成变得充裕,注意力就是团队最后的稀缺资源。 上一篇:AI 几乎写完了代码,项目为什么只从六个月缩短到四个月? 下一篇:别再用更多 Ticket 衡量 AI Productivity 上一篇写到,我们用 AI 做床位管理项目,AI 几乎取代了人工代码输出,但项目周期只是从预计的六个月缩短到四个月。 Coding 快了很多,code review 和 QA 的绝对耗时却增加了。 这件事有点像把高速公路前半段拓宽到十条车道,却忘了后面的收费站还是两个窗口。入口看起来特别繁荣,车都在往前冲,最后大家整整齐齐堵在下游。 软件项目也一样。 AI 没有消灭瓶颈。它只是非常高效地把瓶颈从“谁来写代码”,搬到了“

By andy
当代码不再稀缺 - 01

当代码不再稀缺 - 01

AI 几乎写完了代码,项目为什么只从六个月缩短到四个月? AI can generate code. It cannot own the outcome. AI 可以生成代码,但它不会替团队对结果负责。 下一篇:AI 没有消灭瓶颈:Slop 正在吞掉团队的注意力 我们最近做了一个床位管理项目。 按照过去的开发方式,团队估计大概需要六个月。这一次,AI 几乎取代了人工代码输出,项目最后用了四个月。 四个月当然比六个月好。我也很高兴。 但这个结果有点别扭:写代码这件事几乎都被 AI 接管了,整个项目为什么没有出现同样幅度的压缩?剩下的时间去哪儿了? 项目结束后回头看,我们确认了几件事: * Implementation 明显变快; * Code review 的绝对耗时增加; * QA 的绝对耗时增加; * 团队投入了更多验证工作; * 最终返工和缺陷反而减少。 这些事实不支持“AI 只帮我们省了两个月”这种简单结论。

By andy
低绩效同事,先别急着下结论

低绩效同事,先别急着下结论

团队里最难处理的,往往不是最差的同事,而是那些卡在board line上,挤挤能出活、但不挤就磨洋工的low performer 同事。 这类 low performer 一出现,很多Manager的第一反应就是:ownership 不行。问题是,这句话太空了,空到几乎没法行动。 我更喜欢用一个简单的框架看这件事:先判断原因,再调整支持,接着设观察期,最后做去留决定。 先判断:到底是哪一类问题 low performance 不等于 low ability。常见情况其实不一样: * 不会做:能力还没到,拆问题、推进、沟通都卡住。 * 不想做:知道怎么做,但投入不够。 * 做错方向:很努力,但目标理解偏了。 * 岗位不匹配:人不差,只是不适合这个角色。 比如: * 一个同事总是晚交,但每次都能把问题讲清楚,可能是任务切太大了。 * 一个同事总返工,

By andy