如今已不存在所谓的“小型软件团队”了。
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 的讨论,旨在批判“AI 智能体能让小团队管理庞大且高度微服务化架构”这一观点。评论者认为,这种方式只是转移了复杂性,而非解决问题,往往会导致系统难以维护,甚至引发“噩梦”般的后果。 主要批评意见包括: * **指标错位:** 用户警告称,开发者过度关注“虚荣指标”(如 PR 数量和提交量),而非实际的业务价值或软件质量。 * **架构顾虑:** 参与者认为,AI 智能体难以在大型系统中保持上下文,容易写出破坏依赖关系的代码。许多人建议,架构良好的单体应用依然优于碎片化的微服务。 * **“为何而做”的问题:** 持怀疑态度者质疑自动化智能体驱动开发的目标,指出生产力的提升并没有为终端用户带来更廉价或更优质的软件。 * **潜在风险:** 该讨论强调了过度依赖 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