idevlab-blogs
From:
idevlab
Date:
Subject:

写程序,越来越像治理一个组织

写程序,越来越像治理一个组织的封面

以前写程序,我们关心的是函数怎么设计,模块怎么划分,数据如何流动,错误怎样处理。

后来有了 AI Coding,我们开始把需求交给 Agent,让它写代码、调试、测试、提交 PR。自己则更多地负责技术方案、工作拆分、Code Review,以及解决几个 Agent 之间的冲突。

这已经很像一名 Tech Lead 的日常工作了。

但最近,我又往前走了一步。

我开始让 Agent 管 Agent。

我不再亲自给每个执行者安排任务,也不再逐一追问进度。它们有自己的负责人,有任务分配和验收规则,可以根据情况增加执行者、调整方案,处理大部分日常问题。

而我在做的事情,开始有点像治理一个组织。

人和协调者面向共同目标,多个专长不同的 Agent 沿着任务路径协作

Leader 的 Leader 在做什么?

传统软件工程里,一个 Tech Lead 可能需要带着几名工程师完成项目。他要理解需求,确定架构,分配任务,协调依赖,解决技术争议,并最终保证交付质量。

那么,Tech Lead 的 Leader 呢?

一个管理着几个技术团队的人,不可能每天阅读所有人的代码。他甚至不一定知道某个工程师今天具体修改了哪个文件。再往上,一个大型组织的技术负责人管理着数百甚至数千名工程师,更不可能亲自审查每一个 PR。

但这不意味着他什么都不做。

某个团队进度失控,他需要知道原因;几个团队反复发生协作冲突,他需要修改协作方式;事故重复出现,他不能满足于每次都有人把服务重新启动。越往上,管理者越不直接处理工作本身,而是维护一套能够让工作持续进行的机制。

为什么高层管理者不看具体代码,组织依然能朝着正确的方向运转?

最近翻传统管理学的书,我发现赫伯特·西蒙在《管理行为》里早就聊透了这件事。西蒙认为,无论是人还是机器,算力和注意力都是有限的。面对复杂系统,高层管理的核心从来不是替下属做每一个具体决定,而是控制他们做决定时的前提。你给它设定什么样的价值优先级,让它看到什么样的环境事实,决定了它会推导出什么样的动作。

这和《不拘一格》里推崇的管理哲学如出一辙:管理高密度的聪明人,靠的不是死板的指令控制,而是高信噪比的上下文。

优秀的管理者并不是永远站在每个人身后,告诉他们下一步该做什么。相反,他需要让自己不在场的时候,事情依然能够正常推进。

共享的目标、边界和验收标准放在一处,多个 Agent 依此选择下一步

从写代码,到制定机制

我发现,AI Coding 正在让我们经历一个极其相似的过程。

最初,我让 Agent 写代码。后来,我让一个 Agent 管理另外几个 Agent。现在,我开始关心它们应该怎样组织工作。

比如,一个任务究竟应该交给一个 Agent,还是拆给多个 Agent?

不是人越多越好。并行可以缩短执行时间,但也会带来依赖、冲突和沟通成本。詹姆斯·汤普森在《行动中的组织》里算过这笔账:如果几个执行者必须边干边聊、实时互相影响,这种互惠性依赖的协调成本是最高的。想把成本降下来,就得在它们之间建立缓冲层——通过清晰的模块边界和隔离的分支,把高频拉扯的任务拆成按工序交接的流水线,或者干脆让它们各自独立作业,最后再做汇总。

因此,我更倾向于根据任务的实际情况动态组织执行者,而不是预先设置一整套产品经理、架构师、前后端的固定岗位。明茨伯格在《卓有成效的组织》里把这种僵化的科层制批得很透。面对复杂多变的研发任务,最高效的组织形态根本不是固定编制,而是随时聚散的特别小组——平时沉淀好高度标准化的原子技能,任务来了动态拉起几个执行者,干完活就地解散。

不同专长的 Agent 围绕同一项工作临时聚合,完成后再各自散开

再比如,怎样才算完成任务?

明茨伯格在书里提到,当你不去微操具体的工作流程时,粘合整个组织的唯一方式就是把产出标准化。在我的系统里,Agent 说自己写完了不算,代码通过本地测试也未必算,因为它很容易为了迎合指令而走捷径。它必须提供与实际版本对应的验证证据。PR 准备好审查、通过审查、合并和部署,是几件完全不同的事,必须靠铁板钉钉的验收契约来作数。

执行者携带测试、改动和发布证据,通过验收关口后任务才继续向前

