Synchronous request/response vs asynchronous messaging
corebeginnerSynchronous request/response means the caller waits for the callee to finish and reply before continuing — simple, but the caller is blocked for as long as the work takes, and a slow or down dependency directly slows or breaks the caller. Asynchronous messaging means the caller hands off a message and continues immediately, with the work happening independently — the caller is decoupled from how long the work takes, at the cost of not having an immediate result.
Think of it as
Synchronous is a phone call — you stay on the line until the other person answers your question, and if they take forever, you're stuck waiting. Asynchronous is sending a text message — you send it and move on with your day, trusting it'll be read and acted on, without knowing exactly when.
What we're doing: Show the same feature (sending a welcome email on signup) built synchronously vs asynchronously.
- 4
- This is the direct coupling: the signup request's latency now includes a dependency the user never asked to wait on.
- 15
- The queue is what breaks that coupling — signup succeeds independently of the email provider's speed or availability.
Why this works: This is the single most common refactor from synchronous to asynchronous — a non-essential side effect (sending an email) was blocking a critical path (completing signup) for no reason the user would ever notice or want.
Making a non-critical side effect synchronous on the critical request path
Wrong
Better
What you see: A feature that has nothing to do with a user-visible outcome (an email, an analytics event, a search-index update) shows up as the slowest step in a request's trace, and an outage in that unrelated dependency takes down an otherwise-unrelated critical flow.
Why: Not every step in a request handler needs to complete before the response is returned — only steps the caller genuinely needs a result from belong on the synchronous path; everything else is a candidate to move off it via a queue.
- Synchronous
- Server waits for the email provider to confirm
- A slow or down provider slows or breaks every signup
- Caller is blocked for the full duration
- Asynchronous
- Server publishes to a queue and returns immediately
- A worker sends the email independently, whenever it can
- Signup succeeds regardless of the email provider's speed
Synchronous vs asynchronous, at a glance
Remember: Synchronous: caller waits, simple, but directly coupled to the callee's speed and availability. Asynchronous: caller continues immediately, decoupled, but has no immediate result — use it for work the caller does not need a result from before proceeding.
See also: queue concepts · decoupling with queues

