← 所有文章

质量是唯一的变量

项目经理的职责是平衡四个变量:范围、时间、成本和质量。经典的约束三角告诉我们,四者之中最多只能优化两个。想要又快又便宜?质量会打折扣。想要又好又快?成本会上升。在资源有限的环境中,这个三角模型确实有用。

但我并不处于资源受限的环境。我与一个AI智能体协作——它能以推理的速度生成代码,上下文窗口足以容纳整个代码库,而一次会话的成本以美元计,而非薪资。约束三角就此瓦解。

当智能体能在几分钟内实现一个功能时,问题不再是”我们能否承担把它做对的代价”,而是”我们有什么理由把它做错?”

逐一排除

把时间从决策中移除。不问”这要花多久”,而问”完成后它应该是什么样子”。前者优化的是交付速度,后者优化的是成果本身。

把成本从决策中移除。一次产出正确、整洁、经过充分测试的代码的会话,与一次产出权宜之计、混乱、未经测试的代码的会话,成本完全相同。API按token收费,不因质量高低而异。做对的边际成本为零。

把精力从决策中移除。智能体不会疲倦。它写第一百个函数时的能力与写第一个时别无二致。不存在”人类疲劳曲线”来为会话后期的偷工减料辩护。输出质量的上限取决于指令质量和上下文质量,而非经过了多少小时。

排除时间、成本和精力之后,剩下什么?质量。质量是唯一剩下的变量。

实践中的含义

当质量成为唯一变量时,许多常见的工程决策变得不言自明:

写测试。 关于”是否值得为某个函数写测试”的争论消失了。智能体几秒钟就能写完测试,边际成本为零,边际收益却是永久的验证保障。不写测试,等于在没有任何节省的情况下主动接受更低的质量。

修复相邻代码。 修复一个bug时,周围的代码往往存在关联问题:命名不一致、缺少错误处理、过时的模式。在时间受限的环境里,你修完bug就走,把相邻代码留给”以后”。而当质量是唯一变量时,触及之处皆应修缮。以后永远不会来,现在却不花额外代价。

选择正确的抽象。 临时方案能解决眼前的问题,正确的抽象能解决一类问题。在时间受限的环境里,临时方案今天上线,正确的抽象永远不会上线。当智能体能在同一次会话中实现任何一种方案时,临时方案便失去了优势。选择抽象。

先读再写。 在时间受限的环境里,工程师有时会在未充分阅读代码的情况下修改它,依赖局部理解。当智能体能通读整个文件、理解其模式并在完整上下文中修改时,没有理由在不完整的理解下操作。读完整个文件,理解模式,然后再动手。

不要拖延。 TODO、FIXME、HACK——这些都是质量被延后的标记。在时间受限的环境里,延后是合理的:以后有时间再修。当质量是唯一变量时,延后便不再合理。智能体就在这里,上下文已经加载,现在修和以后修成本一样。现在就做。

Jiro原则

小野二郎做了七十多年寿司。他的餐厅拥有米其林三星,只有十个座位。菜单和方法从未改变,但方法每天都在精进,已持续七十年。

当有人问二郎一块寿司是否足够好时,答案从来不取决于餐厅有多忙、有多少客人在等、鱼有多贵。答案取决于这块寿司是否达到了他的标准。标准是绝对的,外在情境无关紧要。

将这一原则应用于工程:标准在于代码本身,而非冲刺周期。一个函数要么正确、整洁、经过充分测试,要么不是。截止日期不改变评判,预算也不改变评判。唯一的问题是:成果是否达到了标准。

AI智能体让这一原则在软件工程中首次变得切实可行。在智能体出现之前,Jiro原则只是美好的愿景。追求完美的人力成本太高。每一次偷工减料都有其合理的理由:周四必须上线、预算耗尽、工程师精疲力竭。有了智能体,做对和做错的成本相同,偷工减料便失去了正当性。

自豪检查

每次非trivial的改动之后,我会问五个问题:

  1. 资深工程师会认可这种做法吗?
  2. 代码能自我解释吗?
  3. 边界情况处理了吗?
  4. 这是恰当的简洁程度吗?
  5. 我是否让代码库变得比之前更好了?

