AI 让小团队碰到大公司的问题

我指的不是它们写出一个漂亮的小函数,或者在重构时节省了二十分钟。我指的是它们实质性地增加了一个团队能够产出的软件数量。

这种效果的大小仍然没有定论,而且因任务和上下文的不同而差异巨大。在一项对照实验中,使用 GitHub Copilot 的开发者完成特定编码任务的速度提高了 55.8%。在 2025 年的一项随机实地研究中,使用 AI 工具的资深开源开发者在成熟代码库中的工作效率反而降低了 19%。这些结果是对"存在一个通用倍增器"这种想法的有力警告。

更站得住脚的说法是:在 AI 确实提高实现速度的地方,它们并不会自动加速评审、测试、部署、可观测性或故障恢复。因此,一个小团队可以创造出超出其工程系统安全承受能力的变化速度。

这是大型工程组织花了几十年才学会管理的问题。AI 也可能让这成为一个小团队的问题。

1、瓶颈在移动

想想一个变更在工程组织中的旅程。某人有了一个想法,然后有一些设计,某人实现它。代码被评审,测试运行,构建产物,最终部署。之后,生产遥测告诉你它是否真的有效。如果出了问题,团队必须检测并恢复。

现在假设 AI 让实现速度快得多。其余的流水线并不会仅因为代码更快到达就加速。

这就像一家餐厅,切菜一直是厨房里最慢的环节。然后有人安装了一台能在几秒钟内切完一万个洋葱的机器。切菜的问题解决了,但厨房的炉灶、煎锅和服务员还是那么多。洋葱不再是瓶颈,开始堆满地板。

软件组织的行为方式也可能相同。Pull Request 数量上升。CI 变得繁忙。评审队列增长。工程师打开大型的 AI 生成的 diff,略读他们曾经会试图理解的变更。更多变更到达生产环境,运维负担增加,事故把人从计划工作中拉走。

这不仅仅是思想实验。DORA 2025 年的研究发现 AI 采用与交付吞吐量之间存在正相关关系,但也发现 AI 会放大交付系统中的弱点,交付稳定性仍然是一个担忧。GitHub 在 2026 年 3 月报告称,Copilot 代码评审占 GitHub 所有代码评审的五分之一以上。5 月,GitHub 描述 agent pull request 正在使评审带宽饱和。

这就是为什么我认为区分变更生成能力和工程能力很有用。AI 可能提高了前者,但对后者帮助不大。工程能力是一个组织吸收变更、验证变更、理解其后果、将其暴露给客户、在出错时检测并恢复,且不造成超过变更价值的损失的能力。

你真正的产能不是你能多快生成代码,而是你的组织能多快安全地吸收有用的变更。

2、我们以前见过这个问题

令人鼓舞的是,底层的工程问题并不新鲜。大型工程组织已经构建了让许多人在共享软件上持续变更的系统,而不需要每个人都记住每一条规则。

对于小团队来说,这些系统历史上看起来过于庞大。复杂的 CI、自动化策略执行、渐进式交付、架构控制、可观测性和故障隔离在 Google 或 Amazon 的规模下看起来很自然,在初创公司的规模下则显得奢侈。

AI 改变了相关的变量。人员规模仍然重要,但团队产出的变更速率、规模和影响也同样重要。一个小组织可以在组织架构图上保持小规模,同时对以前只在大组织中才出现的评审和交付系统施加压力。

这并不意味着照搬大公司的官僚体制。一个三十人的初创公司不需要一个十二人每周四开会决定是否可以发布一个 bug 修复的变更审批委员会。

大公司模式中有价值的部分是底层的控制系统:同行评审、持续集成、快速测试、可观测性、自动化策略、渐进式交付、架构边界,以及在后果需要时进行更严格的审查。

目标不应该是为了团队加速而增加流程,而应该是消除人类需要担心的整类事务。

3、让错误更难产生

我的假设是,随着 AI 代理编写更多代码,架构变得更加重要,而不是不那么重要。每一个强有力的边界都消除了一个人或代理必须做对的决策。DORA 2025 年的发现为这个方向提供了一些支持:具有松耦合架构和快速反馈循环的团队似乎更能从 AI 中受益。

我喜欢的类比是保龄球的挡板。如果你想阻止孩子把球扔进沟里,你可以站在他们身后重复指令:保持手腕伸直,瞄准中间,走正确的步数,不要太早松手。或者你可以把挡板竖起来。

第一种方法依赖于某人每次都记住并遵循指令。第二种方法改变了环境,使得整类故障变得困难或不可能。

许多软件标准仍然依赖于第一种方法。如果一个服务不得直接连接数据库,你可以在 wiki 中写下规则,要求每个工程师和代理记住它。或者你可以让网络策略阻止这种连接。无论代理多么自信地编写试图访问数据库的代码,环境都会拒绝这条路径。

同样的想法适用于验证。你可以不断告诉开发者和代理在使用之前验证一个值,或者设计一个 API,使敏感操作只接受已经验证过的值。原始输入不再能通过接口。

