Capacity Planning and Scheduling
MRP tells you what to make and roughly when. Scheduling decides exactly when, on which machine, in which order — and whether the plan is even physically possible.
Work centres and capacity
work_center(
id, plant_id, code, description,
category, -- MACHINE | LABOUR | PRODUCTION_LINE | GROUP
cost_center_id,
capacity_category, -- MACHINE | PERSON | ...
shifts_per_day, hours_per_shift, days_per_week,
number_of_capacities, -- how many parallel machines/people
utilisation_pct, -- realistic vs theoretical (typically 85-95%)
efficiency_pct, -- actual output vs standard
formula_setup, formula_machine, formula_labour,
activity_types[], -- which cost activities it charges
standard_queue_time, standard_move_time
)
Available capacity
Available = shifts × hours/shift × number of capacities × utilisation %
3 shifts × 8h × 4 machines × 90% = 86.4 hours/day
Never plan to 100%. Real utilisation includes breakdowns, breaks, changeovers, and minor stops. Planning at 100% guarantees a plan nobody can execute. 85–90% is typical; bottleneck resources are sometimes planned higher with explicit buffers elsewhere.
Capacity categories
One work centre has several capacities that constrain independently:
- Machine capacity — 4 machines available
- Labour capacity — but only 2 operators on the night shift
- Tool/PRT capacity — only 1 mould exists
The real constraint is the minimum. Modelling only machine capacity while labour is the actual bottleneck produces plans that fail every night shift.
Scheduling
Backward scheduling
From the required finish date, work backwards:
Required finish: 20 March
Op 050 Pack (2h) → 19 Mar 16:00 – 18:00
Op 040 QC (3h) → 19 Mar 12:00 – 15:00 (+1h move)
Op 030 Upholster (14h)→ 18 Mar 08:00 – 19 Mar 11:00
Op 020 Assemble (10h)→ 17 Mar 09:00 – 18 Mar 07:00
Op 010 Cut (5h) → 16 Mar 13:00 – 18:00
Order start: 16 March
If the calculated start is in the past, the order can’t meet the date. The system then either switches to forward scheduling from today (and reports the later achievable date) or flags the order as late.
Forward scheduling
From a start date forward. Used when the material is available now and you want the earliest finish.
Other modes
- Today scheduling — forward from today
- Only capacity requirements — book load without fixing dates
- Midpoint scheduling — fix one operation’s date (a critical machine slot), schedule both directions from it
Infinite vs finite
| Infinite | Finite | |
|---|---|---|
| Assumption | Unlimited capacity | Respects available hours |
| Result | A plan that may overload | An executable plan |
| Speed | Fast | Slow |
| Where | Classic MRP + CRP | APS / detailed scheduling |
Classic ERP does infinite scheduling in MRP, then CRP shows you the overload afterwards, and a human levels it. This is a historical artefact of 1970s compute limits that survives because it’s fast and because humans are good at the levelling judgement.
Capacity requirements planning (CRP)
Work centre ASSY-01, week 12
Available: 360 hours
Load:
Order 4711 45h
Order 4712 80h
Order 4715 120h
Order 4718 95h
Order 4720 85h
──────────────────
Total 425h → 118% loaded, 65 hours over
The capacity load graph by work centre by period is the planner’s core screen. Levelling options:
- Move orders to earlier/later periods with spare capacity
- Move to an alternative work centre
- Add a shift or overtime
- Split the order across machines
- Subcontract
- Reduce the order quantity
- Accept the late date and tell the customer
Bottleneck management (Theory of Constraints)
Goldratt’s insight, and the most useful idea in scheduling:
The throughput of the whole system equals the throughput of the bottleneck. Optimising anything else is waste.
Drum-Buffer-Rope:
- Drum — the bottleneck sets the pace for everything
- Buffer — protective inventory before the bottleneck so it never starves
- Rope — material release is tied to bottleneck consumption, not to a push schedule
Practical consequences: schedule the bottleneck in detail and let everything else follow; an hour lost at the bottleneck is an hour lost for the whole plant; an hour saved at a non-bottleneck is worth nothing.
Sequencing at a work centre
Order matters, especially with setup times.
| Rule | Optimises |
|---|---|
| FIFO | Fairness |
| EDD — earliest due date | Lateness |
| SPT — shortest processing time | Average flow time, throughput |
| Critical ratio | (due − now) / remaining work — balances urgency and work left |
| Slack time | Least slack first |
| Setup minimisation | Group by colour, size, tooling — huge in paint, injection moulding, printing |
| Campaign / block planning | Run all light colours before dark, then a full clean |
Setup-oriented sequencing is where real money is. A paint line going light→dark saves a full wash-down between every job. This is what APS optimisers are actually for, and it’s usually a bigger win than any other scheduling change.
Sequence-dependent setup matrices define the changeover time from product A to product B, which is not symmetric — this turns sequencing into a travelling-salesman-shaped problem.
Advanced Planning and Scheduling (APS)
APS plans material and capacity simultaneously, with finite capacity and optimisation objectives.
Objective functions:
- Minimise total setup time
- Minimise total lateness / maximise on-time delivery
- Maximise bottleneck utilisation
- Minimise WIP
- Minimise cost
- Multi-objective with weights
Techniques: constraint programming, genetic algorithms, simulated annealing, MILP, and increasingly ML-assisted heuristics.
Tools: SAP PP-DS and IBP, Kinaxis, o9, Blue Yonder, Preactor/Opcenter APS, Asprova, PlanetTogether.
When you need APS: capacity is the binding constraint, setups are significant and sequence-dependent, or you have complex multi-resource constraints (machine + tool + operator + material all simultaneously).
When you don’t: materials are your constraint, capacity is comfortable, or your process is simple flow. MRP plus a capacity load graph is enough, and it’s far cheaper.
Shift models and calendars
Shift definition:
Morning 06:00 – 14:00 (30 min break) → 7.5 productive hours
Afternoon 14:00 – 22:00 (30 min break) → 7.5
Night 22:00 – 06:00 (60 min break) → 7.0
Applied per work centre per day via a shift calendar,
with exceptions: public holidays, planned maintenance, plant shutdown weeks.
Scheduling must respect the calendar. An operation of 20 hours starting Friday 16:00 does not finish Saturday at noon — it finishes Monday, if the plant doesn’t run weekends. See Periods and Calendars.
Regional note: default Mon–Fri assumptions break in Bangladesh, Saudi Arabia, and the UAE, where the working week differs. This is a genuinely common bug in globally-deployed systems.
Available-to-promise vs capable-to-promise
- ATP — is there material? See Availability and ATP
- CTP — could I make it? Checks material and capacity, and returns a date derived from a simulated schedule
CTP is powerful and expensive: every quote triggers a scheduling simulation. Use it for high-value configured products, not for fast-moving consumer goods.
Metrics
| Metric | Meaning |
|---|---|
| Capacity utilisation | Load / available |
| Schedule adherence | Orders completed on their scheduled date |
| Setup time % | Non-productive time |
| Throughput time vs theoretical | How much is queue |
| Bottleneck utilisation | Should be high; everything else shouldn’t |
| Plan stability / nervousness | How much the schedule changes between runs |
| Number of reschedules per order | Churn |
That last pair matters more than people expect: a schedule that changes every night is one nobody trusts, so the shop floor ignores it and runs on informal rules. Plan stability is a feature. Firm zones, planning time fences, and frozen horizons exist to provide it.