Multi-Agent Systems in Production: What Breaks First
Multi-agent frameworks promise autonomous teams of AIs. In production they mostly hand you loops, runaway bills, and bugs you can't reproduce. Here's what breaks first and what we run instead.
Multi-agent systems fail first on coordination, cost, debuggability, and state, so start with a single agent and tools, and only go multi-agent when you have evidence the overhead pays for itself.
Multi-agent frameworks are having a moment. AutoGPT, MetaGPT, CrewAI, they all sell the same dream: autonomous agents that split up a task, talk to each other, and solve hard problems while you sleep. Specialized roles, parallel work, emergent smarts. It's a good pitch.
We've shipped multi-agent systems for workflow automation, data analysis, and customer support. Here's the unglamorous truth: they're fragile, expensive, and brutal to debug. Coordination failures spin into infinite loops. Costs blow up overnight. When something goes wrong, you're staring at a crime scene where none of the suspects will talk. Most teams that reach for multi-agent don't need it yet, and we'll show you how to tell.
Coordination is the part that actually breaks
Getting agents to cooperate is the hardest unsolved problem here, and everything that can go wrong does. We built a three-agent pipeline: a Researcher to find information, an Analyst to process it, a Reporter to write the summary. One day it deadlocked. Researcher finds document A. Analyst says 'I need more context.' Researcher finds document B. Analyst says 'I need more context.' Forty-seven rounds of that before the timeout caught it.
The root cause is that agents talk in natural language with no formal protocol. 'I need more context' means something different to every agent, every query, and every roll of the model's dice. You also get circular waits, A waits on B, B waits on C, C waits on A, and unlike a normal distributed system you can't catch them statically. They emerge from model decisions at runtime. When two agents pick different next steps, nothing resolves the conflict; the system either guesses, blends them badly, or you bolt on a Coordinator agent and add more surface area to break.
What pulled us out of that mess:
The $3,200 weekend
We deployed a multi-agent research system on a Friday. Monday morning, the OpenAI bill read $3,200. A bug in the coordination logic had agents re-asking the same question in slightly different words, spawning hundreds of concurrent conversations. The math is unforgiving: five agents, ten messages each, fifty model calls per conversation. At roughly three cents a call that's about $1.50 a conversation, and over two thousand of them ran across the weekend.
Costs explode because every agent decision is a call, and the calls compound. One step in a four-agent flow is four calls before any real work happens. Then there are the calls you never wrote: message routing, state summarization, retry attempts, memory management. What looks like five agent messages is often fifteen to twenty calls under the hood. In our experience a single-agent workflow runs $0.05 to $0.15 per run; the multi-agent version of the same job runs $0.50 to $2.00. A 10, 20x jump is normal, not a worst case.
What keeps the bill sane:
Debugging a non-deterministic black box
A user reports a wrong answer. Behind that one sentence: five agents, twenty-three model calls, every decision probabilistic, state mutated across all of them, and no single point of failure to point at. Stepping through reasoning doesn't exist. There are no stack traces, the same input doesn't reproduce the same output, and async execution smears the timeline so you can't even tell what happened in what order.
The only thing that works is treating it like a distributed system and tracing everything. We log every model call with the full prompt, completion, token count, and cost; why each agent was invoked; before-and-after state snapshots; per-operation latency; and every exception, retry, and fallback. Text logs are useless at this scale, you need sequence diagrams to see handoffs over time, flame graphs to spot the slow agent, and dependency graphs to see who's talking to whom. We lean on LangSmith for LLM traces, Weights & Biases for experiment tracking, Jaeger adapted for agent spans, and a custom dashboard to roll it all up per workflow.
State is where the silent corruption lives
Shared state sounds simple and isn't. Two agents read step 1. Agent A writes step 2 with its result. Agent B writes step 2 with its result. A's change is gone, a textbook race condition, except now it's riding on non-deterministic timing. State also grows without bound because agents keep appending and nobody prunes; after fifty steps you're carrying 100KB, the context window fills, and everything slows down. Meanwhile A's view of the world drifts from B's, and decisions get made on stale data.
Our rule: minimize shared mutable state. Keep one source of truth, prune aggressively to recent and relevant data, and make each agent as stateless as you can, pass explicit inputs and outputs instead of letting agents reach into a shared mutable blob. Most of the chaos disappears when nothing is shared that doesn't have to be.
The three patterns that survive production
After shipping several of these, three shapes hold up. The Supervisor pattern puts one agent in charge and keeps the workers stateless and specialized, clear coordination, one decision-maker to debug, no agent conflicts, at the cost of a bottleneck and no parallelism. The Sequential Pipeline chains agents so each output feeds the next; perfect for linear work like research, then analyze, then report. The Parallel-with-Aggregation pattern runs independent agents at once and merges the results.
Pick by the work: Supervisor for branching logic, Sequential for a straight line, Parallel for genuinely independent tasks. And whichever you choose, wire in circuit breakers from day one, not after the first runaway.
What we actually watch in production
Per agent, we track success rate, average latency, call count, token usage, and error rate. Per workflow, we track end-to-end latency, cost per run, completion rate, and how often a human had to step in. For coordination specifically, we watch handoffs per workflow, loop-detection counts, state-update conflicts, and circuit-breaker trips. Our alerting is blunt on purpose: success under 80% pages oncall, cost over 2x baseline gets investigated, latency over 30 seconds means check for a loop, and any breaker trip gets human eyes. Prometheus and Grafana for metrics, LangSmith for traces, a custom dashboard for cost.
When to reach for it, and when not to
Reach for multi-agent when the sub-tasks are genuinely separable, when domain specialization actually buys you something, when parallel execution has real value, and when you already have tracing, metrics, and cost tracking in place. Skip it when a single agent with tools would do, that covers about 80% of what people try to throw agents at, and skip it when you're building an MVP, when budget is tight enough that a 10, 20x cost jump hurts, or when you can't observe the system well enough to debug it.
Where we do use it: long-running workflow automation with checkpoints, research agents doing parallel search and aggregation, and code generation split into plan, implement, test, review. Where we don't: customer support, where a single agent plus RAG is plenty; content generation, where one agent with good prompts wins; and data analysis, where plain function calling beats the orchestration tax. Start with a single agent and function calling. Graduate to multi-agent only when you have concrete evidence the coordination overhead pays for itself. Most teams over-engineer this. Simple usually wins.
We help teams design and ship production-grade software in eLearning, fintech, and AI. Let's talk about your project.
Book a call