设计流程 · 月度分享

绿的检查
不等于检查过

这个月我们抓到两次:自动检查报「通过」,而它其实一个对象都没检查
这件事比「我们又建了几道闸」更值得讲。

窗口2026-09-10 → 10-10
受众领导 + UX
时长15 分钟
先说结论

我们最信任的那道检查,
可以在「完全没干活」的情况下亮绿灯。

而且它没有算错——它逐字执行了自己的判据
问题出在判据够不着的地方。

下面用这个月一次真实的走查,从头走一遍。

主线 · 一次真实的交付走查

起点是人眼,不是机器

「这个 PRD 卡的超链接有问题。」—— owner,一眼看出来的

这时候,负责检查超链接完整性的那道自动检查是绿的
它刚刚跑过,没有报任何问题。

主线 · 那个绿是什么意思

它报的不是「都对」,是「没东西可判」

✓ 检查结果
0 处问题

看起来一切正常

⚠ 同一份报告的另一行
checkedUnits = 0

一个对象都没检查。8 处引用整批落在判据的射程之外。

「0 个问题」和「0 个检查对象」,在报告上长得几乎一样。

主线 · 射程为什么够不着

判据假设的结构,和真实结构不一样

判据是这么写的:「同一个文本块里有没有出现溯源字样」。
而 PRD 卡里的 Source 段,实际是这样长的——

段标题(判据看得见)
Source
← 含溯源字样,进分母
引用行 1(看不见)
兄弟节点,自己不含那几个词
引用行 2(看不见)
同上
引用行 3(看不见)
同上

标题和内容行是兄弟关系,不是父子。⇒ 真正要检查的那些行,从来没进过分母。

主线 · 补完之后,同一轮又抓到一个

这次是反过来的:长得像链接,其实点不动

补完射程,我顺手写了条新规矩:凡是带链接的文字,必须是青色 + 下划线
几十分钟后,在 Journey 卡上实测到这两行——(下图是 Figma 里的实际渲染,不是示意)

✓ 真链接 Jira V4-1646 — The Wi-Fi function is missing the 'Other' option.
✗ hyperlink = null Jira 主单 V4-1646 —— WiFi 功能缺少 Other 选项。

两行的样式完全一样:同样的青色、同样的下划线。
上面那行点得动,下面那行点不动——肉眼分不出来上图按 Figma 里的实际样式重绘(青色 + 下划线),⛔ 不是截图。

我只规定了「有链接的该长什么样」,
没规定「长成链接样子的必须真有链接」。

主线 · 这一轮的三个读数

从「假绿」到「真绿」,中间必须经过一次红

改之前
checkedUnits = 0
绿 —— 但一个都没检查
假绿
补完射程
8 个对象 · findings = 1
红 —— 抓到一个真缺陷
就是那行点不动的链接
修完
8 · findings = 0
绿 —— 这次是真绿
分母还在,问题没了

为什么这三个数要一起看:只看头和尾,两次都是「绿」,什么也证明不了。中间那次红,才是这道检查真的在干活的唯一证据。一道从来没红过的检查,和一道坏掉的检查,在报告上长得一样。

主线 · 两次的形态一模一样

判据本身都是对的,
漏的是它没覆盖的那一侧

所以写完任何一条检查规则,跑这三个问法——
⛔ 要问的不是「这条判据会不会算错」。

  1. 分母是怎么来的?什么东西会因为形态不同,整批落在射程外?checkedUnits=0findings=0 是两件事。
  2. 反过来那一侧谁管?规则形如「所有 A 必须有 B」时,「有 B 但不是 A」由谁判?这次两个反例都出在这一侧。
  3. 这条判据是在真实结构上验过的,还是在我想象的结构上?射程盲区的根因就是这个。
第二节 · 同一个毛病,这次犯在我们自己头上

为这场分享做的取数工具,
第一次真用就被它自己拦下了

这套流程有条硬规矩:所有数走同一张取数单,它出数之前先自证口径——拿历史上已经核过的几个数当标尺,对不上就不出数。

本期第一次跑
EXIT = 1

自证没过 ⇒ 整份材料的数当场判为不可用,一个数都没印。

这正是它该做的
不出数

带着漂了的口径出材料,比没有材料更坏。

第二节 · 它红在哪

又是判据量错了对象

那条自证写着「窗口起点取今天,应该至少看得见最新那次提交」,注释里管它叫恒真关系
它实际量的是——今天有没有人提交过代码

那天上午还没人提交,于是它红了。红的是判据自己,不是数据。

以前 · 一条

想同时做到「永远成立」和「出错时能报警」——这两件在这里做不到,因为它们的差随时刻变。

现在 · 拆成两条

一条锚在「最新提交自己那天」,永远成立;另一条读自己的源码,检查每个取日期的地方有没有走对函数。

验的方式:分别注入两种故障 —— 一种只让第一条红,另一种只让第二条红。互不替代,这才说明拆得有必要。

诚实边界

有两个数,我们至今写着「口径不明」

上一期页面上有两个数,这次想复现,四个候选口径算出来的值没有一个对得上

省事的做法

挑一个最接近的填上去。反正差不多。

实际的做法

原样印 UNKNOWN,并写明「这不代表上期那个数是错的,是口径没被记下来」。

要让它变成数字,得先把口径钉下来、补一个历史标尺。
在那之前,空着比填一个像的更有用。

已知不足 · 以及决定不做的

这个月没做成的几件

  • 「这套东西省了多少时间」,我们给不出数。那是个费率,不是事件——系统里根本没有采集它的地方。所以这条只能讲感受,⛔ 不编数字。
  • 这个月的量太小,前后对比只剩两根细线。与其撑成一节,不如老实说幅度不大。
  • 一条检查升级被否了:本来想把某道检查从「提醒」升成「拦截」,实测下来当前交付面 94% 会红、真正通过的是 0 ⇒ 升级的前提(合规是常态)根本不成立。决定不升,并把重开条件写成一个可以机器判的数。

为什么把「否掉的」也放进来:只报喜的材料没法判断可信度。这一条和第一节是同一件事——能说出自己哪里不成立,前面那些「成立」才有分量。

带走这一句

检查通过,
先问一句:
它到底检查了几个?

分母是怎么来的 · 反过来那一侧谁管 · 是在真实结构上验的吗
这三问不只对自动检查有用——对任何「我已经检查过了」都有用。

01 / 12
翻页 · F 全屏 · 点击右半屏下一页