Systems and complexity
Bottlenecks and the theory of constraints
A system's throughput is set by one constraint; improving anything else is wasted effort until that constraint is fixed.
Eliyahu Goldratt, The Goal (1984, with Jeff Cox), and his five focusing steps.
Goldratt defines a constraint as anything that limits a system from achieving higher performance against its goal. In a chain of dependent steps the slowest step sets the pace of the whole: speeding up a step upstream of it only piles work in front of it, and speeding up a step downstream only makes that step wait more. His five focusing steps follow from that. Identify the constraint. Decide how to exploit it, meaning get the most out of it without major spending. Subordinate everything else to that decision. Elevate the constraint by adding capacity. Then, when it breaks, go back to step one, and do not let inertia from the old constraint become the new one.
It holds because the parts are dependent and variable. In The Goal the hike moves at the pace of the slowest scout, Herbie, no matter how fast the others walk, and the gap in front of him is the inventory of the system. Work waiting in front of a bottleneck is the clearest sign of where it is, and the wait is the queue length divided by the constraint's rate, which Little's law makes exact. In practice this means walking the pipeline and finding where the queue is longest, then asking how much of that stage's time goes to things that are not its job.
The constraint moves once you lift it, so the steps are a loop, not a project, and Goldratt's warning about inertia is the part most often skipped: the rules an organisation built around the old constraint outlive it and become the new one. Constraints are often policies rather than machines: an approval, a batch size, a rule about who may deploy. And exploit comes before elevate for a reason. Teams reach for more capacity when the bottleneck is idle a third of the time because of scheduling, and the cheaper fix is to stop starving it. Finally, the model assumes a chain. In a web of parallel paths there can be several constraints at once, and the method works one at a time.
Example
On 23 March 2021 the container ship Ever Given ran aground across the Suez Canal and blocked it for six days. Nothing anywhere else in the shipping system could make up for it: by the time the ship was refloated on 29 March, 422 vessels were queued at both ends. The Suez Canal Authority's chairman said 85 ships were expected to pass on Saturday 3 April, and the backlog cleared that day. The canal was the single constraint for every ship routed through it, and the queue in front of it was the measure of the loss.
Where it applies
A single database primary, one slow stage in a build pipeline, or the one reviewer who approves every change is the constraint, and adding engineers elsewhere only lengthens its queue. In a data pipeline, find the stage with the most work waiting in front of it before you add workers anywhere.
Think about it
What is the one constraint on your team's output right now, and how much of its time goes to work that is not its job?
Applied it to something real? Log it.
Test yourselfYou double the speed of a stage that is not the bottleneck. What happens to throughput and to the work in progress?
Throughput does not change; the constraint still sets it. If the faster stage is upstream, work piles up in front of the bottleneck. If it is downstream, the stage just waits more.
Related models
- Stocks and flowsA stock is what has accumulated; flows are the rates that change it. The stock moves only as fast as inflow minus outflow.
- Redundancy and slackSpare parts and spare capacity look like waste until the day they are the only thing between a fault and a failure.
- The opportunity cost of timeThe real price of an hour is the best thing you could have done with it instead.
- Scale effects and the square-cube lawDouble an object's length and its surface grows four times but its volume eight, so a thing scaled up in proportion is a different thing.
- Little's lawIn any stable system the average number of items inside equals the arrival rate times the average time each spends inside: L = λW.