— 文章

软件工程的可控感,是约束出来的幻象

#agentic-workflow

软件工程的可控感是假的——只有当你把人从执行层排除、只和机器打交道时,确定性才存在。联调噩梦、老板反复、AI-first 的不确定性,都是现实常态的暴露。可控是约束出来的特例,不可控才是默认。

Shunyang LiShunyang Li

联调噩梦——每个人的噩梦,只是不一定所有人的。

你凌晨在排查一个 bug:接口返回数据不对,你以为是自己的问题,debug 半个小时,数据突然对了。不是你修的——是隔壁工位的人刚刚改了他的代码重新部署。你耗了半个小时在一个不存在的 bug 上。

第二天,你的功能又挂了。这次是你本地环境没问题,但测试环境挂了——有人的变更和你冲突。你去找他,他说他昨天已经改回去了。那为什么还是挂的?因为还有一个三楼的同事也改了同一个接口。

一周的联调,花在排查真正 bug 上的时间可能不到两成。剩下八成是在等别人部署、排查别人的变更影响、处理环境不一致——然后在某个时刻,问题自己消失了,你不知道是修好的还是碰巧好的。你也不想再追究了,因为下一个问题已经来了。

这不是 bug。这是多智能体系统的涌现行为。

每个人都在独立决策——改代码、部署、回滚——这些决策互不协调但又互相影响。没有谁做错了什么,但系统大部分时间是坏的。你在里面,像一个身处布朗运动的粒子——每一个碰撞都很合理,整体方向完全不可控。

另一个场景:老板的决策函数

老板冒出一个想法。你给了一版方案。老板不满意,指出另一个调整思路。你回去改了。还是不满意,又换了个方向。第三次,方案过了。

你事后复盘:老板到底想要什么?有没有规律可循?似乎有——他重视用户感知、不喜欢纯技术方案、偏好渐进式而非一步到位。但这些"规律"从不是 100% 成立的。下一次他可能推翻所有你总结出来的模式。

这不是因为老板反复无常。是因为他的决策函数对你不可见。你看到的是输入(你给的方案)和输出(他的反馈),但中间的推理过程——他在会议上听到了什么、他昨天和总监聊了什么、他对竞品的判断有没有变——全在黑箱里。

你和老板的关系,就像你和 AI agent 的关系:你能看到行为,看不到推理。

不想面对的事实:可控感是假的

上面两个场景——联调噩梦和老板反复——有一个共同的本质:人的行为是非确定性的,而软件工程把人从执行层排除掉了,才制造出"可控"的假象。

写代码的时候,你觉得一切都在掌控之中。代码逻辑是确定的——if 就是 iffor 就是 for。测试跑过就过了,没过就是有 bug,修了就是修了。部署管线绿了就可以上线。这种感觉太好了,好到让人产生一个错觉:工程天然就是可控的。

不是的。

软件工程的可控感不是"自然状态",而是一次选择的结果——你选择只和机器打交道,只把问题限制在机器能精确执行的空间里,然后在那个空间里享受确定性。那个空间之外的一切——人的判断、沟通、协调、博弈、妥协——全被推到了"流程"和"管理"的黑箱里,假装那不是工程问题。

联调的时候,黑箱破了。老板反复的时候,黑箱也破了。你在那些时刻感到的失控,不是异常——那才是常态。可控感才是那个被精心构造的特例。

两条证据

证据一:AI-first 让黑箱再也藏不住了

传统工作流里,人和人之间的非确定性被"流程"罩住了。需求评审、设计评审、接口对齐、产品验收——这些流程不是因为大家喜欢开会,而是因为人和人之间的理解天然有偏差,需要反复同步。

但流程是隐式的。你不需要把"为什么做这个决策"写下来——你的同事跟你站过白板、开过讨论、共享过上下文,他自然就理解了。黑箱虽然不透明,但里面有足够的共同经验在起作用。

AI-first workflow 把黑箱拆了。当 agent 需要人的判断做输入,当你必须把"我为什么选方案 A 不选方案 B"写成规格,当节点间需要显式的输入输出契约——那些以前靠共同经验消化的非确定性,现在被迫显性化了。

这就是为什么 AI-first 工作感觉像算法工程:你不是在写确定性程序,你是在给非确定性系统设计 harness。

证据二:harness 不是 AI 的专利

联调噩梦的时候,你本能地想做的是什么?加约束。

代码冻结窗口——规定联调期间只有谁能在什么时间改什么模块。部署排期——让每个人的变更按顺序上线,而不是同时推。接口契约——先锁死接口定义再各自实现,而不是边写边改。健康检查——部署后自动跑冒烟测试,坏了立刻告警回滚。

这些不叫 harness,但实际上就是 harness——它们不做任何功能性的事情,只限制非确定性系统的破坏半径。你的直觉——"给联调阶段配一套 harness engineering"——不是自嘲,是精准的工程直觉。

老板反复的时候,你想做的也是加约束:预先对齐方向、定义决策框架、明确"在这个前提下你授权我做什么"。这些是治理层面的 harness——不能消除老板的反复,但能减少反复的代价。

连续体:不是两种工程,是一个谱

