The term nobody tells a shop owner
Most owners run into finite capacity scheduling the hard way, years before they hear the phrase. You promise six jobs for Friday. Friday arrives with four of them done. Nobody was lazy and no machine broke. The week just never had room for six, and nothing in your planning ever said so.
That gap has a name. Understanding it is the difference between a schedule you argue with and a schedule you can run.
What finite capacity scheduling means
Finite capacity scheduling means building a schedule against the capacity you actually have. Every machine runs one job at a time. Every operator is in one place at a time. The schedule can only place work where there is genuinely room for it, so a mill booked from 9 to 2 cannot take another job from 9 to 2, no matter how urgent the second one is.
That is the whole idea. It sounds obvious written down, which is exactly why it catches people out: almost every tool a small shop actually uses breaks the rule.
Infinite capacity is what you are running now
The opposite approach is infinite capacity scheduling, and it is probably what your shop uses today whether you chose it or not.
Infinite capacity planning starts at the due date and works backwards. The job takes six hours, the customer wants it Thursday, so it starts Wednesday afternoon. Nothing in that arithmetic asks whether the machine is free Wednesday afternoon. Do it for forty jobs and you get a plan where every job looks fine on its own line and the shop is booked at 180 percent on Wednesday.
Three tools do this to shops constantly:
MRP and most ERPs. MRP was designed to answer what to buy and when to start, not how to sequence twelve machines on a Tuesday. It explodes the bill of materials, subtracts the lead time, and hands over a start date. Capacity checking is either absent or sold separately as a finite scheduling module, which is one of the reasons full ERP is a poor fit for a small shop.
Spreadsheets. A cell will hold anything you type. Two jobs on the same machine on the same day is not an error to a spreadsheet, it is just text. The overload is invisible until an operator finds it.
Calendars and whiteboards. Google Calendar will happily stack four events at 10am. A whiteboard row runs out of physical space, which is a crude sort of capacity limit, but it does not tell you that the job you just squeezed in pushed three others past their due dates.
None of these are dishonest. They just have no concept of a machine being full, so the overload gets discovered on the floor instead of in the plan.
If you want to see the two approaches run against the same week of work, finite vs infinite capacity scheduling schedules the same five jobs both ways and shows where the plans diverge.
Why high-mix shops feel it worst
If you run high-mix, low-volume work, infinite capacity planning hurts more than it does anywhere else, for two reasons.
Setup is a large share of every job. In a long production run, changeover time disappears against the cutting hours. In a job shop, setup is often the main event, and infinite capacity planning tends to ignore it entirely or apply one flat number to every changeover. The capacity you thought you were scheduling was never there.
The mix moves under you. A rush order lands, an inspection kicks a job back, a customer pulls a date in. Each one re-sequences the floor. A backwards-scheduled plan cannot absorb that, because it was built on an assumption about a week that no longer exists by Tuesday.
Add both together and the plan promises capacity the shop does not own, then loses track of what it did own. That is the Wednesday scramble, and it is structural rather than personal.
What you get when capacity is finite
Three things change, and only one of them is about software.
You find out early. An overload that shows up while you are still planning is a decision: work late, move a date, subcontract, say no. The same overload discovered at 2pm on Thursday is a fire. Nothing about the underlying shortage changed, only how much room you had to respond, and that is worth more than any feature on a comparison table.
Your lead times get honest. When the schedule refuses to book a machine that is already busy, the date it gives you is a date the shop can actually hit. That is what lets you quote lead times you can defend instead of padding everything by two weeks and losing the order to a shop that quoted straight.
Double-booking stops being possible. Not less likely, not caught at standup. Not possible. That single constraint removes an entire category of lost hours, which is why it is the highest-value thing most shops fix first. The habits that get you there are further down this page.
Working out what your capacity actually is
Scheduling against a finite number means knowing the number. Most shops have never worked it out, and the ones that have usually reached for the theoretical figure, which is the one that flatters the schedule and then leaves you short every Thursday.
Start with the basics. No spreadsheet required for this first pass.
Step 1: Count your available machine-hours
For each machine, multiply:
- Hours per shift x shifts per day x days per week
Example: You run one 8-hour shift, 5 days a week, and you have 6 machines.
6 machines x 8 hours x 5 days = 240 machine-hours per week
That is your theoretical maximum. The actual number is lower.
Step 2: Subtract non-production time
Not every hour is production time. You need to subtract:
- Setup/changeover time. Most shops lose 15-25% of available time to setups. If your setups average 20% of machine time, subtract 48 hours from the 240.
- Planned maintenance. If each machine gets 1 hour of maintenance per week, subtract 6 hours.
- Breaks and shift transitions. Maybe 30 minutes per machine per day for operator breaks and shift handoffs. That is 15 hours per week.
240 - 48 (setups) - 6 (maintenance) - 15 (breaks) = 171 practical machine-hours per week
That is your real capacity. About 71% of the theoretical max. This is normal for a well-run small shop.
Step 3: Know your bottleneck
Not all machines are equal. Your capacity is really determined by your most constrained machine.
If your VMC runs at 90% utilization but your lathe runs at 40%, your VMC is the bottleneck. Adding more lathe time doesn’t help. Every new job that needs the VMC competes with everything already on it.
Identify your bottleneck. That machine’s capacity is your shop’s true capacity for any job that needs it.
When to say no
Saying no to work is hard. Every job is revenue. But taking on a job you can’t deliver on time is worse than declining it.
Here are clear signals to say no (or push the deadline):
- Your bottleneck machine is already at 80%+ utilization for the period the job needs it
- The job requires a setup that would bump an existing job with a tighter deadline
- You would need overtime to fit it in, and the margin doesn’t justify the overtime cost
- You don’t have the material in stock and lead time puts the job at risk
Saying no today, with a clear explanation, keeps the relationship intact. Missing the deadline later does not.
Knowing the number is one half. Making the schedule respect it is the other, and there are two ways to buy that.
Two ways to do it, and the price gap between them
Finite capacity scheduling is a principle, not a product. There are two ways to put it into practice, and the industry tends to talk about only the expensive one.
The solver. Advanced Planning and Scheduling software models your capacity in detail, shift calendars, setup matrices, operator skills, tooling, then sequences the work for you and re-sequences when something changes. In a large plant with stable routings, that is genuinely powerful and earns its cost. In a shop with 3 to 30 machines, the licence is the small part of the bill. The real cost is the modelling: an APS is only as good as the data you feed it, and keeping setup matrices accurate for a shop that runs forty different parts a week is a job nobody in a 12-person shop has time to do.
The board. Every machine and every job on one shared schedule, laid out against real time, where the system will not let two jobs occupy the same machine or the same person at once. No solver decides the sequence. You do, which in a small shop you were going to do anyway, because you know which customer waits and which one does not. The capacity is still finite. It is enforced by the tool instead of optimised by it.
This is the option most small shops are never shown, because it does not have a sales team. It is what a scheduling board is for, and for a shop under 30 machines it captures most of the benefit at a fraction of the cost and effort. Machestra is one of these: assign an operation to a machine or a person who is already busy and it refuses the booking and tells you which job is in the way.
Keeping two jobs off the same machine
Finite capacity is the principle. A double-booking is what its absence looks like on a Tuesday morning, with two operators and one machine. Five habits close the gap, and only one of them is software.
Keep one schedule
Not a whiteboard and a spreadsheet. Not a spreadsheet and your head. One system that everyone looks at and everyone updates.
Per-job paperwork is not a second schedule, so it does not count against this. A job traveler travelling with the parts tells one operator what to do with the job in their hands. It has no idea what the other twelve jobs are doing, which is exactly why it cannot catch a double-booking and the schedule has to live somewhere else.
When there’s one place to check, people check it. When there are three places, people check none of them.
Add conflict detection
This is the fix. When you assign a job to a machine, the system should check whether that machine is already booked at that time. If it is, the system should warn you before you save.
Spreadsheets can’t do this reliably. Whiteboards can’t do this at all. This is where scheduling software earns its cost. A $19/mo* tool that catches two double-bookings per month is paying for itself in the first week.
Conflict detection doesn’t just prevent mistakes. It changes how you schedule. Instead of guessing whether a machine is free and hoping you’re right, you know. You schedule with confidence because the system checks for you.
Make the schedule visible to everyone
Your operators shouldn’t have to walk to the office to see the schedule. The schedule should be available on a phone, a tablet, or any browser. When the operator can check the schedule from the machine, they catch conflicts too.
More eyes on the schedule means more chances to catch a problem before it reaches the floor. If Operator A sees that Operator B is scheduled on the same machine at the same time, they’ll say something. But only if they can see it.
Handle rush jobs through the system
This is the hardest habit to build. When a rush job comes in, the instinct is to just commit and figure it out later. Force yourself to check the schedule first.
Open the schedule. Look at the machine. Is it free at the time you need? If yes, assign the job. If no, see what’s on it and decide whether to bump or reschedule.
This takes 30 seconds. It prevents an hour-long mess on the floor. The math works out.
Limit who can schedule
Not everyone needs to assign jobs to machines. The more people who can change the schedule, the more chances for conflicts. Pick 1 to 2 people who manage the schedule. Everyone else views it.
This doesn’t mean your team can’t give input. They can flag problems, suggest changes, and update job statuses. But the act of assigning a job to a machine at a specific time should go through a small number of people who coordinate with each other.
The part software cannot do for you
Finite capacity scheduling only works if the capacity numbers are true, and this is where most implementations quietly fail.
If you schedule from cycle time, the cutting number, you are still doing infinite capacity planning with extra steps. The load, the deburr, the walk to the tool crib, the inspection queue, and the setup are all real hours that a cycle time does not contain. Schedule from that number and your finite schedule confidently books capacity that does not exist, which is why jobs run late even when the machines are fine.
Time a few of your common part families door to door. You do not need a time and motion study, you need honest numbers on the ten jobs you run most. That is also the input the capacity arithmetic above depends on, so the work pays for itself twice.
When you actually need an APS
To be fair to the category, there is a point where a solver is the right answer. Look at buying one when you are running hundreds of jobs at once across dozens of work centres, when your routings are stable enough that a setup matrix stays accurate for more than a month, when sequencing decisions are too complex for a person to hold in their head, and when you have someone whose job includes maintaining the model.
If you are a 9-machine shop running aerospace and medical parts in small batches, you are almost certainly not there. What you need is one schedule that tells the truth about time and refuses to book a machine twice. The same question comes up now with the AI label on it, and the answer sorts out the same way: does a small shop actually need AI scheduling software.
Where to start
You can start on Monday without buying anything. Get honest process times for your ten most common jobs. Put every machine and every open job in one place. Then let nothing be booked twice, whether that rule is enforced by software or by one person owning the board.
If you want to see what the software version looks like, our guide to machine scheduling software for small shops walks through what to look for and what to skip, and the complete guide to job shop scheduling covers the mechanics underneath all of it.
Machestra is built on the second approach: your machines and your people on one board, real time blocks, and a hard stop when a job would put a machine or an operator in two places at once. Finite capacity, without the APS price tag.
*All Machestra prices shown in USD. Actual price may vary based on your location.