Factory Flow: Capacity, Variation, Rework and the Moving Bottleneck
Why the slowest station sets the pace for a whole production line. And why speeding up the others, or starting more work than it can handle, doesn’t help.
The problem
Picture a small production line with five stations: Cut, Weld, Assemble, Test and Pack. Every unit visits each one in turn. Weld is the slowest, at about 62 seconds a unit. So the line can ship at most about 58 units an hour, no matter how fast the other four work.
That sounds obvious, but it’s easy to miss on a real factory floor. When output falls short, the gut reaction is to speed up whatever station looks busy. Or to start more work so nobody stands around. If the speed-up misses the slowest station, output doesn’t budge. If work starts faster than that station can finish it, the extra units just sit in piles. Then every unit takes longer to get through.
I built the lab so you can see it happen. Watch the piles grow, and speed up or slow down any station. The slowest station is called the bottleneck, like the narrow neck of a bottle that limits how fast it pours. Fix it, and the bottleneck moves to the next-slowest station. Now add rework, where units that fail Test go back for another pass. The bottleneck can move even though no station got slower.
What the lab models
The lab is a small line on purpose: five stations in a row, with one machine each. It plays out the line one event at a time, as units are released, start work and finish. Three things set how much work each shipped unit puts on a station. They are the station’s time, its uptime (the share of time it isn’t broken down) and rework. The load is its average time × average number of visits ÷ uptime. Rework adds visits, since some units come back. How work is released and how much times vary don’t change that load. They change how much work waits in front of each station. The bottleneck is the station with the biggest load per shipped unit. Its capacity, in units per hour, is 3600 seconds divided by that load.
Three numbers describe the flow. Throughput is how many units ship per hour. Work in progress (WIP) is how many units are on the line right now. Cycle time is how long one unit takes from the moment it’s released until it ships.
How the numbers connect
Once the line settles down, it can’t keep shipping faster than the bottleneck can handle, with breakdowns and rework counted. Little’s Law ties the three numbers together: WIP = throughput × cycle time. So at a given throughput, more units on the line means each one takes longer to get through. Rework adds to the workload, because some units use up a station’s time more than once.
What to try
The controls aren’t there to max out every station. They’re there so you can watch the bottleneck move. Speeding up a station that isn’t the bottleneck may barely change output. Speeding up the bottleneck can reveal the next-slowest station, which then sets the limit.
What the model leaves out
The lab runs a small discrete-event simulation in your browser. That means it jumps from one event to the next, like a unit arriving or a job finishing. Units are released in one of two ways. Push starts new work at a set average pace, no matter what’s already on the line. It only skips a release once 360 units are in the system. CONWIP, short for constant work in progress, caps the number of units on the line. It starts a new one only when a finished one leaves. Units wait first come, first served (FIFO), with no limit on how many can wait. Each job’s time is drawn at random from a gamma distribution. That’s a common way to model task times that are never negative and sometimes run long. After Test, each unit either ships or loops back to Assemble as rework. The model still leaves things out. It folds breakdowns into one smooth uptime number. The waiting space between stations never fills up, so no station ever has to stop because the next one is backed up. It also skips setups (switching a machine over to a new product), shift calendars, a mix of products and units that take different paths. Those only belong in the model when the decision depends on them.
How I check it
A few checks have to pass. Adding capacity at the bottleneck (when only one station is the slowest) must never lower the line’s calculated capacity. More rework must never raise the most the line can ship. And if demand stays below what every station can handle, the model must not invent output lost to a capacity limit.