还有,什么事情可以自主决定,什么事情必须交给人?

安迪·格鲁夫在《格鲁夫给经理人的第一课》里讲得很实在:把日常生产看作黑盒,根据任务的成熟度动态放权,管理者只在关键的高杠杆节点做抽检。

控制论大师斯塔福德·啤酒在《企业之心》里则提供了一个更妙的视角——把组织当成生物的神经系统。平时内脏怎么运作,大脑根本不管;但系统里必须有直接捅到底层的越级抽检探针,还得有痛觉神经。普通的技术修复可以在授权范围内继续推进;一旦涉及高风险变更、预算超支或产品方向偏离,痛觉信号就会绕过所有中间层的汇报美化,直接触发熔断并把问题推到人面前。

常规工作在绿色授权范围内继续,异常信号沿着橙色路径直接递给人

这些东西,已经不太像传统意义上的编程了。它们更像是在设计一套组织的运作制度。

纠偏,而不是永远救火

当然,机制不可能一开始就正确。

Agent 仍然会犯错,会重复工作,会在某个问题上反复修改,甚至陷入两个 Agent 相互审查、相互否定的死循环。

起初,我会亲自介入,把问题解决。但渐渐地,我发现这样并没有真正解决问题。这一次我救了火,下一次还会发生。

《系统之美》里有一条很扎心的规律:在一个复杂系统里,去微调具体的参数,往往是杠杆率最低的做法;真正管用的高杠杆动作,是去改变信息流的结构,或者重写系统的运转规则。

如果同一种错误反复出现,应该检查它为什么能够反复发生:

  • 是任务的完成条件不清楚?
  • 是不同 Agent 对接口的理解不一致,缺少单一事实来源?
  • 还是审查机制缺少西蒙所说的满意阈值,导致它们在不断提出没有实际价值的新问题?

如果问题来自架构,就修改架构;如果可以通过类型系统或测试发现,就让程序自动拦截;如果是任务交接出了问题,就改变交接机制。

而不是在提示词里不断追加一句“以后请注意”。在提示词里打补丁,只是在替某一次失误擦屁股;修改机制,才是在做系统级的纠偏。

人和协调 Agent 调整路径与早期信号标记,后续执行者不再反复撞上同一处障碍

这和传统工程管理非常相似。一个好的技术负责人,不应该靠自己每天解决最多的问题来证明价值。他应该让团队越来越少地遇到那些本可以避免的问题。

然后,让系统自己运作

我越来越不希望 AI 系统模仿一家传统组织的全部形式。

不需要给每个 Agent 安排固定职位,也不需要为了显得专业而设计层层汇报和会议。有些事情,一个 Agent 就能完成,没有必要组织一个团队。有些问题,执行者之间直接对齐就能解决,也没有必要让消息经过几层管理者。

管理的目的不是制造更多管理。而是让正确的事情,以尽可能低的协调成本发生。

真正需要继承的,是传统管理经过长期实践建立起来的骨架:明确的目标、清晰的责任、合理的授权、可验证的交付,以及出现偏差时的反馈机制。系统越自主,越需要可靠的事实来源、明确的权限边界,以及发现异常后可以介入和恢复的能力。

但我的注意力确实发生了变化。

从前,我关心一段代码有没有写对。
后来,我关心一项任务有没有交付。
现在,我关心的是:即使我不再参与每一个任务的具体过程,这套系统能不能持续交付正确的结果。

想起来还挺奇妙的。现代管理学鼻祖切斯特·巴纳德在近九十年前写过一句话,放在今天看依然让人起鸡皮疙瘩。他在《经理人员的职能》里说,组织不是一群人,而是有意识地协调起来的活动或力量的系统。当这套系统顺畅运转起来之后,管理者最核心、也最不可替代的职能只剩下一个——定义整个系统的顶层意图。

过去,我们花很多年学习如何组织代码,如何封装复杂性,如何通过接口让不同模块协作。现在,我们开始用类似的思路组织能够自主工作的 Agent。

过去,我们编写程序,让机器按照规则运行。现在,我们制定机制、观察结果、纠正偏差,然后让一群能够编写程序的 Agent 自己运作。

人给出方向并站在组织边缘,多个 Agent 沿着清晰路径持续协作,不必等待逐条指挥

写程序这件事,正在变得越来越像治理一个组织。

而我最期待的,或许不是有一天能够同时指挥几百个 Agent。

是有一天,我不再需要指挥它们。

我只需要想清楚,我们究竟要创造什么。