如今已不存在所谓的“小型软件团队”了。
There's no such thing as a small software team anymore

原始链接: https://jacob.gold/posts/theres-no-such-thing-as-a-small-software-team/

Uber 向大规模微服务架构的转型——曾被视为极端做法——正成为人工智能驱动开发环境下的新标准。 传统上,单体代码库需要严密的协调以避免合并冲突和部署瓶颈。然而,随着开发者越来越多地利用 AI 智能体并行编写、重构和发布代码,管理单体架构的开销已成为一种负担。 微服务实现了“极其并行”的工作流:多个 AI 智能体可以同时处理独立的模块化组件,互不干扰。此外,AI 智能体在有限的上下文窗口内表现最佳;通过将系统分解为更小、更专注的模块,开发者能显著提高智能体的准确性和输出质量。 虽然微服务的“管道”搭建在过去曾是沉重的管理负担,但现代 AI 现在可以自动完成那些曾经让拆分服务变得昂贵的样板代码、持续集成(CI)配置和部署设置。因此,模块化不再仅仅是一种架构选择,更是提升生产力规模的关键需求。从一开始就进行模块化设计,是最大化并行编码智能体潜力的最有效途径。

这场 Hacker News 上的讨论围绕着使用“代理式”(agentic)AI 来管理大规模微服务架构的可行性与明智与否展开。 辩论的核心在于 AI 代理是否能有效取代人类软件工程。支持者认为,大语言模型(LLM)推动了向“纳米服务”和生产力大幅提升的转变,使小团队能够像大团队一样运作。他们建议开发者应转型为“AI 编排者”,管理由代理组成的集群来执行重构、性能优化和 Bug 修复等任务。 然而,批评者提出了重大担忧: * **复杂性:** 他们认为微服务本身维护难度就高,而代理往往缺乏“全局”背景,导致代码脆弱并产生隐性回归问题。 * **组织风险:** 许多人认为“AI 代理集群”方案是一种由泡沫驱动的时尚,它将表面指标(如提交数量)置于实际产品质量或商业价值之上。 * **技术可持续性:** 怀疑论者指出,一旦最初的工程师精疲力竭或离职,自动化系统将变得无法调试,届时将无人能理解其底层逻辑。 归根结底,关于是拥抱 AI 驱动的高速范式,还是警惕这种依赖所带来的长期系统稳定性和职业能力退化风险,各方仍未达成共识。
相关文章

原文

Uber infamously runs thousands of microservices. They ended up with so many services because hundreds of engineers wanted to deploy on their own schedule, with clear ownership of their code, instead of waiting in one giant merge queue.

For decades a small team with 5 or 10 people writing code at the same time didn’t even need to consider doing this. On a busy day a small team might generate 50 commits/20 pushes/10 PRs. A small team today, running 20-100 agents in parallel, might generate 500 commits/200 pushes/100 PRs.

So Uber’s approach to modularity may have seemed extreme at the time, but it could become the new normal.

One developer coding in a “single-threaded” way, editing one file at a time: A single VS Code window with one repository open, one file being edited by hand, and one terminal running a build

One developer coding in a “multi-threaded” way, using coding agents in parallel: Many agent spaces running at once across several machines, with a diff, a task list, and a chat session open side by side

If you have a large monolithic service where every change has to be coordinated carefully, there’s a good chance two pieces of significant work will trample on each other and force you to resolve merge conflicts and refactor.

If you have thousands of microservices like Uber, you’ve got an “embarrassingly parallel” way of working on code. Fire up a coding agent for each one, tell it to “improve performance”, and there’s a good chance you ship significant improvements across all of them.

100+ coding agents running in parallel have to work well independently. If they spend all their time resolving merge conflicts, fixing broken builds, and creating deployment nightmares, you can end up with net-negative productivity.

Splitting things up used to be very expensive, since every service meant more boilerplate, plumbing, and CI config. Agents write all of that now, so the overhead matters a lot less.

Agents are also extremely context-limited. A module (whether it’s a service or a library) that’s small enough to fit in the context window dramatically improves coding agent performance.

The modularity of your codebase determines how many coding agents you can run in parallel effectively, so now it’s worth designing for it from the beginning.

联系我们 contact @ memedata.com