A Queue Isn't a Solution - It's a Commitment
A Queue Isn’t a Solution - It’s a Commitment
After talking about Backpressure and the ability to say “not now,” comes the tool that looks like a convenient compromise:
let’s queue it.
Not rejecting, not breaking, just… waiting.
But this is where one of the most dangerous myths in systems hides.
Why a Queue Feels Like a Good Solution
A queue gives a feeling of control:
- Nothing gets lost
- Everything “will be handled eventually”
- The system stays available
On paper - perfect.
But a queue doesn’t eliminate a problem. It postpones it.
And postponement is a future commitment.
Every Queue Is a Promise
The moment a request enters a queue, the system says:
I commit to handling this. Not now - but eventually.
That’s a heavy promise.
Because from this moment:
- The request occupies memory
- It will compete with other requests
- And it will increase future Latency
The load hasn’t disappeared. It’s just been postponed.
Unbounded Queues - Debt You Don’t See
An unbounded queue looks “safe”: it never fills up, never returns an error, and never forces a decision.
And that’s exactly the problem.
An unbounded queue:
- Allows load to accumulate without stopping
- Hides the severity of the situation
- And postpones the moment of truth
Until suddenly: Latency explodes, response times become unreasonable, and the system “works” - but is no longer usable.
That’s not a solution. It’s debt growing quietly.
Latency Hiding vs. Latency Explosion
Sometimes a queue truly helps:
- It smooths out small fluctuations
- Absorbs short bursts
- And enables continuous work
That’s Latency hiding.
But when the load isn’t momentary - the queue doesn’t smooth it out, it accumulates it.
And then Latency explosion occurs: every new request pays not just for itself, but for everything that piled up before it.
Why Queues Break the User Experience
From the system’s point of view, everything still looks “fine.”
From the user’s point of view:
- The response is unpredictably slow
- Wait times vary wildly
- And there’s no way to understand what’s happening
High Latency and clear errors - are better than infinite waiting.
An Analogy
Think of a service hotline.
If every call enters an infinite queue: no one gets a “no.”
But whoever’s calling right now might wait an hour - without knowing it in advance.
A hotline like that doesn’t break technically - it just loses trust.
When a Queue Becomes Technical Debt
A queue becomes debt when it:
- Replaces a decision with a delay
- Hides load instead of dampening it
- And grows without a clear limit
A stable system asks:
- How long is it acceptable to wait
- How many requests is it acceptable to accumulate
- And when is it better to give up
A good queue is a queue with a limit, with a policy, and with a known price.
The Bottom Line
A Queue isn’t a solution to a rate problem. It’s an agreement to pay for it later.
If it’s not clear:
- Who pays
- How much
- And when
the queue isn’t an engineering mechanism - it’s a bet.
Looking Ahead
After dealing with load, queues, and rejection, we can move to a deeper question:
not how to keep up with the rate - but how to preserve meaning.
In the next part we’ll start talking about order and consistency, and why preserving Ordering is one of the most expensive decisions in a system.
📚 More in this Series: When Communication Breaks
- Part 0 When Communication Breaks - Engineering Under Load, Failure, and Uncertainty
- Part 1 The Dangerous Foundational Assumption - The Network Is Reliable "Most of the Time"
- Part 2 Timeouts - The Hardest Decision in Communication
- Part 3 Retries - A Recovery Mechanism or a Damage Multiplier
- Part 4 Load Isn't the Enemy - Spikes Are
- Part 5 Backpressure - When You Don't Say "Yes" to Everything
- Part 7 Ordering - Why Order Is an Expensive Luxury
- Part 8 Idempotency - Designing as if Everything Will Be Sent Twice
- Part 9 Consistency vs. Availability - Not Theory, a Daily Choice
- Part 10 RPC, Messaging, Streaming - Three Communication Philosophies
- Part 11 Stateless Doesn't Mean There's No State - It's About Where It Lives
- Part 12 Communication as a Reflection of Engineering Culture
- Part 13 Systems That Hold Up - Not Because They're Smart, But Because They're Humble
- Part 14 What We Learned - A Roadmap of the Entire Series