Welcome to the real world, where bottlenecks are inevitable - and we're usually wrong about where the bottleneck really is.
Bottlenecks are inevitable. There will always be one. As Eliyahu Goldratt’s The Goal reminds us, a system’s throughput is always constrained by its slowest point. The trick isn’t to fight bottlenecks—it’s to see them, manage to them, and optimize around them.
Managing the Bottleneck: A Real-World Example Let’s take a common real-world scenario: architecture reviews.
Many organizations require architecture reviews before development begins and again before production release. The review committee, however, is often overloaded, leading to long delays. Here’s how bottleneck mismanagement commonly plays out:
Not considering the whole system – Leadership assumes development is the bottleneck and hires more developers. But if reviews are the constraint, we just spent money to make the problem worse.
Starting more work – Teams, frustrated with delays, begin new projects to stay busy. This clogs the system even more.
Pushing harder – Under pressure to deliver, teams rush, leading to mistakes and even more review cycles.
Ignoring the reality of constraints – Unrealistic deadlines are set to ramp up urgency, assuming work will magically move faster, leading to burnout and failure to meet expectations.
What to Do Instead: Finding and Managing the Bottleneck
Instead of making things worse, we can take practical steps to manage bottlenecks effectively.
Find the Bottleneck
Bottlenecks aren’t always obvious—especially in complex knowledge work. But, if we are visualizing enough of the system we have tools to help:
- Follow the Work-In-Progress (WIP) – Look at the workflow. The slowest step in our process often has a pile of work waiting ahead of it. That’s our true constraint.
- Look at Aging WIP – Where is work getting stuck and aging? If it's aging because it's sitting - the blocker is our constraint.
- Find Cumulative Flow Bubbles – Look for sections of the chart where a workflow stage is widening over time. That’s a sign of a potential bottleneck.
In the following example work is stacking up in Testing - which could mean you have a bottleneck in Testing. Alternatively, you may have a bottleneck in Review - if work is stacking up in Testing because there is no capacity in Review. It will be important to know which as you'll want to limit the amount of work flowing into that column.
To test to see which state was the constraint, we added a "Testing Done" column. Then it became obvious - the constraint was in "Review".
Optimize For the Bottleneck
Once we’ve identified the constraint, we can take action:
1. Make the bottleneck visible – Use a Kanban board, Aging WIP, Cycle Time Scatterplots, and Cumulative Flow Diagrams to show where work is piling up.
2. Control input with WIP limits – Prevent overloading the review process. If the queue is full, hold off on starting new work.
3. Create working agreements – When the review queue is at capacity, shift focus to work that doesn't require the constrained area - potentially tech debt reduction or exploratory research.
4. Reduce rework – If reviews frequently result in changes, create early feedback loops (e.g., lightweight, pre-review check-ins) to catch issues earlier.
In the example below, we introduce a WIP limit for the Testing Done column - it doesn't remove the bottleneck, but it does manage to it. This change, though perhaps counterintuitive, is likely to improve overall flow by preventing overload at the bottleneck.
Embracing Constraints: Working With the Bottleneck
Bottlenecks are part of the real world—we can’t always remove them, but we can get smarter about how we handle them.
Instead of pretending bottlenecks don’t exist - or worse - assuming we know where they are, we can learn to locate and manage to them. By making work visible, setting realistic expectations, and optimizing flow, we can work with our bottlenecks without exacerbating the problem.
So, got a persistent bottleneck you can't eliminate? Don’t fight it—manage it.