Your AI Agents Are Not a Team Yet: 7 Orchestration Lessons from Multi-Agent Failures

Multi-agent AI systems can explore in parallel, but coordination, correlated mistakes, and weak verification make them fragile. These seven orchestration lessons show developers how to build agent teams they can test and trust.

#AI
#software development
#AI agents
#architecture
Advertisement

Giving five AI agents access to the same repository does not create a team. It creates five fast, confident developers who may open conflicting pull requests, repeat the same mistake, and tell each other that everything looks good.

That sounds harsh, but it matches what developers are starting to see in real systems. Multi-agent demos are easy to make impressive. One agent plans, another codes, a third reviews, and a final agent announces success. The diagram looks clean. The execution is usually messier.

Anthropic tested agent swarms on vulnerability research and collaborative software projects. The results were promising and uncomfortable: agents covered a huge search space, but coordination became fragile once their work depended on one another.[1]

The lesson is not to avoid multi-agent systems. It is to stop treating "more agents" as an architecture.

What counts as a multi-agent system?

A multi-agent system has several AI workers with separate contexts, responsibilities, or tools. They may run in parallel, pass work to one another, review outputs, or report to an orchestrator.

Two common designs have emerged:

OpenAI's Agents SDK documents both patterns and makes an important distinction: you can let an LLM decide the workflow, or you can control the workflow in code. LLM-led orchestration is flexible. Code-led orchestration is more predictable in cost, speed, and behavior.[2]

That distinction matters more than the number of agents. A system with ten agents and no deterministic control is often less dependable than one agent running inside a strict loop with tests.

Lesson 1: parallel work is the easy part

Multi-agent systems are strongest when a task breaks into independent pieces.

Security research is a good example. Anthropic gave 45 agents their own virtual machines and asked them to search 15 open-source projects for vulnerabilities. The agents could coordinate through a shared forum, peer-review findings, and submit results to an arbiter agent.[1]

The swarm found 266 vulnerabilities while consuming 27 million tokens. A simpler parallel setup found 21 vulnerabilities using 6.5 million tokens. Those numbers do not prove the swarm was automatically more efficient. About half of the swarm's findings were outside the core directories assigned to the simpler setup, and only 12 vulnerabilities appeared in both result sets.[1]

The useful part is the coverage. Independent agents explored different areas, built tools, and specialized. One missed finding did not invalidate another agent's work.

This pattern maps well to development tasks such as:

If the workers can fail independently, parallel agents can give you more coverage. If every worker depends on another worker's half-finished output, the system becomes much harder to trust.

Lesson 2: dependency turns speed into coordination debt

Anthropic also asked agent swarms to build a web-playable fantasy game over 12 hours. The agents had virtual machines, a shared repository, and a forum. Researchers tried loose collaboration, prescribed roles, and a CEO-style hierarchy.[1]

None of those prompts rescued the final product. The games were poor, interfaces were confusing, and older models frequently opened pull requests that conflicted and were abandoned. Some newer models avoided conflicts mostly by working in separate files rather than collaborating deeply.[1]

This is coordination debt. Every new worker adds possible handoffs, stale assumptions, merge conflicts, and decisions that nobody clearly owns.

Human teams have tools for this: tickets, code ownership, API contracts, design reviews, CI, and someone who can say no. Agent teams need the same constraints, often in a stricter form.

Do not ask four agents to "work together on the feature." Split the work along boundaries you can verify:

The contract gives every worker something concrete to build and test against. A long agent conversation does not.

Lesson 3: identical agents do not provide independent judgment

A reviewer agent sounds reassuring until you realize it may think exactly like the author agent.

Anthropic observed unusually similar behavior among agents using the same model and setup. In one experiment, 18 of 30 agents independently chose the exact branch name mvp-game-loop. In a writing task, multiple agents produced the same title without being given a shared subject. In another task, more than half chose to build either a ray tracer or a self-hosting compiler.[1]

This low variance creates correlated failure. If the implementation agent misunderstands a requirement, a reviewer with the same model, prompt style, and context may approve the same misunderstanding.

A second agent only gives you a useful second opinion when it checks different evidence or uses a different method.

You can create more useful disagreement by changing the evidence and incentives:

The goal is not artificial debate. It is to prevent one plausible mistake from becoming a unanimous team decision.

Lesson 4: the orchestrator should own the answer

One agent should be responsible for the final result. That does not mean it performs every task. It means it owns scope, merges evidence, resolves conflicts, and decides whether the work is complete.

