2007 年,游戏工作室 3D Realms 请来一位新的创意总监拉斐尔·范利罗普,给了他《永远的毁灭公爵》里的几大段来试玩。他玩了大约五个小时,越玩越兴奋:游戏已经做到这个份上,再拼一年就能发售。
不不,项目负责人乔治·布鲁萨德告诉他,还差两年。
「我心想,哇,」范利罗普说,「你有多少次已经到了终点线跟前,却以为自己还差得远?」
这款游戏十年前、1997 年就宣布了。2009 年 5 月,老板自掏的钱快烧光了,工作室解散了开发团队,游戏还是没做完。
加起来是 180% 的法则
1985 年 9 月,计算机科学家乔恩·本特利在《ACM 通讯》的专栏里,登了一批读者寄来的、短得能印上汽车保险杠贴纸的规律。其中一条来自贝尔实验室的汤姆·卡吉尔,本特利管它叫「可信度法则」:
「前 90% 的代码,花掉前 90% 的开发时间。剩下 10% 的代码,花掉另外 90% 的开发时间。」
这笔账是个玩笑:90 加 90 等于 180。好笑就好笑在它说中了身在其中的感觉:项目按计划走到 90%,然后在 90% 附近又待上差不多同样长的时间。(本特利还补了一句:规律旁边署的名字,通常只是把它寄给他的人,「哪怕那个人其实说是从他表哥拉尔夫那儿听来的」。)
卡在 90
1988 年,美国海军研究生院的塔里克·阿卜杜勒-哈米德把这个玩笑当了真。他引用了更早的一段描述,把它叫作「90% 综合征」:对完成了多少的估计,一直照计划往上涨,涨到八九成,「之后程序员自己的估计就涨得非常慢,直到活真正干完」。
他研究了美国航天局戈达德航天飞行中心的一个软件项目。人力估的是 1,100 人天,实际用了 2,200。最后花掉的人力,有一半从来就不在估算里,而项目大部分时间里,谁也看不出来。
时间就丢在这里。「完成了 90%」是拿一开始的计划量出来的。没人算进计划的那些活,各种奇怪的情况,单独没事、一拼起来就出错的部分,都在最后才冒出来,而那时进度条看上去已经快满了。阿卜杜勒-哈米德的诊断是两件事叠在一起:活一开始就估少了,做到哪一步又看不清楚。
设想一位咖啡馆店主,周二拿到了新做的网上点单页面,看上去已经完工。点一杯咖啡没问题,付款也没问题。当天下午,她照着顾客会用的方式试了一遍:输一个折扣码,价格变成了负数;填一个刚出城的地址,配送费一分没收;确认邮件掉进了垃圾箱。每一处修起来都只要半个小时。到了五点,页面还是「差一点就好了」,要修的单子比开始时还长。
智能体说的「做完了」
AI 智能体走到 90% 很快。2025 年,研究机构 METR 让一个基于 Claude 3.7 Sonnet 的智能体,处理两个大型开源项目里的 18 个真实问题。它写的代码有 38% 通过了维护者自己写的测试。接着研究者一份份细看了其中 15 份代码提交:没有一份能原样合并。测试没补全,格式不对,代码要再收拾。按研究者的粗略估计,每一份平均还要人花 42 分钟才能修好;他们自己说这个数「非常粗略」「是主观判断」,不是实测。
Anthropic 让 Claude 分很多轮会话去做一个完整的网页应用时,也撞上了同一件事。工程师写道,后面某一轮的智能体会「四下看看,发现已经有了进展,就宣布活干完了」。
他们的办法,是把终点线写下来。动手写代码之前,先由第一轮会话把需求拆成一份功能清单,光一个应用就有两百多条,每一条一开始都标着「未通过」。提示词要求后面的会话只改这个标记,不许删改任何一条需求。这是一条指令,不是一把锁。
光有清单还不够。Claude 还是常常跑完单元测试、对服务器发个请求,就把一项功能标成完成,却没发现它从头到尾走一遍根本不通。工程师于是给了它浏览器自动化工具,要它像真实用户那样去测。这一招效果很大,但不是处处都灵:智能体看不见浏览器自带的弹窗提示,依赖弹窗的那些功能,毛病就多一些。它们在清单上,也被检查过,却还是没做完。