The forgotten half of capacity
Capacity planning normally forecasts how many jobs, appointments or deliveries are coming. Actual capacity is jobs multiplied by duration, and duration is treated as a constant taken from an average.
The variation is usually large. Two jobs of the same type can differ by a factor of three depending on access, complexity, and who is doing the work. An average fits neither and the schedule fails in both directions.
What actually drives duration
- Job type - the obvious one, and usually already used
- The individual doing it - consistent differences between people, which planning rarely reflects
- Location - access, parking, floor, whether the site is known
- Customer or site history - some sites reliably take longer, for real reasons
- Time of day and position in the run - the last job of a shift differs from the first
- Whether preparation happened - parts present, site ready, previous work completed
The individual variation is worth handling carefully. Used to improve scheduling it is valuable; used as a performance metric it will be gamed, and the data quality will degrade within weeks as people learn what is being measured.
Predict the spread, not just the middle
A schedule built on median durations runs late whenever jobs exceed it, which is half the time. Some slack has to exist somewhere, and the useful question is where to put it.
| Schedule element | Basis |
|---|---|
| Individual job slot | Median, or slightly above |
| Buffer between jobs | Sized from variability of that job type |
| End-of-day protection | Accumulated uncertainty across the run |
| Emergency capacity | Held back separately, not absorbed into slots |
Putting the slack at the day level rather than padding every slot generally produces more throughput, because unused padding in one slot cannot help a later overrun but shared buffer can.
Where it pays most
The benefit is largest where jobs are scheduled back to back and an overrun cascades - field service, clinics, mobile repair, installation. One bad estimate at nine in the morning affects everyone that day.
It matters less where jobs are independent and queued, since variation averages out across the day. That is a useful screening test before scoping the work.
The data is usually already there
Job start and end times exist in most field service, clinical and dispatch systems. What is often missing is what the job actually involved, because the work description is free text.
Extracting structure from those descriptions is typically the enabling step - the same pattern as in most operational machine learning. The modelling is straightforward once the history says what was done.
Everyone forecasts how many jobs. Almost nobody forecasts how long they will take, and that is what fills the day.