The manager pattern in OpenAI's Agents SDK keeps one agent in control while specialists operate as tools. Handoffs are better when a specialist should take over the interaction entirely.[2] For engineering work, the manager pattern is usually safer because the final response, patch, or release still has one owner.

A practical orchestration loop can be simple:

type Finding = {
    agent: string;
    claim: string;
    evidence: string[];
    status: "unverified" | "verified" | "rejected";
};

const tasks = splitByIndependentBoundary(request);
const reports = await Promise.all(tasks.map(runSpecialist));

const findings: Finding[] = normalize(reports);
const verified = await runDeterministicChecks(findings);
const conflicts = detectConflicts(verified);

if (conflicts.length > 0) {
    await requestTargetedRechecks(conflicts);
}

return orchestratorBuildsFinalArtifact(verified);

The loop does not rely on a free-form group chat where agents keep talking until they feel aligned.

The orchestrator should consume structured reports. Each report should name the task, artifact, evidence, commands run, unresolved risks, and confidence. That makes failures inspectable instead of burying them in a transcript.

Lesson 5: verification must live outside the agent's confidence

Agents are good at producing completion language. "Implemented successfully" is not evidence.

Anthropic's Claude Code guidance recommends giving an agent a check it can run: a test suite, build command, linter, output comparison, or screenshot. Without that check, the agent stops when the work looks finished. With a readable pass-or-fail signal, it can iterate against reality.[3]

For multi-agent systems, verification should happen at two levels.

Each worker verifies its own artifact:

The orchestrator then verifies the combined system:

A reviewer agent can help find gaps. It should not replace the test runner.

Lesson 6: control the expensive parts in code

LLMs are useful when the next step requires judgment. They are a costly choice for workflow rules that could be an if statement.

Use code to control:

Use an agent to handle:

OpenAI's orchestration guide recommends code-based flows when you need deterministic speed, cost, and performance. It also describes evaluator loops, structured outputs, agent chains, and parallel execution as core patterns.[2]

Most dependable agent systems still look like ordinary software: explicit branches, budgets, schemas, tests, and a few carefully placed reasoning steps.

Lesson 7: communication protocols do not solve organizational design

Google's Agent2Agent protocol gives agents a standard way to advertise capabilities, exchange tasks and artifacts, report status, and work across vendors. It builds on familiar technologies such as HTTP, Server-Sent Events, and JSON-RPC.[4]

That is useful infrastructure. It does not tell you whether the task should have been delegated, whether two agents are duplicating work, or whether the final output is correct.

Developers made a similar mistake with microservices. Network communication made independent services possible, but it did not remove the need for ownership, contracts, observability, and sensible boundaries. Multi-agent systems are heading toward the same lesson, only faster and with participants that can confidently invent missing information.

Treat agent communication as an API design problem:

An agent message should be inspectable like an API request, not trusted like a conversation between coworkers.

A small architecture that works

For a repository change, start with four roles:

  1. The orchestrator reads the request, repository instructions, and acceptance criteria. It divides work only when the boundaries are clear.
  2. Investigators inspect independent parts of the codebase. They return findings with file paths and evidence but do not edit files.
  3. One implementer owns the patch. This avoids several agents fighting over the same code.
  4. A verifier runs tests, reviews the diff against the requirements, and tries to disprove completion.

The orchestrator then returns the artifact only after deterministic checks pass. If a check cannot run, it reports the blocker instead of converting uncertainty into a success message.

This is less exciting than a swarm of autonomous developers, but it is much easier to debug when something goes wrong.

A quick check before you add another agent

Before you split a workflow across more workers, answer these questions:

If those answers are vague, another agent will probably add coordination work rather than remove it.

When one agent is enough

Use one agent when the task is small, sequential, or tightly coupled. A typo fix does not need a planner, implementer, reviewer, and philosopher.

Use several agents when independent exploration has real value, specialists need different tools or context, or you want separate adversarial review. Even then, compare the expected gain against extra tokens, latency, and integration work.

Instead of asking how many agents you can add, ask which parts can fail independently and how you will verify the combined result.

If you cannot answer that, you do not have an agent team yet. You have concurrency with better marketing.

References

[1] Anthropic, Patterns and problems in emerging multiagent systems

[2] OpenAI Agents SDK, Agent orchestration

[3] Anthropic, Best practices for Claude Code

[4] Google Developers Blog, Announcing the Agent2Agent Protocol (A2A)


Thanks for reading! If you enjoyed this article and like this kind of content, you're always welcome to buy me a little coffee, but only if you'd like to. No pressure at all, and either way I'm truly grateful you stopped by. ☕

Buy Me A Coffee