Anti-Patterns

Orchestrator as Bottleneck

Anti-pattern: route all agent runs through a single-process orchestrator that becomes the system-wide concurrency ceiling.

Problem

The orchestrator becomes the load-bearing single point of contention. Practical scaling ceiling sits around 10–100 concurrent workflows depending on how chatty the orchestrator is. Adding workers does not help; they queue waiting for orchestrator decisions. The fix is structural (sharded orchestrator, event-driven dispatch, or stateless-reducer per workflow) and expensive to retrofit once business logic depends on the centralized view.

Solution

Partition orchestrator state by run id, tenant, or workflow type. Use durable event stores (Kafka, Temporal, Postgres logical replication) so multiple orchestrator replicas can subscribe independently. Where a single global view is needed, build it as a materialized projection of the event log, not as the orchestrator's local state. Pair with stateless-reducer-agent so each workflow can be rehydrated on any replica.

When to use

  • Never as the long-term design. Cite when reviewing centralized supervisor architectures.
  • Partition orchestrator state by run id or tenant from day one.
  • Build global views as projections over the event log, not orchestrator local state.

Open the full interactive page

Diagram, neighbourhood map, code examples, related patterns and full provenance.

Related