前几天有人甩我一个链接。habibicode.org,项目叫 The Drawn World,署名 Nicolas。我当时正等一个灰度窗口,滚了两屏。
37,500 幅手绘国界和海岸线,全是人凭记忆画的,来自 Borderline 那几轮游戏。叠成一张图。
我本来当乐子。看到第三分钟,把手机支架扶正了。
它没把画错的剔掉。
这事比 37,500 那个数重要一百倍。
页面怎么做的:每一笔有自己的得分。分低的不是删,是透明度调高,看着淡。同一条线路被好几个人画过,墨迹就叠上去,越叠越深。线条强度代表准不准,颜色深浅代表有多少人画在同一条线上。国家名旁边挂个数字,是这片范围里攒了多少幅。来源还分 D、LB、C,对应 Daily、陆界轮次、海岸线轮次。灰底上压着真实海岸线和国界当参照。
然后有个开关:看全部,还是只看最好的那批。
大部分人点“只看最好的”。
这我太熟了。我们那套监控面板,本质就是“只看最好的那批”。采样、聚合、丢异常点、算完 p99 再把最高的 1% 切掉,理由写得很客气——“噪声”。我在不止一份 dashboard 里见过这么一行:
# 排障前的“清理”
drop samples > 3σ
切掉的那 1% 叫什么?叫故障。洗掉了,图是干净,代价是你得靠接电话才知道出事了。接电话的是谁?冤种。
说句实话,我不是要骂做看板的人。噪声确实烦,谁都想让线好看点。但你先看一眼再洗行不行。顺序反了,整张图就成公关稿。
分类那层我也多看了两眼。D、LB、C 看着像网站功能,其实是“这批数据什么时候、以什么心态画的”。随手画一轮,跟认真轮次里画的,误差压根不是一回事。混一块算中位数,是骗自己。我们那边叫数据来源不分层,出了事对账对不出来——同一张图上有三种口径的样本,谁都以为自己看的是全部。
这地图还有一页统计。列是这么排的:D、LB、C、All、Median score,最后是 Median error。
中位误差。
不是最高分,不是“最好那批”的平均分,是中位误差。就是“一般人凭记忆画,大概偏多少”。这数很难看,非常难看。你要是把它塞进季度汇报里,第一个被问的就是“能不能换个口径”。
但它是唯一一个能拿来说事的数。
补一刀:这页把每片区域的绘图数量也一起挂出来了。这个细节我盯着看了一会儿。只有几十幅的区域,和攒了上千幅的区域,中位数根本不是一回事,放一起比就是耍流氓。
我们那边最常见的毛病就是这个——面板上甩个 p99,不带样本量。数字漂亮,样本七个。七个。你拿七个样本的 p99 去砍容量、去定 SLO,那不叫数据驱动,那叫抽签。
扯远了,回到这张图。
真正让我坐直的是颜色那层。颜色深浅表示有多少人画了同一条线。深的地方,是大家脑子里长得一样的部分;浅的、模糊的、被反复涂改的那几段,是没人拿得准的地方。
干这行这些年,我最怕这种“模糊段”,只不过我们的版本不在纸上,在架构图里。
你随便拉三个老兵,问他们某个服务的数据边界画在哪儿、这个队列挂了谁会先疼、这个定时任务到底归谁管。三个答案。
这不是文档没写好。这是设计本身有分歧,只是没人摊开。文档写得再漂亮也压不住——底下是三个不同的系统。
而凌晨三点,Sev1 百分之百落在这种模糊段上。清晰的地方大家都熟,出事也接得住;模糊的地方,连“这个告警要不要紧”都没人一句话答得出来。这剧本我看过太多次了。
这里得自我推翻一下。我看到一半的时候想过:我们是不是也该搞一个这种东西,让值班的人凭记忆画架构,叠一叠,看哪儿是模糊段。
想了十分钟,否了。
不是技术做不出来,是人不会诚实地画。你让他们画,他们画的是“架构应该长什么样”,是入职培训上那张图,不是“我凌晨三点以为它长什么样”。前者人人都会背,后者才救命。而后者,没人愿意画在一个同事能看见的页面上。
所以这个抄不了。
但这个项目有两件事明天就能抄。
第一,看之前别过滤。原始那层永远留个入口,谁都能点开看没洗过的样子。你可以洗,但洗完的那张不是证据。两张必须同时存在,不能只留一张。
第二,别放不带样本量的百分位。中位数后面必须跟 n。个位数都不好意思往上摆。
最后说一句这地图没明说、但我看出来的事。
它把所有人画的东西都留着,包括画歪的那一半,压在灰色的真实边界上。真实一直在那儿,灰色的,清楚得很,但没人往那儿看。大家看的是叠上去的那层墨。
系统的真实样子也一直在那儿。日志里有,trace 里有,配置里有。没人翻。
大家翻的是半年前画的那摞架构图——线条笔直,谁都没敢动过,也没人真敢信。
画错的那些,才是数据。