Event-Driven Architecture
Producers, consumers, choreography vs orchestration.
Services communicate by publishing/reacting to events rather than calling each other directly — producers don't know or care who (if anyone) is listening, which is the core decoupling payoff.
Choreography vs Orchestration: in choreography, each service reacts to events and emits its
own, with no central coordinator — the overall process emerges from independent reactions (this is
the NServiceBus quickstart's shape: Sales publishes OrderPlaced, Billing reacts independently, no one
"in charge" of the whole flow). In orchestration, a central process (a Saga/state machine) explicitly
tells each participant what to do next and tracks overall progress. Choreography scales better and
decouples further; orchestration is easier to reason about/debug for genuinely multi-step processes
with real branching logic and failure compensation — know both exist and the tradeoff, don't present
either as universally correct.
Eventual consistency is the accepted tradeoff: after OrderPlaced is published, there's a window
where Billing hasn't processed it yet — the system as a whole is consistent eventually, not
instantly, in exchange for the loose coupling.