advanced 2 min answer

A workflow spans several services. What is the practical rule for choosing orchestration or choreography, and what is the design tell?

orchestrationchoreographyobligationsnotificationsatlassianconceptual
Show the full answer Hide the answer

The rule

Orchestrate obligations; choreograph notifications.

An obligation is a step someone is responsible for producing — reserve, charge, provision, fulfil. It needs an owner, an acknowledgement, a timeout with a defined action, and a compensation path.

A notification is a statement of fact — "order placed", "user registered", "document published". The publisher does not care who listens; consumers are added without changing it; a consumer failing delays only its own work.

The design tell

If the publisher would want to know that a consumer failed, it is a command wearing a notification's clothes.

That single question resolves most cases, and it exposes the two failures that matter:

A command treated as a notification produces work that silently does not happen. Inventory reservation becomes an implicit side effect of an "order placed" event, with no owner, no acknowledgement, no timeout and no retry policy — so when the consumer is down, orders are accepted, nothing is reserved, and the discrepancy surfaces at fulfilment.

A notification treated as a command couples the publisher's availability to every optional consumer, so a slow analytics pipeline blocks revenue.

What orchestration provides that choreography cannot

An authoritative answer to "where is this and why is it stuck". Without it, diagnosing a stalled workflow means correlating event logs across every participant, timeouts have no owner, and concurrent transitions race with no arbiter.

What orchestration costs

A central component every flow passes through — a new operational dependency, and a change bottleneck if it accumulates business logic. Keep it to sequencing, timeouts and compensation, or it becomes a distributed monolith every team must change and nobody owns.

The hybrid that is usually correct

Both, for different messages in the same flow. An orchestrator drives the obligations — reserve, charge, fulfil — and publishes notifications alongside for analytics, search, recommendations and email.

Treating the choice as global is the mistake; it is a per-message decision, and most non-trivial flows contain both kinds.