把软件工程和算法工程当成两种不同的东西,是一个错误的二分法。它们是同一个连续体上的两个端点。

确定性端:代码执行。输入确定,输出确定。测试可复现。调试是追踪执行路径。

非确定性端:多人协作。每个人的决策互不透明,行为不可预测,系统大部分时间处于不理想状态,问题经常自己出现又自己消失。

现实世界的每一项工作都在这个谱的某个位置上。联调?偏非确定性端。写一个纯函数?偏确定性端。和老板对需求?非确定性。和 agent 对需求?也是非确定性——只是这次"老板"的推理更不透明。

这个框架的直接用处是:不同位置需要不同重量的 harness。

  • 紧约束的 agent 任务(按 spec 实现一个函数)= 靠近确定性端 = 轻量 harness
  • 跨团队联调 = 靠近非确定性端 = 重量 harness——版本契约、部署窗口、健康检查、回滚触发
  • 和老板对齐需求 = 非确定性端 = 事先约束——方向确认、授权范围、变更成本声明

过去我们只在确定性端做工程,把非确定性端推给"管理"和"沟通"。AI-first 打破了这个分工——它把工程的责任扩展到了整个谱。

"我不喜欢跟人打交道"

我一个朋友说过:我选写代码就是因为不喜欢跟人打交道。代码不会突然改主意,不会跟你玩政治,不会表面说好好好背后另一套。

这可能就是偏好确定性端。在那一端,你确实可以只和机器相处——输入输出清晰,因果关系可追溯,犯错有错误信息告诉你错在哪。

但 AI-first 把这个舒适区打破了。当你的"代码"是 agent 生成的,当你要设计的不是函数而是 agent 的 behavior spec,当你验证的不是"跑没跑通"而是"agent 的判断对不对"——你就被迫和整个谱打交道了。

这不是退步。这是工程思维终于覆盖到了它本就该覆盖的地方。那些被推到"管理"和"沟通"黑箱里的问题——人的判断不一致、理解有偏差、决策不透明——本来就是需要工程化处理的东西。只是以前我们没有工具做这件事,所以靠人的经验、直觉、共同工作记忆来消化。

现在有了 agent,有了 spec-driven development,有了 harness engineering 的方法论——我们终于能够把非确定性端也放进工程的版图里。

代价是:你得接受不可控是常态。可控才是特例。

一句话总结

软件工程的可控感不是默认状态——是只和机器打交道时才有的局部幻象。联调噩梦、老板反复、AI-first 的不确定性,不是偶发的失控,而是现实世界的常态被暴露了出来。不可控才是默认,可控是约束出来的特例。Engineering 的对象不应该只是确定性系统,而是整个确定性-非确定性谱——不同位置需要不同重量的 harness。


我还没想清楚的一些事

非确定性谱上不同位置需要的 harness "重量"怎么量化?我现在只能给出"轻/中/重"的直觉判断,但有没有更精确的指标?可能的候选维度:决策者数量、信息透明度、反馈延迟、错误代价——但怎么把这些合成一个"需要多少 harness"的指导值?

连续体模型对组织中"谁该做工程决策"的责权分配有影响吗?如果联调阶段本质上是非确定性端的,那负责联调的人不应该是最懂业务逻辑的,而应该是最懂 harness 设计的——这和现在的角色分工不一样。是不是需要一个"harness engineer"的角色?

如果可控感是幻象,那我们为什么要追求可控?也许可控不是目的,而是手段——追求可控的真实目的是在不确定性面前降低焦虑。如果是这样,那 harness 的核心价值不是"控制"而是"心安"——这让 harness 的设计标准从"消除不确定性"变成"让人在不确定性中仍能行动"。这个视角的变化会导致不同的设计决策吗?

参考文献

  • 李舜阳 (2026). 你用做需求的方式做 AI-first,所以它不 work. 本篇的直接前作。AI-first workflow 是算法工程而非软件工程的核心论点——终点漂移、产出不可预测、工期不可估——以及验证负担、非线性进度、假设文档等实践建议.
  • 李舜阳 (2026). Demo 和生产之间不是鸿沟,是相变. Demo 环境消除的是导致失败的根本条件而非隐藏 bug。四个失败模式(权威性幻觉、越界危险、长程退化)与三个保护条件的对应关系.
  • Hagemann, J. et al. (2023). Human-AI Teams — Challenges for a Team-Centered AI at Work. Frontiers in AI. 高效团队使用"理解-理解分享序列"构建集体认知——AI 提供答案而非参与来回,打破了集体认知构建机制.
  • Wharton / Nature Human Behaviour (Meincke, Nave, Terwiesch, 2025). ChatGPT 提升个人想法质量但导致小组产出高度趋同——一个群体层面非确定性的实证:个体看似可控,群体涌现不可控.
  • Anthropic Engineering Blog (2026). Harness Design for Long-Running Application Development. $9 vs $200 的实验——harness 不产生功能,只约束非确定性系统的破坏半径.
  • MIT Media Lab (Kosmyna et al., 2025). Your Brain on ChatGPT. 4 个月实验:LLM 组脑神经连接最弱,提出"认知债务"概念——短期的可控感积累长期的不可控代价.