最强大的工程标准不是人们记住的指令,而是人们继承的系统属性。标准不再是公司 wiki 中的一页,而变成了工程环境内的物理定律。

当一些变更系统的参与者是 AI 代理时,这很重要。

4、假设某些东西仍然会漏过

没有任何架构、测试套件或静态分析器能阻止每一个缺陷。最终,代理会以工具无法理解的方式写出逻辑错误的东西。测试会遗漏一个边界情况。生产依赖的行为会与模拟版本不同。

那么下一个问题是:当某样东西出了错,你允许它错到什么程度?

这就是爆炸半径重要的地方。AWS 将基于单元的架构描述为一种隔离故障的方式,这样 bug、错误部署或过载事件只影响系统的有界部分,而不是所有人。

想想潜艇中的水密隔舱。目标不是保证船体永远不会被突破,而是确保一次突破不会让整艘船沉没。

一个三十人的初创公司可能不需要复制 Amazon 的架构。这个原则仍然适用:限制权限,避免不必要的全局状态,在有意义的地方分区关键工作负载,将有风险的行为放在功能标志后面,使用配额和速率限制,将控制平面与执行工作的系统分离,并使依赖显式化。

同样的思维也应该适用于代理。一个可以修改应用程序代码的代理,大概不应该同时拥有单方面修改评估其代码的 CI 系统、削弱测试、扩展自身权限并直接部署到生产环境的权力。

否则同一个参与者既出题、又考试、还阅卷。

这不是 AI 特有的发现,而是职责分离和最小权限的应用。提出变更的参与者不应该同时有权重新定义什么算安全。

5、让机器做机器评审

当代理能比人们更快地生成代码时,人的注意力就成了系统中最昂贵的资源之一。把这种注意力花在回答计算机能可靠确定的问题上没有意义。

它能编译吗?测试通过了吗?API 契约改变了吗?迁移是向后兼容的吗?依赖风险增加了吗?权限扩大了吗?变更跨越了架构边界吗?测试覆盖率下降了吗?有人修改了 CI 系统本身吗?

如果有确定性的答案,工程系统应该在人类审查者打开 Pull Request 之前就给出答案。

Google 多年来围绕这个想法构建了预提交系统。其公开的指导描述了自动格式化、静态分析、测试和项目特定检查在代码合并前运行。价值不仅在于发现 bug,更在于保存审查者在需要判断力的工作上的注意力。

这里还隐藏着另一个瓶颈:反馈必须足够快。如果每个小变更都要等四十五分钟才能得到第一个有用的信号,那么再全面的测试套件也不够。瓶颈只是从人工评审转移到了计算。

目标不是在所有地方进行最大化的验证,而是在必须做出决策的点上提供快速、可信的证据。

6、人工评审向更高层迁移

AI 不必消除人工评审。它可以改变人工评审的目的。

如果机器已经处理了格式化、已知的静态错误、测试失败、依赖策略和架构检查,审查者就可以专注于需要理解系统的问题。

实现是解决了用户的问题,还是仅仅功能上可用?我们是在为已有的东西创建第二个抽象吗?并发情况下会怎样?授权模型正确吗?我们对生产数据做了什么假设?如果依赖消失了十分钟会怎样?迁移可以回滚吗?这仍然是我们六个月后想要的架构吗?

这些都是关于语义、权衡、历史、意图和故障模式的问题。它们是人类判断力的更好用途。

当变更较小时,回答这些问题也更容易。Google 的评审指导说,小变更被评审得更快更彻底,更容易理解,也更容易回滚。没有通用的行数阈值,但方向很清楚:当 diff 超出审查者的认知预算时,评审更可能退化为略读和走过场。

这应该影响我们如何评估代理。最令人印象深刻的演示通常是一个代理消失一小时后带着一个完整功能回来。更有用的工程行为可能是一个代理通过小的、可独立理解、可独立验证的变更来推进工作。

优化目标不应该是"在不涉及人类的情况下完成尽可能多的任务",而应该是"通过最大规模但仍可独立理解和验证的变更来推进任务"。

这是对自主性的不同定义。

7、生产环境是测试的一部分

最终每个团队都会遇到同样的令人不安的事实:测试环境不是生产环境。

你可以模拟很多东西,但有些东西只在真实的流量、数据、依赖、时间和用户接触到变更时才会出现。成熟的交付系统不会把这当作意外,它们控制暴露范围。

新版本可能先到达内部用户,然后是一小部分客户,然后是逐步更大的群体。Google SRE 将金丝雀发布描述为在继续推出之前评估部分生产部署。

从这个意义上说,部署不是测试停止的时刻,而是受控暴露下对现实的测试。

功能标志创造了另一个有用的分离:部署代码和发布行为不必是同一事件。团队可以部署一个实现但保持行为禁用,然后在了解系统的人员在场并监控时启用它。

这改变了部署的心理。你不再是推送一些东西然后祈祷,而是刻意地暴露行为,观察证据,在证据良好时增加暴露。

部署变成了一个受控实验,每个实验都需要一个逃生通道。

