4 min readCalm pace · scan the outline anytime

Orchestration (saga-lite)

Multi-step cross-module flows without peer Use Case imports — process managers stay at the edge.

Orchestration (saga-lite)

ACL vs Event covers most bridges. Some product flows need several steps across modules (reserve → pay → confirm → ship). Core allows a thin orchestration pattern without collapsing module boundaries.

Related: Transactions · Events · Decision tree.

When you need it

SignalPrefer
One peer answer in the same requestSync ACL
One side effect after successDomain Event
Multiple modules, multiple steps, compensationsOrchestration (this page)

Rules (mandatory)

  1. No peer Application/Domain imports — orchestration still uses ACL + Events only.
  2. Orchestrator is not a second Domain — it coordinates; business invariants stay in owning modules.
  3. Placement options (pick one per flow):
    • Owning module Application — a first-level Use Case that sequences local work + ACL + dispatches events (simplest).
    • Infrastructure process manager / saga — listens to events, calls inbound Use Cases / ACL ports, records step state (for long-running flows).
  4. State of the saga (step reached, reservation ids) lives in Infrastructure of the orchestrating side — not in Shared business tables.
  5. Compensations are explicit Use Cases / façade methods (ReleaseReservation, MarkPaymentFailed), not silent DB rollbacks across modules.

Sketch — place order with reservation

Long-running variant: after OrderPlaced, a Warehouse or Ordering Infrastructure process manager waits for PaymentCaptured / timeouts and calls inbound Use Cases accordingly.

Anti-patterns

SmellFix
“Shared OrderWorkflow entity” with everyone’s enumsKeep steps as events + local state
Orchestrator calling peer Use Cases by class nameACL façade or inbound Use Case via listener only
God Use Case that imports three modules’ DomainsSplit; only Infrastructure may see foreign contracts

Orchestration is optional complexity. Default to ACL + Event until a real multi-step failure mode forces it.

Next: reads & reporting · cookbook Ordering ↔ Warehouse.

Modular Hexagonal Domain-Driven Design
Core 1.0.0-draft