The saga pattern looks straightforward in diagrams. It becomes genuinely complex the moment you operate it in production.
The central question — orchestration or choreography — carries consequences that ripple through your codebase, your operational posture, and your team's cognitive load for years.
This is not a "use orchestration for complex sagas, choreography for simple ones" post. The real trade-offs are more specific.
The Baseline: What Both Approaches Must Solve
Before choosing an approach, every saga implementation must handle:
Atomicity at step boundaries — commit the database write and publish the event in the same transaction (transactional outbox or CDC)
Idempotent consumers — at-least-once delivery means your steps will be invoked more than once
Compensation correctness — compensating transactions are not rollbacks; they undo changes in a world that has moved on
Observability — correlation IDs, structured logging, and queryable saga state
Discussion
Don’t hold back—comment!
Don’t wait—start sharing your ideas now!