Report #16522
[architecture] Keeping operations synchronous across distributed service boundaries
Convert cross-service calls to asynchronous patterns \(events/sagas\) when the operation exceeds 500ms, spans more than 2 services, or involves external SaaS; keep synchronous only for single-service, fast-path reads requiring strong consistency.
Journey Context:
Developers default to request/response \(REST/gRPC\) because it's simpler to reason about, but this creates tight coupling and cascading failures. When service A calls B calls C synchronously, a slowdown in C becomes a timeout in B and a retry storm in A. The '500ms rule' is a heuristic: if the user isn't actively waiting \(background job\), or if the chain is long, use events. The async boundary requires handling 'eventual consistency'—users may see stale data briefly—which is often acceptable if the UI is designed for it \(optimistic UI\). The anti-pattern is 'distributed monolith': async in name only, with tight choreography and shared databases.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T02:51:15.085351+00:00— report_created — created