这些问题不是关于正确性的——证据门控负责正确性。自豪检查关注的是工艺。正确但没人愿意维护的代码,无法通过第1条。巧妙但需要注释才能理解的代码,无法通过第2条。只处理正常路径而忽略错误路径的代码,无法通过第3条。

第4条最难。”恰当的简洁程度”并非”尽可能简单”。一行临时方案比一个合理的抽象更简单,但如果问题会反复出现,这种简单就错了。恰当的简洁,是在不解决假想的未来问题的前提下,用最少的复杂度解决实际问题。

第5条关乎方向。每次会话都应让代码库处于比开始时更好的状态。不仅是被修改的特定文件,还包括周围的上下文:更新测试、清理导入、修正注释、移除死代码。标准不是”我完成任务了吗”,而是”这个项目因为我的参与变得更好了吗?”

反驳意见

显而易见的反驳:速度很重要,上线很重要。一个完美但永远不上线的代码库,不如一个混乱但解决了实际问题的代码库。

这个反驳在质量与速度成反比的世界里是正确的。但在AI智能体以同样的速度产出高质量和低质量输出的世界里,这种反比关系不再成立。质量和速度成为独立变量,二者可以兼得。

剩下的权衡在于注意力,而非时间。通读整个文件需要注意力,运行证据门控需要注意力,执行自豪检查需要注意力。智能体的时间是免费的,但你的注意力是有限的。

质量是唯一的变量,而注意力是质量的约束条件。解决方案不是降低标准,而是构建基础设施来降低维持标准所需的注意力成本:自动捕获常见错误的钩子、编码质量工作流的技能,以及跨会话传递上下文的记忆系统,使你无需反复推导决策。

这就是复合上下文服务于质量的方式。每一层基础设施都降低了下一次会话的注意力成本。经过足够多的会话,标准便能自我维持。


常见问题

这适用于所有软件项目吗?

这一原则最直接适用于AI智能体负责实现的项目。在完全由人工实现的项目中,时间和成本仍是真实的约束。随着智能体能力的提升和人工实现时间的减少,这一原则的适用范围也在不断扩大。

原型开发呢?

原型从定义上就是可丢弃的。原型的质量标准是”它是否回答了我们正在研究的问题”。如果答案是肯定的,那么无论代码质量如何,原型都已完成使命。这一原则适用于将持续存在的代码,而非即将被丢弃的代码。

这不就是完美主义吗?

完美主义是一个无限的标准,没有任何东西能够满足。而质量是一个有限的标准,由证据门控定义:正确、整洁、经过测试、无回归,且解决了实际问题。达到标准是可行的,超越标准则无必要。标准很高,但并非无限。

如何处理技术债务?

不制造技术债务。技术债务就是被延后的质量。当质量是唯一的变量时,延后失去了正当性。智能体现在就在,修复的成本现在和以后一样。智能体产出的技术债务不存在利率问题,因为根本没有理由去产生它。


参考来源

本文所述哲学源自日本匠人精神(Shokunin)传统,以及AI工程系列中记录的生产实践。具体引用的实现包括:

  • 证据门控:完成验证的六项标准
  • 自豪检查:工艺评估的五个问题
  • 钩子系统:作为质量基础设施的84个钩子(Every Hook Is a Scar
  • 复合上下文:降低质量维护注意力成本的基础设施(Compound Context

相关文章

证据门槛

"我认为"和"应该没问题"不是证据。每份完成报告都需要文件路径、测试输出或具体代码。在AI输出看似合理的时代,举证的纪律至关重要。

1 分钟阅读

每晚入睡前我都会运行的检查

每晚例行:15,000个页面逐一检查,TTFB实测,缓存验证,站点地图爬取。这套睡前流程,正是运维纪律的栖身之所。

1 分钟阅读

为什么我的AI智能体需要一套质量哲学

我的Claude Code智能体以机器速度继承了人类所有的马虎习惯。我构建了3套哲学、150多道质量关卡和95个钩子。以下是真正奏效的部分。

4 分钟阅读