Home / Blog

100% Booked Is Not 100% Utilized

A full calendar and a productive day are not the same thing. Knowing the difference is worth more than any single scheduling feature.

By Carson Cloud, Founder, CrewLink5 min readOperations

Here is the conversation that starts most scheduling projects.

The owner pulls up the board. Every technician, every hour, Monday to Friday — assigned. Nothing open for two weeks. By every measure the company tracks, they are at capacity. The obvious conclusion is that growth requires more trucks.

Then someone asks what revenue per technician looks like compared to last year. It is flat. Sometimes it is down.

Both facts are real. The board is full. The trucks are not producing more. Which means the board is measuring something other than production.

What an appointment block actually contains

When a dispatcher blocks 9:00 to 11:00 for a service call, that block is not two hours of work. It is a container holding several different things:

Scheduling reports see one thing: a two-hour block, assigned. Every component inside it counts equally toward "utilization." A day made of four such blocks reads as eight hours of capacity used, whether the technician spent five hours working or three.

The report is measuring the calendar. Nobody is measuring the technician.

The two numbers, side by side

Booked is how much of the day has something on it. It is a property of the schedule, it is easy to compute, and it is what almost every system shows you by default.

Utilized is how much of the day produced work. It is a property of the technician, it requires job-level timestamps, and almost nobody computes it.

The gap between them is where your capacity is. Not lost, exactly — paid for, and not converted.

The same week, read two ways
Technicians6
Paid field hours240
Hours assigned on the board236
Board utilization98%
Hours driving78
Hours idle between jobs31
Hours on the work127
Productive utilization53%

A company reading the top half of that table concludes it needs a seventh truck. A company reading the bottom half asks a different question first: what would it take to recover twenty of those 109 non-productive hours?

Twenty hours a week is most of an additional technician's output. Without the truck, the insurance, the wage or the ramp-up.

Why the gap appears

Three mechanisms produce almost all of it, and they compound.

Jobs are booked without reference to each other. Three customers call on three separate occasions. Each is offered a time that was open. Nothing in that process considers that job two is thirty minutes north of job one and job three is back near job one. The driving was created at booking, and no amount of dispatch skill removes it afterward.

Durations are uniform when the work is not. If every job is blocked as "two hours" regardless of whether it is a filter change or a system replacement, then roughly half your blocks are too long and half are too short. The long ones become idle time. The short ones make you late, which produces more padding, which produces more idle time.

Padding is invisible. A scheduler unsure about a drive leaves room. That room is real hours on a real truck, and because nothing was ever promised in it, it never appears as a gap anywhere. It just quietly reduces what the day can hold.

The diagnostic question: how often does a truck cross its own path in a day? If the answer is often, the driving was created when those jobs were promised — and the fix belongs in booking, not dispatch. If the answer is rarely and utilization is still low, look at idle time instead: parts, access, customer confirmation.

Recovering the hours

The order matters. Doing these out of sequence wastes effort.

1. Make durations real

Attach honest service times to service types, drawn from what those jobs have actually taken. This is unglamorous and it is the foundation — every downstream calculation depends on it. A scheduling engine fed uniform two-hour blocks cannot produce anything better than uniform two-hour decisions.

2. Put travel in the calendar instead of inside the job

Drive time should be a visible, scheduled quantity between appointments, not something absorbed within them. The moment travel is explicit, two things become obvious that were not before: how much of the day it consumes, and which sequences were never going to work.

3. Compute the drive from where the truck will actually be

Not from the shop, not from a home address, not from a static average. From the previous job's location, at the hour the previous job ends. This is the difference between an estimate and a fact, and it is what allows a window to narrow honestly.

4. Stop offering times the drive cannot support

The structural fix. When a slot is requested, the question should not be "is that block empty" but "can a qualified crew physically reach that address by then, given everything else on their day." Infeasible times never get offered, so there is nothing to recover from later.

5. Then, and only then, optimize the route

Sequencing the jobs you have is real value, but it is the last lever, not the first. It improves an order that was largely determined at booking.

What the recovered time is worth

Be careful here, and do your own arithmetic rather than adopting anyone's headline number — including ours. The honest calculation is specific to you:

(Hours recovered per technician per week) ÷ (Your average job duration, including its share of travel) = additional jobs per technician per week

Run it with your real service durations. A company whose average job is forty-five minutes and a company whose average job is four hours will get very different answers from the same recovered hours, and only one of those answers is yours.

Note also the ceiling. Some trades cap out on arithmetic alone regardless of scheduling quality — if your standard job is three hours and your shift is eight, no engine puts five of them in a day. Scheduling recovers the hours lost to travel and slack. It does not create time.

What to take away

  • A schedule measures assigned time. Payroll measures paid time. Neither measures productive time, which is the one that matters.
  • An appointment block hides travel, setup, waiting and padding — all of which count as "utilized" in standard reporting.
  • The gap is created at booking, when jobs are promised without reference to each other, and it cannot be fixed by dispatch afterwards.
  • Recover it in order: real durations, explicit travel, drive computed from where the truck will be, feasibility at booking, then routing.
  • Recovering hours from existing trucks is almost always cheaper than adding a truck that will inherit the same pattern.

Common questions

Why is my schedule full but revenue flat?

Because a schedule measures assigned time, not productive time. An appointment block contains travel, setup, waiting and the job itself, and most reporting treats the whole block as capacity used. A board that is 100 percent assigned is commonly around half productive once travel and idle time are separated out.

How do I find out how much capacity I actually have?

Measure hands-on job time per technician per day from arrival and departure timestamps, then compare it against paid hours. The difference is your recoverable capacity. Anything else is an estimate built on the same assumptions that produced the problem.

Does adding technicians fix low utilization?

Rarely, and it often makes the ratio worse. If each existing truck is productive half the day, a new truck typically inherits the same pattern — you have added cost proportionally and capacity at a discount. Recover the existing hours first, then hire against demand you can prove.

See your own day on it

CrewLink builds live travel time into availability, so the only slots it offers are ones a crew can physically reach. Walk through it with your own territory and service times — not a demo account.

Book a walkthrough