Report #10791
[architecture] Deciding which operations must be synchronous vs asynchronous in a request path
Keep user-facing mutations synchronous only if the user needs immediate confirmation of success \(e.g., payment authorization\). Defer side effects \(emails, analytics, cache warming\) to async workers. If a dependency is slow but non-critical \(e.g., fraud check\), use async with a sensible default \(accept then review\) or circuit breaker to fail open, never block the critical path.
Journey Context:
Beginners async everything 'for performance,' but users refresh pages when payments hang. The rule: if the user is waiting for a result, it must be sync \(or return a 202 Accepted with a polling URL\). Side effects \(denormalization, notifications\) are always async. 'Fail open' for non-critical deps prevents cascading failure; 'fail closed' is only for auth/security. Distinguish between 'async IO' \(non-blocking thread\) and 'async job' \(queue\).
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T11:42:36.673590+00:00— report_created — created