回滚应该是一件无聊的事。如果部署很快但恢复需要数小时的协调手动工作,那么系统就没有有意义的交付速度。AWS 的可靠性指导建议自动化测试和回滚,恰恰是为了减少恢复时间和客户影响。

每一个新发现的故障模式都应该改善未来部署的这套机制。当代理增加变更速率时,这个反馈循环变得更加重要。

8、将失败转化为基础设施

某些东西仍然会断裂。成熟和不成熟的工程系统之间最明显的区别之一是接下来发生了什么。

不成熟的问题是:"谁搞坏了生产环境?" 成熟的问题是:"为什么这种故障是可能的?"

我们为什么没有更早检测到它?为什么它能影响这么多用户?为什么恢复花了这么长时间?为什么评审允许了它?为什么金丝雀没有发现它?什么能让同类故障下次更难产生?

这就是 SRE 中无责事后复盘的意义:关注系统中的漏洞而非个人问责,然后产出可验证的行动来防止或减轻再次发生。

每一步都将事件后存在于某人头脑中的知识转化为系统下次可以强制执行的东西。教训离开人类记忆,进入机器。

我将其视为系统免疫力。这个术语是比喻而非行业指标,但底层实践是具体的:一个成熟的组织不仅仅从事件中恢复,它会修改产生未来变更的环境。

9、铺设铺好的道路

这些想法汇聚在铺好的道路上:构建软件的安全方式也应该是最简单的方式。

创建一个服务不应该需要记住十五条关于可观测性、所有权、CI、部署策略、安全默认值、回滚和仪表盘的独立规则。模板应该提供它们。

打开 Pull Request,相应的验证应该自动运行。做出有风险的变更,推出应该变得更保守。触及认证或基础设施,应该请求正确的审查者。创建一个服务,其日志、遥测、所有权元数据、部署配置、安全默认值和回滚机制应该已经存在。

这是成熟的平台工程实践。Google 将黄金路径、护栏和安全网描述为使首选路径容易同时强制执行不可谈判约束的方式。

同样的想法应该扩展到代理。代理应该接收关于 API、服务所有权、允许的依赖、运维约束、架构和 SLO 的规范信息。

小型 AI 原生团队可能最终在这一层上大量投资。他们不是在复制大公司的官僚体制,而是在复制其工程控制系统的杠杆作用。

平台成为团队的一部分。它的工作是让正确的路径快速,危险的路径困难,无效的路径不可能。

一旦生成代码变得更便宜,代码周围的一切都变得更重要。

10、工程师可能成为编排者

一个合理的结果是工程工作的形态发生变化。

如果代理执行更多的机械实现,高效的工程师可能不再由他们个人输入多少逻辑来定义。工作的更多部分变成了编排:决定代理应该做什么工作,如何分解它,它们需要什么上下文,环境应该强制执行什么约束,需要什么证据,人类判断力在哪里增加价值,一个变更应该获得多少生产暴露,以及系统应该从失败中学到什么。

这是一个预测,不是已确立的终态。AI 采用已经在改变工作流程,但目前还没有证据表明"工程师即编排者"会在所有地方成为主导角色。

如果它发生了,工程不会变得不那么技术化。技术判断力向系统层面迁移。

有价值的工程师不再仅仅是能够产出实现的人,也是能够构建一个环境、让实现可以在其中被高效率地生成、验证、部署、观测和修正的人。

那是不同类型的杠杆。

11、那么现在的速度意味着什么?

一些熟悉的工程指标在这种环境下显得特别薄弱。代码行数从来不是价值的有用代理,当代理可以按需生成数千行时,它几乎变得毫无意义。Pull Request 数量和代码库中 AI 编写的代码百分比很少能说明客户是否收到了有用的、可靠的变更。

这些指标告诉你机器人厨师切洋葱的速度有多快。它们不能告诉你厨房是否能端上晚餐。

DORA 当前的交付指标提供了更好的基础:变更前置时间、部署频率、失败部署恢复时间、变更失败率和部署返工率。对于 AI 密集型的工作流,我还会关注可靠性、每次成功生产变更的人工评审成本、人们需要理解的变更规模、故障的客户影响,以及将新的故障模式转化为持久防护措施所需的时间。

我称之为经过结果风险调整的变更吞吐量。这不是一个标准的 DORA 指标或一个完成的公式。它是一个工程组织真正试图改进的量的名称:它可以交付有用变更的速率,按人工成本、运维风险和客户损害折减。

这就是为什么曾经只与大型组织相关的实践可能成为小团队的关注点。大型组织构建交付控制是因为许多人同时在改变共享系统。代理可以在没有相应人员增加的情况下创造类似的压力。

规模会有所不同。小团队不会自动像一个五倍或五十倍于其规模的组织那样运作。但如果其变更生成能力的增长速度快于其交付能力,响应不应该是官僚式的限制,而应该是一个更好的吸收变更的系统。

生成海量代码不是有趣的能力。安全地交付大量有用的变更才是。


原文链接: AI Makes Big-Tech Engineering Practices a Small-Team Problem

汇智网翻译整理,转载请标明出处