Synchronous work breaks at the edge
When every request tries to do every job immediately, spikes become timeouts. A queue lets the user-facing path accept work quickly and lets workers drain it at a controlled pace.
The useful signal is usually already there.
Systems stories get more interesting when you can feel the pressure move through the stack.
Design for waiting
Queued work needs idempotency, retries, dead-letter handling, progress visibility, and a clear answer to how old is too old.
Idempotency keeps retries from becoming duplicate side effects.
Watch age, not just depth
Queue depth tells you how much work exists. Oldest job age tells you what users are experiencing.
Flip the switches and watch the story turn into a tiny operating model.
A queue is a promise to finish later
Use queues when later is acceptable, then make later observable enough that nobody has to guess.