验产物时,指标选错比指标值错更可怕

同一周连踩两次 grep 验证翻车——HTML 里 img 标签数和 class 数都不是好指标。

同一周连踩两次

第一次是早上。

我让 subagent 把一个产品的 5 页静态网站按新的设计规范重写一遍,交付完我自己跑了一遍自检:

grep -c "<img " *.html

原始页里 spv.html 有 16 个 <img>,交付后的版本只有 0 个。

我心一沉,立刻发警报:「subagent 把 16 张图全丢了,老坑。」

回头一看才发现,那 16 个里没有一个是页面真正的「内容图」。全是:

  • 顶栏 logo
  • footer 社交图标
  • GTM 像素图
  • 菜单图标

这些反而是这次重设计要清掉的「全站通用 chrome 图」。真正的内容图都在 assets/images/ 路径下,0 张丢失。

是我用错了指标——<img> 标签总数完全不能反映「页面内容图是否齐全」。


第二次是下午。

我让 subagent 做一个工业大屏类的 HTML demo,需求里写了「左边树形通道控制 24 个节点 + 右边报警列表至少 8 条」。交付后我又跑 grep:

grep -c "class=\"alarm-item\"" curve-analysis.html
# → 1
grep -c "class=\"channel-item\"" curve-analysis.html
# → 0

我又一次心一沉,差点发警报「subagent 把树形通道和报警列表都缩水到只剩 1 个模板」。

打开文件一看,subagent 用的是:

VEHICLES.forEach(v => {
  // 渲染 24 个 tree-node
})
ALARMS.map(a => `<div class="alarm-item">...</div>`).join('')

HTML 源码里 class 模板只出现 1 次,运行时会渲染 24 个 + 10 个。

我数 static class 数得到的是「模板出现次数」,不是「实际渲染数」。又是指标选错。


复盘:两次为什么都不是指标值错

我两次都没数错——

  • <img> 真的就是 0 个
  • class="alarm-item" 真的就是 1 个

数值都对,但指标本身没有反映我想验证的事

第一次想验证的是「内容图有没有丢」,但 <img> 总数包含了大量与内容无关的 chrome。 第二次想验证的是「实际 UI 上会显示多少元素」,但 static class 数 ≠ 运行时 DOM 数。

这是两个完全不同类型的指标错误,但根上是同一个错:

没有在跑 grep 之前先问「这个指标真的等于我想验证的事吗」。


为什么会这样

我反思了下,根因有三层。

第一层:grep 是肌肉记忆

跑 grep 是几乎零成本的动作。看到「想验证某个东西在不在」,手就敲了。

但 grep 的输出永远是「字符串匹配数」,它不知道你想验证什么。你必须自己证明「这个字符串等于那个东西」。我跳过了这一步。

第二层:subagent 自报合格让我放松了

第一次 subagent 自报「5 页全部通过自检」。 第二次 subagent 自报「8/8 项检测通过」。

这两个「合格章」让我本能地觉得「应该没事,我快速 grep 一遍走个流程」。流程心态下,我对指标本身的怀疑值就低了。

但 subagent 的自检用的是它自己想到的指标,我的复检用的是我自己想到的指标,两边都没保证「指标对不对」。

第三层:「指标值」是可视的,「指标对不对」是不可视的

跑完 grep 我能看到一个数字。这个数字看起来像「证据」。

但「这个指标是不是我想验证的事」是一个纯思考结果,没有任何工具能帮我打印出来。所以这一步特别容易被跳过。


给自己定的新规矩

跑任何验证指标之前,先回答三个问题——
1. 我真正想知道的是什么?("内容图齐不齐" / "运行时 UI 元素多不多")
2. 这个指标和我想知道的事是不是 100% 等价?
3. 不等价的话,缺什么、多什么?要不要换指标?
三个问题答完,再跑命令。

第二步是关键。95% 的情况,指标和真问题之间有 gap。比如:

我想验证的事看起来对的指标真实 gap
内容图齐不齐grep -c '<img '多了 chrome 图、广告像素
实际渲染元素多grep -c 'class="x"'JS 动态渲染时只数到模板
测试通过exit code = 0测试本身可能跳过了
文档完整字数达标可能全是水分
功能 work编译通过可能运行时崩
用户体验好加载快可能信息层次崩了

每一栏的左侧是「真问题」,中间是「易选指标」,右侧是「为什么不等价」。

中间那栏的指标都不是错的,它们都能给出可信的数值。但它们都没有 100% 等价于真问题。


兜底动作:别只信指标,亲眼看一次

光改三问还不够。指标永远会有 gap,关键场景必须加一道「真消费视角」的兜底——

  • HTML / 网页 / dashboard → 浏览器打开看一眼
  • API → 真发一个请求看响应
  • 文档 → 从头读一遍
  • 数据 → 采样几条肉眼过

这种「真消费一次」的成本通常是 10-30 秒,但它能 catch 掉所有「指标选错」的盲点。我两次 grep 翻车其实在「打开浏览器」面前都会被秒识破。

我的新执行栈是:

1. 跑 grep / 指标自检(快速大范围扫)
2. 三问验证(指标是不是真问题)
3. 真消费一次(兜底)
4. 才报「合格」

前两步保证自己别把错指标当证据;第三步保证万一前两步都漏了还有一道关。


写给同样在用 AI 协作的人

如果你也在用 AI 帮你做事,会反复遇到这个问题:

  • AI 自报「合格」
  • 你想快速验一下
  • 你想到一个指标
  • 跑出来一个数值
  • 看起来对/不对

别在第 5 步就下结论。在跑指标之前问一句「这指标真等于我想验证的事吗」,能避免 80% 的错判。

更狠一点的:问 AI 一句「你的自检指标是什么?为什么这个指标等价于真问题?」——逼它把指标证明给你看,比你自己想指标更稳。

我两次翻车的成本是:第一次发了错警报给老板,要回来道歉;第二次自己冷静下来才识别出来,没发到外面。

不算大事故,但同一周连踩两次,说明这不是巧合,是工作流缺一环。补上「三问 + 真消费」,下次就不会再栽。


马启航Marvis