Scheduling

How to estimate job duration from your own records, with percentiles instead of guesses

Most duration estimates are one number someone picked years ago. Your own records can do better in an afternoon: bucket the jobs, read two percentiles, and let the gap between them set the buffer.

Same six stops, two ways to book them● live sketch
- - Phone order— Map orderThis sketch: less road

To estimate job duration, pull the arrived-to-done times for each job type from your last few months of records, use the median as the planned length, and use the gap between the median and the 80th percentile as the buffer. One number per job type, checked every quarter, beats one number for everything.

The duration on a job is the number every later slot depends on. If a 90-minute tune-up is planned at 60, the next customer's window is already wrong before the tech starts the truck. Job duration estimates covers the definition. This note is about the method.

Step 1: pull the right records

You need, for each finished job:

  • the job type (or the closest thing you have to one),
  • the time the tech arrived,
  • the time the job was marked done.

Arrived-to-done is time on site. Leave the drive out; it belongs to the gap between jobs, and mixing it in makes every estimate depend on where the job happened to be. Three months is usually enough for common job types. Use a year for seasonal ones.

Throw out obvious junk: jobs marked done hours after the tech left, zero-minute jobs, and visits that were really two jobs logged as one. Don't throw out jobs just because they were long. The long ones are the point.

Step 2: bucket by job type

A single average across all jobs is close to useless. A drain clear and a water heater swap average to a number that fits neither.

Group jobs into buckets that behave alike on site. Start with the job types you already sell, then split any bucket where the times clearly cluster in two places. Common splits:

  • New install versus replacement.
  • Diagnostic versus known repair.
  • Residential versus light commercial.
  • First visit versus return visit.

Stop splitting when a bucket has fewer than about 20 jobs. Below that, a couple of odd visits move the numbers too much. Merge small buckets with their nearest neighbour.

Step 3: read two percentiles, not the average

Job times are lopsided. Most jobs land near a typical length, and a tail runs long: the seized fitting, the extra unit, the customer with questions. That tail drags the average up, but it doesn't describe a normal visit.

So read two numbers per bucket:

  • The median (50th percentile). Half the jobs finish faster, half slower. This is the planned length.
  • The 80th percentile. Four in five jobs finish by then. The gap between this and the median is the room you need behind the job.
Illustrative: 40 furnace tune-ups from one quarter, minutes on site, numbers invented
Average (pulled up by a few long jobs)74 min
Median, P50: planned length65 min
80th percentile, P8088 min
Buffer: P80 − P5023 min
The old flat estimate60 min

In this example the old estimate of 60 minutes is short of the median, so more than half of tune-ups run over plan. Every one of those overruns lands on the next job's arrival.

How to get the percentiles: sort the bucket's times from shortest to longest. With n jobs, the median is the value at position 0.5 × n and P80 is at position 0.8 × n. A spreadsheet's PERCENTILE function does the same.

Step 4: put the buffer in the right place

The buffer is the gap between P50 and P80, but where it goes matters as much as its size.

  • Padding every job to P80 feels safe and costs you capacity: four jobs a day each padded by 23 minutes is 92 minutes of the day reserved for overruns that mostly don't happen. Techs finish early, sit in idle time, and the board looks full while it isn't.
  • Planning every job at P50 with no buffer fills the day and makes every overrun someone else's late arrival.
  • Planning at P50 and keeping a shared buffer later in the day usually works better. Overruns partly cancel: one job runs long, another runs short. A shared block absorbs the net, not the sum. Buffer time covers how to size and place it.

The arithmetic for why shared buffers beat per-job padding is the same as for arrival windows. Spreads add along the day, but not linearly, so the buffer you need for four jobs is less than four single-job buffers. Arrival window math works through it with a formula.

Step 5: let the spread set the window

The spread between P50 and P80 is also the input to your arrival windows. A bucket with a tight spread (a standard swap that always takes about the same time) can sit in front of a narrow window. A bucket with a wide spread (diagnostics, old systems) should sit at the end of the day or in front of a wider window.

That gives you a simple rule for ordering a day: put tight-spread jobs first and wide-spread jobs last. The uncertainty then lands where it affects the fewest later customers.

Step 6: recheck every quarter

Durations drift. New equipment lines, a new tech, a change in what's included in a tune-up, a season with older systems. Re-run the buckets every quarter and compare:

  • Did the median move by more than about 10%? Update the planned length, and check whether your on-time arrival rate moved with it.
  • Did the P80 gap widen? Look for a cause before widening the buffer. A wider gap often means one tech, one job type or one equipment model is behaving differently.

Also watch per-tech differences, carefully. A new tech will run longer for a while. Planning their jobs at their own median is fairer to them and to their customers than holding them to a veteran's number.

The mid-job signal

Records tell you how long jobs usually take. They can't tell you that today's job is the long one. The best signal for that comes from the tech, halfway through. CrewLink's tech app asks around the midpoint whether the job is on track or needs 15, 30 or 60 more minutes, and an extension re-flows the rest of that tech's day right away. CrewLink also records time on site when a job is marked done, and future bookings use it. Whatever tools you use, the principle holds: ask early, while there is still room to move the next job.

What to take away

  • Use arrived-to-done times, by job type, from the last few months. Leave the drive out.
  • Plan at the median (P50). Use P80 − P50 as the size of the room you need behind the job.
  • Share the buffer across the day instead of padding every job to P80.
  • Put tight-spread jobs early and wide-spread jobs late.
  • Re-run the numbers every quarter, and find the cause before widening a buffer.

Common questions

How do I estimate job duration with no history?

Start with your techs' best estimate per job type and log arrived-to-done times from day one. After 20 or so jobs in a bucket, replace the guess with the median. The guess is a placeholder, not a standard.

Should I use the average or the median job time?

The median. Job times have a long tail of slow visits that pulls the average up. The median describes a normal job; the gap to the 80th percentile tells you how much room to leave behind it.

How many job types should I track?

As many as behave differently on site, with at least about 20 jobs in each over your review period. Most companies end up with a handful to a few dozen buckets. Merge buckets that are too small to trust.

Does drive time belong in the job duration?

No. Keep time on site and drive separate. Drive depends on where the previous job was and the hour, so it should be computed per booking. Mixing it into the duration makes every estimate wrong for jobs that are closer or farther than average.

See your own day on it

CrewLink offers only the times a crew can actually reach, from where the truck will be. Plug in your trucks, services and city and see how your week would run, then walk through it with your own territory. CrewLink is in early access.

Set up your CrewLinkIndependent contractor? Join CrewConnect