Keeping every engineer busy feels efficient. Queueing theory says it is the fastest way to slow everything down.
In many engineering organizations, slack time is treated as a sin. If a backend developer finishes early, they get another ticket. If a QA engineer is waiting for a build, they get a regression script to run. Every dashboard is green, every sprint is full, and everyone is working hard.
And yet features take months to reach customers.
This is not a people problem. It is a math problem, and once you see the math, you cannot unsee it.
Software Is Not a Factory Floor
Maximizing resource utilization, the share of time each person is busy, makes intuitive sense to anyone who has managed a production line. When the work is predictable and the parts are identical, keeping every machine running is a sound strategy.
Software development is not like that. We rarely build the same feature twice. Work arrives unpredictably, tasks take longer than expected, and bugs appear without warning. It is creative, highly variable work, and optimizing it for utilization destroys something more important: flow efficiency, the share of time a feature is actually being worked on rather than waiting in line.
The Highway Analogy
Think of a highway.
- At 50% utilization, cars move at the speed limit. If one driver taps the brakes, the system absorbs it.
- At 90% utilization, traffic crawls. A single lane merge sends a wave of brake lights back for miles.
- At 100% utilization, every square foot of asphalt is covered by a car. The highway is perfectly “utilized,” and the speed is zero. You have built a parking lot.
A siloed engineering organization runs like that full highway. Because everyone is fully booked, there is no spare capacity. When a frontend developer needs a small backend change, the backend team is already committed to its own sprint. The request goes into a backlog, and it waits.
The Math Behind the Traffic Jam
The highway is not just a metaphor. Queueing theory describes it precisely. Kingman’s formula approximates the average waiting time in a queue:
Wait ≈ ( ρ / (1 − ρ) ) × ( (Ca² + Cs²) / 2 ) × Service time
Here ρ is utilization, and Ca and Cs measure how unpredictable the arrivals and the work are.
Look at the first term, ρ / (1 − ρ). At 50% utilization it equals 1. At 80% it equals 4. At 90% it equals 9. At 95% it equals 19. The curve stays fairly flat until around 70–80%, then bends sharply upward, and as utilization approaches 100%, the wait approaches infinity.
The second term makes it worse for software. Our variability is high, so every point of utilization costs us more waiting than it would cost a predictable production line.
Now chain it together. A feature that has to pass through four horizontal teams, each running near full utilization, joins four queues in a row. The time spent coding barely matters; the time spent waiting dominates.
The Customer’s Clock vs. the Developer’s Clock
This is why two metrics tell such different stories:
- Cycle Time is the developer’s clock: from starting active work on a task to finishing it.
- Lead Time is the customer’s clock: from the moment an idea or request exists to the moment it is live in production.
Siloed organizations often report excellent cycle times. A backend developer picks up a ticket, writes the API, and closes it in two days. But that API then waits for the frontend team’s next sprint, then for the DBA queue, then for QA. The lead time for the feature might be sixty days.
When managers tell executives that velocity is high because cycle times are short, while customers wait months, trust erodes. Customers do not care how fast we type. They care how long they wait.
Fewer Handoffs, Fewer Queues
You cannot make variability disappear; it is the nature of creative work. But you can remove the queues. Every handoff between teams is a queue, so the most powerful lever is reducing the number of handoffs a feature needs.
That is what cross-functional feature teams do. When the people who can build the UI, the API, the database change, and the tests sit on the same team, a feature no longer joins four queues. A question that used to take three days to route through a ticket gets answered across the table in five minutes. You move back down to the flat, fast end of Kingman’s curve.
It also means accepting something that feels uncomfortable: a team with some slack is not wasting money. That slack is what lets the team absorb the unexpected without stopping the line.
Wrapping Up
The 100% busy organization is optimizing the wrong number. Utilization measures how busy people are; lead time measures how fast value reaches customers. Push utilization toward 100% and queueing math guarantees that lead time will grow sharply. Measure the customer’s clock instead, remove the handoffs that create queues, and leave room in the system to breathe. Busy is not the same as delivering.
This article is adapted from Chapter 2 of my upcoming book, Vertical Velocity: How to Break Silos, Ship Faster, and Reclaim Engineering Joy. The chapter goes further: how to put a price on your queues with Cost of Delay, and how to make the financial case for restructuring to a skeptical CFO. Follow this blog to hear when it’s out.