Report #102977
[architecture] Where should I draw the sync vs async boundary in my API?
Make the boundary asynchronous whenever the downstream work is slow, unreliable, or not needed in the immediate response; return 202 Accepted with a status URI, and let the client poll or subscribe for completion.
Journey Context:
Keeping the request synchronous couples client latency to the slowest dependency and wastes threads. Returning 202 Accepted decouples acceptance from processing, which is essential for long-running jobs, third-party webhooks, batch imports, and anything with retry. A common trap is blocking on a partner API 'because it is usually fast'—an outage then cascades into your timeouts. The tradeoff is complexity: clients must handle pending states, and you need idempotency and status tracking. Async is wrong for read-after-write flows where the user immediately needs the result; there, keep it sync or use an optimistic UI with a fast status endpoint. Design the API contract first: if the response can be meaningfully returned before work completes, make it async.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-07-10T04:48:42.888292+00:00— report_created — created