Retry + circuit breaker

When a dependency fails temporarily, use bounded retries with spacing and stop further calls during a sustained failure. Watch for retry storms across service layers.

Transactional outbox

When a state change and event publication must stay consistent, store the event in the database in the same transaction and publish it with a separate process. Consumers still need to handle duplicates.

Rule: name the failure scenario and quality requirement before choosing a pattern. Each pattern brings operational cost and new states to handle.