How to find the bottleneck machine, with numbers
The bottleneck is the machine with the least spare time for its load. Calculate load, check busy time and queues, and prove it with lost hours. Worked example.
The machine that limits output is the one with the least spare time for the work you give it: its busy hours come closest to, or past, its available hours. You prove it in three steps. Calculate each machine’s load from demand and measured cycle times, confirm it is busy while its neighbors wait, and show that hours lost there, and only there, cost shipments.
This guide is for plant managers and engineers in job shops and machining cells. It works one hypothetical four-machine cell through every step, from the load calculation to the week the bottleneck moves.
Key takeaways
- The bottleneck is the machine whose busy hours come closest to, or past, its available hours for the work you give it.
- Load is demand times measured cycle time, plus the machine’s own stops such as setups, divided by available hours.
- The machine with the most downtime hours can be the one with the most spare time, because waiting counts as downtime.
- Proof is in shipments: hours lost at the bottleneck cost output, while hours lost elsewhere are absorbed by spare time.
- Recalculate load whenever the product mix changes, because a different mix can move the bottleneck to another machine.
What is a bottleneck?#
Definition
Bottleneck is the resource whose capacity limits how much a whole line or plant can ship. An hour lost at the bottleneck is an hour of output lost for the plant, while an hour lost at any other machine is absorbed by that machine’s spare time.
The Theory of Constraints starts every improvement here: identify the constraint before you change anything.[4] The rest of this guide is the identify step, done with numbers instead of opinions.
The whole method rests on two measurements per machine: how many hours it ran, and why it stopped when it didn’t. The first is its utilization; the second is the reason on each stop.
Why the obvious suspects mislead#
Three machines get blamed first, and each can be the wrong one.
- The machine with the most downtime. A band saw that cuts a week’s blanks in 20 hours shows 55 stopped hours. It isn’t broken; it is waiting. A downtime Pareto by machine ranks it first and points you away from the problem.
- The machine with the longest cycle time. Cycle time leaves out setup, tool changes and repairs. For 600 parts, a lathe at 5.5 minutes with 12 hours of setups is busy 67 hours, while a mill at 6.0 minutes with 2 hours of setups is busy 62.
- The machine with the biggest pile in front of it. A deburr station that runs in baskets of 120 always has a basket waiting. The pile measures its batch size, not its capacity.
Calculate each machine’s load#
Load compares the hours a machine needs this week with the hours it has. Required hours include everything the machine does for its own reasons, not only cutting time.
Load =
Own stops are the stops a machine causes itself: setups, tool changes, breakdowns and adjustments. Waiting for material, an operator or a free spot downstream is not an own stop.
Take cycle times and own stops from what the machine logged over recent weeks, never from the quote or the nameplate. Here cycle time is running minutes per part, because own stops are counted on their own; a schedule load folds both into one effective cycle time instead.
Worked example
One week in a four-machine bracket cell
- Demand: 600 brackets a week, routed band saw, CNC lathe, CNC mill, deburr.
- Available time: two 8-hour shifts with a 30-minute break each, five days. That is 2 × 450 × 5 = 4,500 minutes, or 75 hours per machine.
- Measured per part: saw 2.0 minutes, lathe 5.5, mill 6.0, deburr 0.8.
| Machine | Run hours | Own stops | Busy hours | Load |
|---|---|---|---|---|
| Band saw | 600 × 2.0 = 20 h | 2 + 1 = 3 h | 23 h | 30.7% |
| CNC lathe | 600 × 5.5 = 55 h | 4 + 3 = 7 h | 62 h | 82.7% |
| CNC mill | 600 × 6.0 = 60 h | 6 + 5 = 11 h | 71 h | 94.7% |
| Deburr | 600 × 0.8 = 8 h | 0.5 + 0.5 = 1 h | 9 h | 12.0% |
The mill has 75 − 71 = 4 spare hours. Its most output in a week is (75 − 11) × 60 ÷ 6.0 = 640 brackets.
If demand rises to 700 brackets a week, the mill falls 60 short of its 640 ceiling, while the lathe could still make 741. Buying a second lathe would add nothing.
Load and takt time are the same test#
Takt time is available production time divided by customer demand.[3] For the cell that is 4,500 ÷ 600 = 7.5 minutes a bracket.
Divide each machine’s busy hours by demand and you get its busy minutes per part: the mill needs 71 × 60 ÷ 600 = 7.1 minutes. Load is that number over takt, 7.1 ÷ 7.5 = 94.7%. Use takt when you talk to a line team and load when you compare machines that make different parts.
Confirm it with measured busy time#
The calculation says which machine should be the bottleneck. Measured time says which one is.
Definition
Busy time is the time a machine spends running plus the time it is stopped for its own reasons, such as setups, tool changes and repairs. Time a machine spends waiting for a part, an operator or room downstream is not busy time.
Researchers at Toyota Central R&D Labs drew the same line: a machine is active when working, in repair, changing tools or being serviced, and inactive when it waits on another machine.[1] The bottleneck is the machine with the most busy time and the least waiting time.
Uptime is the share of available hours a machine ran. A sensor reads running and stopped, so it sees a waiting machine as stopped. The downtime reasons operators attach are what split a machine’s stopped hours into own stops and waiting.
| Machine | Uptime | Own stops | Waiting | Busy |
|---|---|---|---|---|
| Band saw | 26.7% | 3 h | 52 h | 30.7% |
| CNC lathe | 73.3% | 7 h | 13 h | 82.7% |
| CNC mill | 80.0% | 11 h | 4 h | 94.7% |
| Deburr | 10.7% | 1 h | 66 h | 12.0% |
Uptime alone ranks these machines correctly here, but not always. A press that runs 50% of its shift and spends another 44% in its own setups and breakdowns has low uptime and 6% spare time.
Close figures can’t separate two machines either. In one simulated seven-machine system, the confidence ranges of two machines’ utilization, 89% and 94%, overlapped, so utilization alone could not name the primary bottleneck.[1]
Break the tie with the shift timeline. At any moment, the bottleneck is the machine with the longest uninterrupted busy stretch.[1] Measured that way, the 94% machine was the sole bottleneck 45.1% of the time and the 89% machine 1.2%.[1]
Read the queue in front of each machine#
Work piles up in front of the bottleneck, because every machine upstream can make parts faster than it can take them. Measure the pile in days, not parts.
Time in queue =
This is Little’s Law, L = λW, rearranged: work in process equals throughput times the time each unit spends in the system.[2] The cell ships 600 ÷ 5 = 120 brackets a day.
| Queue | Parts waiting | Days of work |
|---|---|---|
| Before the lathe | 60 | 60 ÷ 120 = 0.5 |
| Before the mill | 240 | 240 ÷ 120 = 2.0 |
| Before deburr | 120 | 120 ÷ 120 = 1.0 |
The mill’s two days of queue agree with its load. The deburr basket doesn’t: it waits a day because the station runs in batches of 120, not because it is short of hours.
Prove it: hours lost there cost shipments#
The test that settles an argument is what happens to shipments when a machine loses time. A machine absorbs lost hours up to its spare hours. Past that, output falls.
Worked example
A 6-hour breakdown on two machines
- The mill makes 60 ÷ 6.0 = 10 brackets an hour and has 4 spare hours a week.
- The lathe has 13 spare hours, and the mill has 240 brackets, 24 hours of work, queued in front of it.
A 6-hour mill breakdown uses its 4 spare hours and costs 2 more. That is 2 × 10 = 20 brackets the cell doesn’t ship this week, without overtime.
A 6-hour lathe breakdown fits inside its 13 spare hours. The mill keeps cutting from its queue, and the lathe catches up later in the week.
Run the same test on your history:
Pick four to six weeks
Use weeks with the same shift pattern and a similar product mix, so the weeks compare.
List the long stops on each candidate
Take every own stop over an hour on the two or three machines with the highest load.
Line them up with shipments
Set each week’s good output beside those stops, machine by machine.
Find the machine output follows
The bottleneck is the machine whose lost hours past its spare time match the weeks output fell. Stops on other machines line up with nothing.
The forward version is faster: run only the candidate through its breaks for a week, and measure output the same way. If it is the bottleneck and demand exceeds its ceiling, weekly output rises by its parts per hour times the hours added. For the mill, two 30-minute breaks a day for five days add 5 hours, or 50 brackets.
When the bottleneck moves#
The bottleneck belongs to a mix, not to a machine. Change what the cell makes and the load moves with it.
Worked example
Half the week switches to part B
- Part B needs 9.0 minutes on the lathe and 3.0 on the mill. Setups and own stops stay the same.
- Week 2 makes 300 of part A and 300 of part B.
Lathe: (300 × 5.5 + 300 × 9.0) ÷ 60 = 72.5 run hours, plus 7, is 79.5 hours. Mill: (300 × 6.0 + 300 × 3.0) ÷ 60 = 45 run hours, plus 11, is 56 hours.
The bottleneck also shifts from moment to moment, as stops come and go. In a simulated four-machine line where one machine ran at 88% and the others at 80%, the busiest machine was the sole bottleneck 32.5% of the time and part of a shifting bottleneck another 29.3%.[1] The first machine in the line, at 80%, was a sole or shifting bottleneck 33.1% of the time, so a secondary bottleneck matters too.
So recalculate load each time you release a week of work, and read the measured busy time weekly. A bottleneck that moves every few days is a scheduling question: plan the mix so no machine is loaded past its available hours.
Find the bottleneck from machine data#
IoTFlows puts a SenseAi sensor on each machine that decides running or stopped every second from vibration and sound, with no PLC connection. That gives every machine the same clock, whatever its brand or age.
The Advanced Report lists each machine’s uptime and downtime hours over any period, sorted Top Performing, so the machines that ran most sit at the top. The Downtimes report’s Downtimes by Asset chart splits each machine’s stopped hours by reason, which separates its own stops from waiting.
On a packaging line, a BeamTracker at each machine shows which one stopped the line first. See machine utilization tracking.
What to do once you’ve found it#
The Theory of Constraints orders the work in five steps: identify the constraint, exploit it, subordinate everything else to it, elevate it, and prevent inertia from becoming the constraint.[4] Spend the cheap steps before the expensive one.
| Step | What it means at the mill | Cost |
|---|---|---|
| Exploit | Run it through breaks and shift changes | Labor only |
| Exploit | Keep a queue in front so it never waits | Some work in process |
| Exploit | Inspect parts before the mill, not after | None |
| Exploit | Preset tools and stage setups offline | Fixtures and tooling |
| Subordinate | Release work at the mill’s pace | None |
| Elevate | Overtime, outsourcing, a second mill | Capital or premium |
Each hour you recover at the mill is worth 10 brackets while demand exceeds its ceiling. An hour recovered at the saw is worth nothing until the saw becomes the constraint. Value the bottleneck’s hours with the cost of downtime method, using the output the plant loses, not the machine’s rate.
Setup is the mill’s largest own stop, 6 of its 71 busy hours. Measure changeover time at the bottleneck first.
You probably don’t need a new machine if the bottleneck still loses hours to waiting, breaks or long setups. Buy capacity when its busy time sits near 100% after those fixes and demand still exceeds its ceiling.
Questions#
Can a machine with low uptime be the bottleneck?#
Yes. A press that runs 50% of its shift and spends another 44% in its own setups and breakdowns is busy 94% of the time and has almost no spare hours. Uptime counts only running time, so add the machine’s own stops back in before you compare it with its neighbors.
What is the difference between a bottleneck and a constraint?#
A constraint is anything that limits how much a plant ships, such as a machine, a skill, material supply, or customer orders. A bottleneck is a constraint that is a resource inside the plant, most often one machine or one cell. When every machine has spare hours and work still ships late, the constraint is outside the machines.
Should every machine run at high utilization?#
No. Only the bottleneck needs to run every available hour. A machine upstream of it that runs faster than the bottleneck only builds work in process in front of it, which lengthens lead time without shipping a single extra part. Set utilization goals by role, not one goal for the whole floor.
How often should I check which machine is the bottleneck?#
Recalculate load each time you release a week of work, and whenever the product mix, a cycle time or the shift pattern changes. Read measured busy hours and queues weekly. A bottleneck that moves every few days points at the mix and the schedule rather than at any one machine.
Written by
Ulises Carrasco, Co-founder and COO
Sources#
- Shifting Bottleneck Detection, Proceedings of the 2002 Winter Simulation Conference, Christoph Roser, Masaru Nakano and Minoru Tanaka, Toyota Central R&D Labs; Winter Simulation Conference. Accessed Oct 16, 2026
informs-sim.org/wsc02papers/145.pdf - OR Forum: Little’s Law as Viewed on Its 50th Anniversary, Operations Research 59(3), 536–549, John D. C. Little, INFORMS (record on RePEc IDEAS). Accessed Oct 16, 2026
ideas.repec.org/a/inm/oropre/v59y2011i3p536-549.html - Takt Time, Lean Enterprise Institute. Accessed Oct 16, 2026
lean.org/lexicon-terms/takt-time - The Five Focusing Steps (POOGI), TOC Institute. Accessed Oct 16, 2026
tocinstitute.org/five-focusing-steps.html
