You’ve architected your first multi-agent system. Three agents coordinating: one retrieves customer data from your CRM, one analyzes purchase patterns, one generates personalized recommendations. In testing, it’s elegant. The agents communicate smoothly. Results come back in seconds. Your demo to the executive team goes perfectly.
Then you deploy to production.
Within 48 hours, you’re watching coordination collapse in real time. Agents duplicate the same expensive API calls because they don’t know what their peers are doing. They contradict each other’s outputs, creating confused customer experiences. Two agents wait indefinitely for a response from a third agent that crashed silently an hour ago. Your beautiful autonomous system becomes a $10,000-per-day deadlock generator that your ops team has to manually restart every few hours.
Here’s what makes this interesting: the failure isn’t with your agents. It’s in your coordination model. The patterns that work elegantly for 3 agents fail catastrophically at 10. And the patterns designed for 10 agents add so much overhead that they’d cripple a simple 3-agent system.
I’ve seen this pattern repeat across enterprise deployments for the last two years. The same coordination failures. The same expensive lessons were learned. The same architecture pivots after production launch. You’re not making a unique mistake. You’re encountering the fundamental challenge of distributed autonomous systems: how do you coordinate multiple independent decision-makers when each one has incomplete information and the ability to take expensive actions?
This is the same problem you’d have coordinating a team of senior engineers working on different parts of a system. You need them to work autonomously (otherwise you become a bottleneck), but you also need them to coordinate (otherwise they duplicate work, contradict each other, or block each other). The architecture challenge is identical. It’s just that with AI agents, the failures happen faster and cost more.
Let me show you five production-proven coordination patterns. For each one, I’ll explain when it works, when it breaks, and what the trade-offs actually look like in production. These aren’t theoretical patterns. They’re the architectures I’ve seen survive contact with production workloads at enterprise scale.
Pattern 1: Sequential Pipeline (The Assembly Line)
Think about how cars get built. A chassis moves down the assembly line. At each station, a specialized team does its specific job: engine installation, electrical systems, interior, paint. Each team waits for the previous team to finish. No team starts until the work upstream is complete.
Sequential pipelines work the same way. Agent 1 completes its task, hands off to Agent 2, Agent 2 completes its task, hands off to Agent 3. No parallelization. No coordination complexity. Just a simple chain.
This is called a sequential orchestration pattern, and it’s the first architecture most teams build because it’s the easiest to reason about.
When do Sequential Pipelines Work?
You have a document processing workflow: OCR agent extracts text, classification agent categorizes the document, routing agent sends it to the right department. Each step depends entirely on the previous step’s output. There’s no point trying to classify before you’ve extracted the text. No point routing before you’ve classified.
The sequential pipeline is perfect here because:
- Dependencies are linear: Each step needs the previous step’s complete output
- Error isolation is simple: If something breaks, you know exactly which agent failed
- Testing is straightforward: Test each agent independently, then test the chain
- Latency is acceptable: Total time is sum of agent times, which is fine if each agent is fast
When do Sequential Pipelines Break?
You scale from processing 100 documents a day to 10,000. Suddenly your sequential pipeline becomes a bottleneck. Agent 2 sits idle while Agent 1 processes documents one at a time. Agent 3 waits for Agent 2. You’re paying for three agents but getting the throughput of one slow assembly line.
Or you add a fourth agent that needs to run in parallel with Agent 2 (both analyze the document differently), and your sequential chain doesn’t support it. You’re locked into serial execution when your workflow actually needs parallelization.
The sequential pattern breaks when:
- Volume overwhelms serial processing: You need parallelization but the pattern can’t support it
- Some steps can run concurrently: You’re forcing sequential execution on naturally parallel work
- Latency requirements tighten: Sum of agent times exceeds acceptable response time
- You need early exit conditions: Can’t abort processing mid-pipeline without complex state management
Production Reality Check
At a Fortune 500 financial services company, they built a loan application processing pipeline with 5 sequential agents: data extraction, credit check, fraud detection, risk scoring, and decision recommendation. Worked beautifully in testing with 20 sample applications.
Production broke it immediately. Processing 2,000 applications per day meant each application waited for all previous applications to clear the entire pipeline. Average processing time went from 30 seconds in dev to 1 hour in production. The business rejected the system.
The fix required moving to Pattern 3 (event-driven), which let us process applications in parallel. But we couldn’t have designed Pattern 3 correctly without first understanding where Pattern 1 failed.
Key lesson: Sequential pipelines are the right starting point for learning your workflow’s actual coordination needs. Just don’t deploy them to high-volume production.
Pattern 2: Central Orchestrator (The Project Manager)
You know how project managers coordinate teams. They don’t do the technical work themselves. They maintain the task list, assign work to specialists, track progress, handle blockers, make sure nothing falls through cracks. Each specialist reports status back to the PM, who decides what happens next.
Central orchestration works the same way. One orchestrator agent coordinates all the worker agents. Workers don’t talk to each other. They only talk to the orchestrator. The orchestrator maintains state, assigns tasks, handles errors, decides when the workflow is complete.
This is called a hub-and-spoke pattern or supervisor pattern, and it’s what most production multi-agent systems use because it’s the sweet spot between simplicity and power.
When does Central Orchestration work?
You’re building a customer service automation system. A customer inquiry comes in. The orchestrator:
- Routes to a classification agent: “Is this billing, technical support, or account management?”
- Based on classification, routes to specialist agent: Billing agent, tech support agent, or account agent
- Specialist agent handles the inquiry, returns response
- Orchestrator checks: “Is this response complete and accurate?”
- If yes, send to customer. If no, route to escalation agent or human.
Central orchestration is perfect here because:
- Clear single source of truth: The orchestrator knows the complete state
- Error handling is centralized: Orchestrator catches failures and decides recovery strategy
- Scaling is straightforward: Add new specialist agents, orchestrator routes to them
- Observable and debuggable: All coordination logic lives in one place
- Works for 5-15 agents: Sweet spot between too simple and too complex
This is the architecture AT&T uses. Their orchestrator manages 40+ specialist agents. When an agent fails, the orchestrator knows. When costs spike, the orchestrator can throttle or route to cheaper alternatives. When new agents are added, only the orchestrator’s routing logic changes.
When does Central Orchestration break?
You scale to 50 agents. The orchestrator becomes the bottleneck. Every agent interaction goes through this single coordination point. The orchestrator can’t process routing decisions fast enough. Latency spikes. Or worse, the orchestrator crashes and takes down your entire multi-agent system because nothing can coordinate without it.
Or you need agents to collaborate dynamically on complex problems. Two agents need to negotiate, iterate, build on each other’s outputs. Forcing every communication through a central orchestrator adds overhead without value. You’re routing messages that could go direct.
The central orchestration pattern breaks when:
- Orchestrator becomes the bottleneck: Can’t process coordination decisions fast enough
- Single point of failure is unacceptable: Orchestrator crash kills entire system
- Agents need direct peer-to-peer collaboration: Routing everything through orchestrator adds latency
- Coordination logic becomes unmaintainable: Orchestrator has too many routing rules and special cases
Production Reality Check
At a healthcare provider, they built a patient triage system with a central orchestrator managing 12 specialist agents (symptom analysis, medical history review, drug interaction checking, specialist referral, appointment scheduling, etc.). The orchestrator maintained the patient’s complete journey through the triage process.
This worked well until they added real-time monitoring agents that had to continuously check patients’ vitals and alert other agents to changes. The orchestrator became a message-routing bottleneck. They were paying LLM costs for the orchestrator to simply pass messages between agents that should have been communicating directly.
The fix required hybrid architecture (Pattern 5): a central orchestrator for the main workflow, direct peer-to-peer for real-time monitoring. The orchestrator still owned the overall state, but monitoring agents could communicate directly.
Key lesson: Central orchestration is the default production pattern for a reason. It works. Just watch for the orchestrator becoming a bottleneck as you scale.
Pattern 3: Event-Driven Coordination (The Bulletin Board)
Think about how newsrooms work. Reporters don’t check with an editor before filing every update. They post breaking news to the central system. Editors monitor the feed, pick up stories that need editing, publish when ready. Different sections (politics, business, sports) work independently, publishing to the same system. No central coordinator tells everyone what to do. They coordinate through shared state.
Event-driven coordination works the same way. Agents publish events to a central event bus. Other agents subscribe to events they care about. No agent directly calls another agent. When Agent A completes work, it publishes a “work complete” event. Agent B, subscribed to that event type, picks it up and starts its work. Coordination happens through events, not direct communication.
This is called publish-subscribe architecture or event-driven orchestration, and it’s how you scale beyond 15-20 agents without central orchestrator bottlenecks.
When does Event-Driven Coordination work?
You’re building an enterprise data processing system. Documents arrive from 50+ sources. Each document triggers a cascade of processing: extraction, classification, enrichment, validation, storage, notification. Different document types need different processing paths. Volume is 10,000+ documents per day.
Event-driven architecture is perfect because:
- Scales horizontally: Add more agents, they subscribe to relevant events, system scales
- Loose coupling: Agents don’t need to know about each other, just event types
- Resilient to failures: If one agent crashes, events queue until it recovers
- Supports complex workflows: Multiple processing paths based on event types
- Works for 20-100+ agents: Coordination overhead doesn’t grow with agent count
This is what AT&T moved to when their token volume went from 8 billion to 27 billion per day. The orchestrator couldn’t scale. Event-driven could.
When does Event-Driven Coordination break?
You’re trying to debug why a customer’s order was processed incorrectly. With event-driven architecture, you’re reconstructing the workflow from a stream of events: “Order created event, inventory check event, payment processed event, shipping scheduled event…” Which agent actually made the mistake? Events don’t tell you. You need distributed tracing across event logs to reconstruct what happened.
Or you need transactional guarantees. Two agents need to either both succeed or both fail together. Event-driven systems don’t naturally support this. You’re building distributed transaction coordination on top of event passing, which gets complex fast.
The event-driven pattern breaks when:
- Debugging becomes critical: Reconstructing causality from events is painful
- You need transactional guarantees: Either all agents succeed or none do
- Event ordering matters: Events can arrive out of order, breaking assumptions
- Latency is critical: Event passing adds overhead vs. direct calls
- Team lacks event-driven expertise: The learning curve is steep if the team doesn’t know pub-sub patterns
Production Reality Check
At a retail company, they built an inventory management system with 30+ agents processing events: sales, returns, restocking, vendor deliveries, warehouse transfers. Event-driven architecture scaled beautifully. Retailer could add agents for new warehouses or product categories without touching existing agents.
Then they needed to add “reserve inventory for VIP customers” feature. This required transactional guarantees: check inventory, reserve it, process payment, confirm reservation – all had to succeed or fail together. The event-driven architecture didn’t support this. They had to bolt on distributed transaction logic, which created a hybrid mess.
The fix required designing transaction boundaries explicitly: some workflows stayed event-driven, some moved to synchronous orchestration for transactions.
Key lesson: Event-driven scales incredibly well, but introduces complexity in debugging and transaction management. Don’t start here. Graduate to it when central orchestration becomes the bottleneck.
Pattern 4: Hierarchical Teams (The Enterprise Org Chart)
Large companies don’t have one manager coordinating everyone. They organize into teams, each with a team lead. Team leads coordinate their teams. Directors coordinate the team leads. VPs coordinate the directors. Information flows up for decisions, down for execution.
Hierarchical coordination works the same way. Agents organize into teams, each with a supervisor agent. Supervisors coordinate their teams. A top-level orchestrator coordinates the supervisors. This is central orchestration, but distributed across hierarchy levels.
When Hierarchical Teams Work
You’re building an enterprise research system with 25+ agents. Break them into teams:
- Data Collection Team (5 agents): Web scraping, API calls, document retrieval, database queries, real-time feeds
- Team supervisor coordinates these 5, decides which sources to query
- Analysis Team (8 agents): Statistical analysis, sentiment analysis, trend detection, anomaly detection, correlation finding
- Team supervisor coordinates analysis, prioritizes which analyses run
- Synthesis Team (4 agents): Summary generation, insight extraction, recommendation building, report formatting
- Team supervisor ensures coherent output
Top-level orchestrator coordinates the three team supervisors: “Data collection is complete, start analysis. Analysis found anomalies, prioritize those in synthesis.”
Hierarchical teams work when:
- You have natural functional boundaries: Agents cluster into logical teams
- Each team has internal coordination needs: Team supervisor adds value within team
- Scale exceeds single orchestrator capacity: 20+ agents need hierarchical structure
- Different teams have different latency/cost profiles: Team supervisors optimize for team-specific constraints
When Hierarchical Teams Break
You add too many hierarchy levels. Now you have orchestrator → directors → team leads → workers. Each level adds latency. A simple task that should take 10 seconds takes 60 seconds because decisions flow up three levels and execution flows back down.
Or your hierarchy doesn’t match your actual workflow. You’ve organized agents by function (data, analysis, synthesis) but your workflow actually needs cross-functional collaboration. The data agent needs to talk directly to the analysis agent, but they’re in different teams, so communication goes up to their supervisors, across, and back down. You’ve added organizational overhead without benefit.
Hierarchical teams break when:
- Too many hierarchy levels: Latency compounds at each level
- Hierarchy doesn’t match workflow: Forcing communication through org chart that doesn’t fit actual coordination needs
- Team boundaries are wrong: Agents that need to collaborate frequently are on different teams
- Overhead exceeds benefit: Supervisor agents add cost without improving coordination
Production Reality Check
At an insurance company, we built a claims processing system with 20 agents organized hierarchically: Document Team (OCR, extraction, classification), Validation Team (fraud detection, policy checking, coverage verification), Decision Team (damage assessment, payout calculation, approval routing).
The hierarchy made sense functionally. But claims processing was actually sequential with parallel steps: extract documents in parallel, validate in parallel, then decide. Our hierarchical coordination added overhead because team supervisors were coordinating parallel work that didn’t need coordination.
The fix was hybrid: flat parallelization within teams (documents get extracted in parallel with no coordination), sequential orchestration between teams (validation waits for extraction to complete).
Key lesson: Don’t add hierarchy because it sounds enterprise-appropriate. Add it when you have natural functional teams with internal coordination needs. Otherwise, you’re adding latency for org-chart aesthetics.
Pattern 5: Hybrid Models (The Real-World Answer)
Here’s what nobody tells you in the tutorials: production multi-agent systems almost never use a single pure pattern. They combine patterns based on which parts of the workflow have which coordination needs.
You know this from human organizations. Your engineering team doesn’t use one coordination pattern for everything. Daily standups are sequential (everyone reports in turn). Code reviews are peer-to-peer (engineer to engineer). Major architecture decisions go through hierarchy (team leads to directors to VPs). Incident response is event-driven (someone posts alert, relevant people respond). You use whatever coordination pattern fits the situation.
Your multi-agent system should work the same way.
What Hybrid Actually Means in Production
Take the AT&T system handling 27 billion tokens per day. They don’t use purely event-driven coordination. They use:
Event-driven for high-volume workflows: Customer inquiries, billing questions, account updates—these go through pub-sub because volume requires horizontal scaling.
Central orchestration for complex workflows: Network troubleshooting, service provisioning, fraud investigation—these need a supervisor tracking overall state and making routing decisions.
Sequential pipelines for deterministic workflows: Billing calculation, compliance checks, audit logging—these run as simple chains because adding coordination overhead would just slow them down.
Peer-to-peer for real-time collaboration: Monitoring agents watching network health communicate directly when they detect patterns across regions.
Each workflow uses the coordination pattern that fits its specific needs. The system as a whole is hybrid.
Designing Hybrid Architectures
The question isn’t “which pattern should I use?” The question is “which patterns do I need for which parts of my workflow?”
Start with this framework:
Use sequential pipelines when:
- Each step strictly depends on the previous step
- Volume is low (<1,000 items/day)
- Latency is acceptable (sum of agent times is fine)
- Workflow is deterministic and rarely changes
Use central orchestration when:
- You have 5-15 agents that need coordination
- Workflow involves dynamic routing decisions
- You need single source of truth for state
- Error handling needs to be centralized
- Debugging and observability are critical
Use event-driven when:
- You have 20+ agents
- Volume is high (>10,000 items/day)
- Agents are loosely coupled
- Horizontal scaling is required
- Different event types trigger different processing paths
Use hierarchical teams when:
- You have 25+ agents with natural functional groupings
- Teams have internal coordination needs
- Different teams have different performance requirements
- Team-level optimization makes sense (e.g., cost vs. latency trade-offs per team)
Use peer-to-peer for:
- Real-time collaboration between specific agents
- Low-latency requirements where orchestrator overhead is too high
- Negotiation or iterative refinement between agents
- Monitoring and alerting between agents
A Real Hybrid Architecture
Here’s what a production system actually looks like. This is anonymized, but the architecture is real:
System: Enterprise customer support automation for a global SaaS company, handling 50,000 customer interactions per day across 40+ specialized agents.
Coordination patterns in use:
Layer 1 – Intake (Event-Driven): Customer inquiries arrive via multiple channels (email, chat, phone transcription, social media). Each creates an event. Agents subscribe based on channel and inquiry type. Volume drives event-driven architecture.
Layer 2 – Classification & Routing (Central Orchestration): A central orchestrator receives classified inquiries and routes to specialized teams based on complexity and urgency. This orchestrator maintains SLA tracking and decides escalation paths. Needs central coordination because routing decisions depend on system-wide state (current queue depths, agent availability, SLA timers).
Layer 3 – Specialist Teams (Hierarchical): Four specialist teams, each with a supervisor agent:
- Billing Team (8 agents)
- Technical Support Team (12 agents)
- Account Management Team (6 agents)
- Escalation Team (4 agents)
Team supervisors coordinate within teams using central orchestration at team level.
Layer 4 – Knowledge Retrieval (Peer-to-Peer): Multiple agents need to query the same knowledge base simultaneously. Direct peer-to-peer communication with the RAG system avoids routing through supervisors.
Cross-Layer – Monitoring (Event-Driven): Monitoring agents publish performance events (latency spikes, error rates, cost anomalies). Alert agents subscribe and trigger notifications when thresholds are exceeded. This runs parallel to main workflow.
Four different coordination patterns in one system. Each layer uses the pattern that fits its specific coordination needs.
How to Design Your Hybrid Architecture
Don’t start with the hybrid. Start simple:
- Build sequential pipeline first (even if you know it won’t scale)
- Identify where it breaks under production load
- Replace the broken pieces with appropriate patterns
- Keep the pieces that work
This is faster than trying to design the perfect hybrid architecture upfront. You won’t know which coordination patterns you actually need until you see where simple patterns fail under real workflows.
The progression most teams follow:
- Week 1: Sequential pipeline (learning the workflow)
- Month 1: Central orchestration (learning the coordination needs)
- Month 3: Add event-driven for high-volume parts (scaling where needed)
- Month 6: Add hierarchical teams if agent count exceeds orchestrator capacity
- Month 9: Add peer-to-peer for specific low-latency needs
Each step teaches you what the next step needs to solve.
Pattern 6: Human-in-the-Loop Gates (The Reality Check)
This isn’t purely a coordination pattern, but it’s critical enough that ignoring it will sink your production deployment.
Enterprise multi-agent systems cannot be fully autonomous for high-stakes decisions. You know this from human organizations: there are decisions junior engineers can make autonomously (code formatting, variable naming, routine bug fixes) and decisions that need senior review (architecture changes, security fixes, customer-facing changes).
Your multi-agent system needs the same gates.
Where to Insert Human Gates
The framework: Agents work autonomously until they reach a decision point that exceeds their authority level. Then they pause and request human approval before proceeding.
Examples of decisions that need human gates in production:
Financial systems:
- Agent can process refunds <$100 autonomously
- Refunds $100-$1,000 require supervisor approval
- Refunds >$1,000 require director approval
- Agent requests approval, provides context, waits for decision
Content generation:
- Agent can generate internal documentation autonomously
- Customer-facing content requires marketing review
- Press releases require executive approval
- Agent generates draft, submits for review, incorporates feedback
System changes:
- Agent can optimize queries autonomously
- Schema changes require DBA review
- Production deployments require ops approval
- Agent proposes change, justifies it, waits for approval gate
How to Implement Human Gates Without Breaking Autonomy
The wrong way: Every agent action requires human approval. This defeats the purpose of autonomous agents. You’ve built an expensive suggestion system, not an autonomous system.
The right way: Define clear authority levels and decision thresholds. Agents work autonomously within their authority. They only escalate decisions that exceed their threshold.
Implementation pattern:
class AgentWithHumanGate:
def execute_action(self, action, impact_level):
# Agents assess their own action's impact
if impact_level < self.authority_threshold:
# Within authority, execute autonomously
return self.execute_immediately(action)
else:
# Exceeds authority, request human approval
approval = self.request_human_approval(
action=action,
context=self.explain_why(),
alternatives=self.suggest_alternatives()
)
if approval.approved:
return self.execute_immediately(action)
else:
return self.execute_immediately(approval.alternative_action)
The agent maintains autonomy for routine decisions. It only requests approval for high-impact decisions. The human sees context, alternatives, and the agent’s reasoning. They can approve as-is or redirect to a safer alternative.
Production Reality Check
At a pharmaceutical company, we built a clinical trial patient matching system with agents screening patients for trial eligibility. Agents could autonomously screen patients against most criteria (age, medical history, geographic location).
But some eligibility criteria required medical judgment: interpreting complex medical conditions, assessing risk factors, evaluating drug interactions. We tried two approaches:
Attempt 1: Agents made all decisions autonomously. Result: 15% error rate on complex medical judgments. Unacceptable in clinical trials.
Attempt 2: All decisions required human review. Result: Physicians spent 40 hours per week reviewing agent recommendations, most of which were obviously correct. Defeated the purpose of automation.
Final approach: Agents had authority thresholds. Clear-cut cases (85% of patients): autonomous decision. Complex cases (15% of patients): agent provides analysis and recommendation, physician makes final call. Physician time dropped to 6 hours per week reviewing only complex cases.
Key lesson: Human-in-the-loop isn’t binary. It’s a spectrum of authority levels. Design the thresholds explicitly based on risk, impact, and reversibility of decisions.
Production Considerations: What The Tutorials Don’t Tell You
You’ve chosen your coordination patterns. Now here’s what actually breaks in production.
Observability Is Harder Than You Think
In a traditional system, you log requests and responses. In a multi-agent system, you need to log:
- Which agent made which decision and why
- Communication between agents (even in event-driven systems)
- State changes and transitions
- Cost per agent action (LLM calls add up fast)
- Latency breakdown across agent interactions
The gotcha: Your agents are black boxes (LLMs). You don’t have traditional stack traces. You have LLM reasoning chains that might or might not explain why the agent took an action.
What works in production:
- Structured logging with correlation IDs across agent interactions
- Agents explicitly log their reasoning before taking actions
- Cost tracking per agent call (group by agent type, track trends)
- Latency percentiles per coordination pattern (find bottlenecks)
- Error categorization: agent errors vs. coordination errors vs. external service errors
Cost Spirals Are Real
AT&T’s 90% cost reduction didn’t come from using better models. It came from fixing coordination patterns that caused agents to duplicate work.
Common cost spirals:
Duplicate work: Two agents independently call the same expensive API because coordination pattern doesn’t share results. Fix: Shared cache or event-driven notification when one agent completes work.
Retry loops: Agent A calls Agent B, times out, retries. Agent B was working but slow. Now Agent B is processing two requests. Costs double. Fix: Explicit timeout and backoff strategies.
Exploration explosions: Agent tries multiple approaches to solve problem, each approach triggers more agent calls. No circuit breaker stops runaway exploration. Fix: Budget limits per workflow (max N agent calls, then fail gracefully).
Coordination overhead: Every agent interaction goes through orchestrator. Orchestrator uses expensive LLM calls just to route messages. Fix: Direct communication for simple routing, orchestrator only for complex decisions.
Error Recovery Strategies
The hard truth: Your agents will fail. LLM calls time out. External APIs return errors. Agents hallucinate invalid actions. Your coordination pattern needs explicit error recovery.
Strategies that work:
For sequential pipelines: Checkpoint each step. On failure, restart from last successful checkpoint. Don’t re-run the entire pipeline.
For central orchestration: Orchestrator maintains retry budgets per agent. After N failures, escalate to human or fail gracefully. Don’t infinite loop.
For event-driven: Dead letter queues for events that can’t be processed. Monitor dead letter queue size. Alert when it grows (indicates systemic agent failures).
For hierarchical teams: Supervisor agents detect team member failures and reassign work to other team members. Don’t let one agent failure block entire team.
Testing Multi-Agent Systems
Unit testing individual agents is straightforward. Integration testing multi-agent coordination is where most teams struggle.
What works:
Scenario-based testing: Define realistic end-to-end scenarios, run them through the system, verify outcomes. Don’t just test happy paths. Test failure scenarios: What happens when Agent 2 is slow? When Agent 3 returns an error? When two agents contradict each other?
Chaos testing: Deliberately inject failures. Kill random agents mid-workflow. Slow down specific agents. Return errors from external services. Does your coordination pattern handle this gracefully?
Cost budget testing: Set a cost limit per workflow, run test scenarios, verify you stay under budget. Catch cost spirals in testing, not production.
Load testing with real coordination: Don’t just test individual agent throughput. Test coordination overhead under load. How does your orchestrator perform with 100 concurrent workflows? Does event-driven coordination fall behind when event volume spikes?
Decision Framework: Which Pattern Do You Actually Need?
You’re starting a new multi-agent project. You have the five patterns above. Which one do you build?
Answer these three questions:
Question 1: How many agents?
2-4 agents: Start with sequential pipeline. It’s simple. You’ll learn fast whether you need more sophisticated coordination.
5-15 agents: Start with central orchestration. It’s the production sweet spot: sophisticated enough to handle complexity, simple enough to debug.
15-30 agents: Plan for event-driven, but build central orchestration first. You’ll need event-driven eventually, but you need to understand your workflow before designing event schemas.
30+ agents: You’ll end up with hierarchical teams or event-driven. But start simpler and evolve. You can’t design the right hierarchy until you’ve seen agents work together.
Question 2: What are your latency requirements?
< 1 second end-to-end: You probably can’t do multi-agent coordination. Each agent interaction adds latency. Consider single-agent with tool access instead.
1-5 seconds: Central orchestration or sequential pipeline. Event-driven adds too much overhead.
5-30 seconds: Central orchestration with some parallelization. Sweet spot for most enterprise workflows.
> 30 seconds: Any pattern works. Optimize for debuggability and cost, not latency.
Question 3: How often does your workflow change?
Weekly changes: Don’t use event-driven (changing event schemas is painful). Use central orchestration (easy to modify routing logic).
Monthly changes: Central orchestration or sequential pipeline work well.
Quarterly or less: Event-driven’s flexibility pays off. Initial schema design cost is amortized over stable period.
The Decision Tree
START: How many agents do you have?
├─ 2-4 agents
│ └─ Use: Sequential Pipeline
│ └─ Evolve to: Central Orchestration when workflow becomes dynamic
│
├─ 5-15 agents
│ └─ What are latency requirements?
│ ├─ <5 seconds → Central Orchestration (simple)
│ └─ >5 seconds → Central Orchestration (with parallel execution where possible)
│
└─ 15+ agents
└─ What's your traffic volume?
├─ <1,000/day → Central Orchestration (orchestrator can handle it)
├─ 1,000-10,000/day → Consider Event-Driven (test orchestrator capacity first)
└─ >10,000/day → Event-Driven required (orchestrator becomes bottleneck)
└─ Complex workflows with teams? → Hierarchical Teams on top of Event-Driven
The meta-lesson: Start simpler than you think you need. Production will teach you where you need more sophisticated coordination. You can’t design the perfect architecture from requirements. You design it from production failures.
What to Do Monday Morning
You have a multi-agent system to architect. Here’s your pragmatic starting point:
Step 1: Identify your agents and their jobs List each agent and its specific responsibility. Be concrete: “Customer data retrieval agent” not “data agent.” This clarity helps you see coordination needs.
Step 2: Map dependencies Which agents need output from which other agents? Draw this on a whiteboard. If it’s a simple chain (A→B→C), start with sequential pipeline. If it’s more complex, you’ll see it visually.
Step 3: Estimate volume How many workflows per day? Per hour? This determines whether orchestrator bottlenecks matter.
Step 4: Start with central orchestration unless you have strong reasons not to It’s the Goldilocks pattern: sophisticated enough for real coordination, simple enough to debug. Most production systems use it.
Step 5: Instrument heavily from day 1 Log everything. Cost per agent call. Latency per agent. Communication patterns. You’ll need this data to know when to evolve your architecture.
Step 6: Plan your evolution path You’re building sequential today. You’ll probably need central orchestration in month 2. You might need event-driven in month 6. Design with evolution in mind, not perfection today.
The Uncomfortable Truth
The coordination pattern that works for your demo will almost certainly not work for your production system at scale. This isn’t a failure of architecture. It’s the nature of distributed systems.
You learn what coordination you actually need by watching what breaks. The team that gets multi-agent systems into production fastest isn’t the team that designs perfect architecture upfront. It’s the team that:
- Starts with the simplest pattern that could possibly work
- Instruments heavily to see where it breaks
- Evolves the architecture based on production data, not theoretical models
- Isn’t afraid to rip out and replace coordination patterns when they become bottlenecks
Your first production architecture will be wrong. That’s fine. It’s supposed to be wrong. It’s the starting point for learning what right actually looks like in your specific context.
Start simple. Measure everything. Evolve based on data.