Dispatch scheduling when the day stops going to plan
In short
Building a dispatch schedule takes twenty minutes the night before. Rebuilding it at 11am with a van down and a sick technician is the real work, and the mistake is doing it job by job. Fix the capacity number first, then decide what leaves the day.
1. Recount capacity in hours, not jobs
2. Subtract jobs until booked hours ≤ available hours
3. Ring the customers you are moving — before re-homing anything
4. Re-home survivors: skill, then distance, then window
5. Protect the last job of every run
6. Freeze. Stop replanning.
- Priority rule — move the cheapest job to move:
move cost = commitment penalty + cost of a second visit + how many times this customer has already been moved. - Four jobs never move: a contractual window with a penalty, someone who took a day off work to be there, anything medical, and access that only exists today.
- A mid-day emergency is not an exception to step 1. It is an input to it — it consumes capacity, so run the subtraction again.
- Subtract before you add. Re-homing jobs into a day that no longer has room for them is where dispatchers lose an hour and start every run late.
A broken morning, and what it does to the dispatch schedule
Six engineers. Seven productive hours each after travel and breaks, so 42 job-hours. Twenty-nine jobs booked, 38 job-hours of work. A sensible plan with four hours of slack.
- 07:40 Dev's van will not start. Nine jobs on it, and no spare van until the afternoon. Capacity drops to 35 hours.
- 08:15 Priya calls in sick. Six jobs, mostly the longer installs. Capacity is now 28 hours against 38 booked.
- 09:50 A customer moves a two-hour service to Thursday. Booked work drops to 36.
- 10:20 A different customer rings: can you come after 4pm instead of 11? Same hours, much tighter constraint.
- 11:00 No-heat call from a contract customer with a four-hour response clause. Ninety minutes of work plus half an hour of travel. For anyone doing HVAC dispatch, this is the one that cannot wait until tomorrow.
Booked work is 38 hours. Available is 28. Ten hours have to leave the day, and no amount of clever sequencing changes that number.
Most dispatchers here start at 07:41 by trying to find a home for Dev's nine jobs. That is the wrong first move, because it assumes the day can absorb them. It cannot, and an hour later you are still shuffling.
Fix the capacity number before you touch a job
The first decision is arithmetic, not judgement:
available = people × productive hours each
booked = sum of expected job durations (not job count)
gap = booked − available
Hours, not jobs. Nine jobs off a van might be three hours of work or nine, and counting jobs is how a day that looks recoverable turns out not to be.
Write the gap down. Ten hours. That number is the thing you are now managing, and every decision either closes it or does not. When the 11am emergency lands you do not treat it as a special case: add its two hours to booked work and the gap goes back to ten. The emergency did not break the plan, it changed an input.
If you do not know the gap in hours, you are not rescheduling. You are rearranging.
The priority rule: move the cheapest job to move
Everyone has a priority rule in their head and it is usually "whoever shouted loudest". Here is one you can actually apply, which ranks by what it costs you to move a job rather than by how important the job feels.
move cost = commitment penalty
+ cost of a second visit (travel + labour)
+ goodwill cost (× times already moved)
Sort the day by move cost ascending and remove from the top until the gap closes. In the example above that gets you to ten hours in about five jobs.
The three terms do different work. Commitment penalty is contractual or close to it. Second visit cost is the one people forget: a job where the part is already on the van and the tenant is already home is expensive to move even if nobody promised anything, because you pay for the trip twice. Goodwill cost rises steeply. Moving a customer for the third time costs far more than the first, which is why your worst complaints tend to come from small jobs.
Four categories sit outside the rule and do not move:
- A contractual response window with a financial penalty attached.
- A customer who took unpaid leave to be there.
- Anything medical, including pharmacy deliveries and anything temperature-controlled.
- Access that exists today and not tomorrow — a site shutdown, a tenant away for a fortnight, a road closure window.
Everything else is negotiable, including jobs that feel urgent because the customer was firm on the phone.
Ring the movers before you re-home anybody
This is the step that usually gets done last and should be done third. It saves more time than anything else in the list.
Of five customers you ring to move, one or two will usually make your life easier without being asked. One says Thursday is fine. One says they have decided not to bother. Occasionally someone offers to be home at 7pm and you have found capacity you did not know about.
If you re-home everything first and then ring, you have spent the planning effort once and you will spend it again. Ring first. Then plan once.
Say the real reason. "A van is off the road and an engineer is sick, so I am moving you to Thursday morning" lands better than a vague apology, because it is obviously true and obviously not about them.
Re-home in one order, then stop
Only now do you place the survivors, and the order matters:
- Skill and certification. A non-negotiable filter. Sending someone who cannot legally or competently do the work turns one failed job into two.
- Distance. Among the people who can do it, the nearest one. This is where a map earns its place and a status board misleads you — three people can be "free at 1pm" and two of them 40 minutes away.
- Time window. Fit the commitment last, because by this point you have few enough options that the window usually decides itself.
Then one check that is worth more than the rest of the exercise: look at the last job of every run. The tail is where a bad afternoon shows up. If someone's final job is 25 minutes past their finish time before they have even started, it is not going to happen, and you are better off moving it at 11am with a phone call than at 5pm with an apology.
Then the last decision, which is to stop deciding. Freeze the plan and let it run. Every replan has a cost that appears nowhere: a field worker whose list has changed four times before lunch stops trusting the list, starts ringing the office to confirm each job, and slows down. One re-broadcast per person per hour is a reasonable discipline unless something genuinely cannot wait. Batch the small changes.
And accept the ceiling. You lost a third of your capacity before 08:30, and no scheduling tool recovers that day. The goal from 08:15 onward is to choose which promises to break deliberately, ring those people early, and get everyone else done properly. The bad outcome is not a moved job. It is a job that quietly fails at 4pm because nobody decided anything about it.
There is no trustworthy published figure for a normal reschedule rate, so ignore anyone who quotes you one. Measure your own: changes divided by jobs, tracked weekly. The number itself does not matter, the trend does, and a rising one usually means your job durations are wrong rather than your customers being difficult.
This replanning loop is most of what field service management software is for, whatever the demo leads with. OkPilot handles it by letting you say the decision rather than click it — "Priya is off, move her installs to Thursday and tell the customers" — and showing you the resulting plan to approve before anything reaches a field worker or a customer.
See OkPilot running your own operation
A live walkthrough with a real person, configured to your jobs on the call. About ten minutes. Setup takes around 48 hours.