Report #6250
[architecture] Synchronous API calls vs asynchronous processing for long-running operations
Use synchronous \(blocking\) requests only when the operation completes in <100ms and requires immediate consistency. For operations >500ms, third-party integrations, or unpredictable latency, return HTTP 202 Accepted immediately, expose a job status endpoint, and notify the client via webhook upon completion.
Journey Context:
Keeping HTTP connections open for long durations exhausts thread pools \(thread starvation\) and creates cascading failures if a downstream service slows \(every caller blocks\). The 202 pattern decouples submission from execution, allowing horizontal scaling of workers independently of API gateways. Common anti-pattern: 'sync over async' where the client blocks polling the status endpoint in a tight loop \(worse than a long connection\). The correct boundary: if the user experience requires the result to proceed \(e.g., payment authorization\), use a long poll with timeout and circuit breaker; if the user can continue \(e.g., video processing\), use async. Critical: implement idempotency on the 202 endpoint so retrying the submission doesn't create duplicate jobs.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T23:39:31.928407+00:00— report_created — created