How to Cost Travel and Drive Time Honestly
Why this matters
Drive time is the largest cost in a service shop that nobody puts on a job. It is paid, it is real, and because it happens between jobs it lands in a gap where no job record is open. The usual result is that it disappears into overhead, gets recovered through a blended hourly rate, and then quietly makes every close-in job subsidize every far one. A shop can run that way for years and conclude that its far-side territory is fine, because the number that would have told it otherwise was never computed.
The second reason to fix this is diagnostic. Travel hours not separated from on-site hours land inside labor variance, where they read as slow crews. A crew that made two trips because a part was missing looks identical, in a total-hours number, to a crew that worked slowly all day.
This article is about getting drive time into the cost correctly. Reducing it is a different job; see the references.
Step 1: Define the clock before you measure anything
Write one definition and use it everywhere. A workable default: travel time starts when the wheels roll and stops when the vehicle is parked at the destination. Loading the truck, checking in, and walking gear from the parking spot to the work are on-site non-productive time, not travel; they scale with the job, not with the distance.
That split matters because the two respond to different fixes. Travel comes down with routing and territory decisions, loading and staging with truck stock and setup practice. Blend them and neither is fixable, because you cannot tell which one grew.
Separately from how you cost it, know how you must pay it. Under the federal Fair Labor Standards Act, ordinary home-to-work commuting is not compensable worktime (29 CFR 785.35), while travel from one job site to another during the workday is worktime (29 CFR 785.38). Some states are more generous than the federal floor, particularly for time in an employer-provided vehicle, so confirm your own state rule before setting a policy. Costing and compensability are different questions and you need both answers: unpaid commute time is still not free, because it constrains the working day.
Step 2: Measure before you allocate
For two to four weeks, capture per leg: origin, destination, and wheels-rolling minutes. A vehicle tracking system gives it to you automatically. Without one, a two-line entry per leg on the day sheet is enough, and it is worth the friction for a month.
Do not start from an assumption about average drive time. Drive time is right-skewed: most legs are short and a few are long, so the mean sits above the typical leg and the median sits below the days that hurt. You want the actual distribution, because the tail is where the money is.
While you are at it, count the legs that should not have happened: supply runs, return trips for a forgotten part, second mobilizations. Tag them separately from the first time you record them. Those are not the cost of doing business in a territory, they are a recoverable process cost, and blending them into a travel factor makes them permanent.
Step 3: Pick an allocation method and commit
Once you have a day's legs and a day's stops, you have to decide which stop carries which minutes. Three methods, and they are not interchangeable:
| Method | How it works | Best for | Distorts |
|---|---|---|---|
| Equal split | Total travel divided by stop count | Days where stops are geographically similar | Charges the close stop and the far stop the same |
| Proportional to on-site hours | Travel apportioned by each stop's share of on-site time | A per-productive-hour burden rate | Charges long jobs for distance they did not create |
| Inbound leg plus shared return | Each stop carries the leg that arrived at it, plus an equal share of the return to the shop | Job costing and territory decisions | Slightly penalizes whichever stop happens to be first |
Default to inbound leg plus shared return for job costing. It is causal: the stop that was far away carries the minutes that being far away cost. That is the property you need if you ever want to answer whether the far side of your territory pays.
Proportional-to-on-site is the wrong method for costing a job and the right method for building a burden rate. It charges travel to job size, and job size has nothing to do with distance. Use it only when you are deliberately spreading travel across all productive hours as an overhead recovery, and know that when you do, you have given up the ability to see the far-territory question.
Step 4: Handle the shared trip explicitly
A trip that serves two stops in the same building or the same block is not two trips. Charge the inbound leg once, to the first stop, and give the second stop only the short leg between them. Anything else double-charges travel that happened once and makes clustered work look unprofitable, which is backwards. If your allocation shows clustered work costing the same per stop as scattered work, the method is not causal and you will never see the value of routing in your own numbers.
Step 5: Decide what the customer sees, separately
A trip charge, a zone-based minimum, mileage past a boundary, or travel folded silently into the rate are all defensible presentations. What is not defensible is choosing the presentation first and costing to match it, which is how a shop ends up with a flat trip charge set years ago that no longer covers a median inbound leg.
Cost it causally, then decide what to show. If you fold travel into the rate, keep the causal allocation internally anyway, because the day a customer 40 minutes out asks for a standing schedule you will need the real number to answer.
Step 6: Return trips and supply runs are travel, not labor
Every unplanned trip gets logged as travel with a cause tag: missing part, missing tool, second mobilization, customer not present. Not as labor hours.
Two payoffs. Labor variance stops absorbing a cost that has nothing to do with how the crew worked, so your productive-hour input stays clean. And the tag counts become a work list: a shop that finds most unplanned trips tagged "missing part" has a truck stock problem with a measured size, not a vague sense that people run to the supply house too much.
Step 7: Put a per-round-trip travel line in the estimate
The estimate does not know the day's route, so it cannot use the day's allocation. What it can carry is a travel input per round trip, derived from the median causal allocation for that service zone over a quarter, and multiplied by the number of mobilizations the job needs.
Re-derive it when the service area changes, not on the calendar. Territory changes invalidate a travel line immediately, and a shop that only revisits this annually will bid a year of jobs on a radius it no longer has.
A worked day, allocated three ways
One tech, one vehicle. Paid day 8.6 hours. Six stops. On-site hours by stop: A 2.6, B 1.4, C 0.9, D 0.7, E 0.5, F 0.4, totaling 6.5 hours on site.
Legs, wheels-rolling: shop to A 0.55, A to B 0.20, B to C 0.15, C to D 0.30, D to E 0.25, E to F 0.20, F to shop 0.45. Total travel 2.10 hours.
Sanity check the day. 6.5 on-site plus 2.1 travel is 8.6 hours, which matches the paid day, so nothing is unaccounted for. Travel is 2.1 of 8.6 paid hours, about 24 percent of the paid day, and 2.1 against 6.5 on-site hours is a ratio of 0.32 travel hours per on-site hour.
Equal split. 2.10 divided by 6 stops is 0.35 hours each. Stop A carries 0.35, stop F carries 0.35.
Proportional to on-site hours. Stop A gets 2.6 divided by 6.5, times 2.10, which is 0.84 hours. Stop F gets 0.4 divided by 6.5, times 2.10, which is 0.13 hours.
Inbound leg plus shared return. The return leg of 0.45 splits six ways at 0.075 each. Stop A carries its 0.55 inbound leg plus 0.075, so 0.63 hours. Stop F carries its 0.20 inbound leg plus 0.075, so 0.28 hours.
Read the spread. Stop A is charged 0.35, 0.84, or 0.63 hours depending on method, a range of nearly two and a half times across the same real day. Stop F is charged 0.35, 0.13, or 0.28. This is why the method is chosen once and written down: two people using different defaults reach opposite conclusions about the same job from the same data, and both are arithmetically correct.
Which is right here, and why. Stop A was the far one, at a 0.55 hour inbound leg against a 0.20 hour median for the other five inbound legs. The causal method charges it 0.63, roughly 2.3 times what stop F carries, which reflects what happened. The proportional method charges A 0.84 not because it was far but because it was long, and would have charged that much if A had been next door to the shop. The equal split charges A and F identically, erasing the only fact worth knowing about this day.
What it feeds. Run the causal allocation across a quarter of days and the per-stop values stop being one day's accident and start forming zones. On this day alone the five close stops land between 0.23 and 0.38 hours while the far stop lands at 0.63, which is already the shape: roughly 0.3 hours per round trip close in, roughly double that on the far side. Those two zone medians are what go in the estimate's travel line, multiplied by mobilizations. Not the 0.35 equal-split day average, which would be light on every far job and heavy on every close one, and not the 2.1 hour daily total divided by anything.
The double-count check. If this shop also recovers travel inside its burdened hourly rate, adding a 0.4 hour travel line to the estimate charges the customer for the same drive twice. Pick one path: either travel is a named line in the model and is stripped out of the overhead recovery, or it is inside the rate and the model carries no travel line. Take one closed job and confirm each travel hour appears exactly once.
What changes the answer
Multi-tech crews. Travel is per person, not per trip. Two techs in one vehicle for a 0.5 hour leg is 1.0 crew-hours of paid travel, and a model stated in crew-hours must reflect that. Shops that state travel per trip and staff jobs with two people understate travel by exactly the crew size.
A dedicated day-long job. One round trip against a full day of on-site hours makes travel a small ratio, and with a single stop there is nothing to allocate. This is the case where a travel factor derived from short-call days will be much too high if applied blindly.
Emergency and after-hours calls. These are usually single-stop round trips with no other stops to share the return, so cost them at the full round trip. A travel factor built from routed weekdays will understate them substantially, which is one of the real reasons after-hours work needs its own pricing.
A territory decision rather than a job decision. For the question "should we keep serving the far zone," allocate causally and also count the opportunity cost: the on-site hours that could have been sold in the time spent driving. That second number is often larger than the travel cost itself and it does not appear in any allocation method.
How to verify you got this right
- Reconcile a full day to the paid hours. On-site plus travel should equal the paid day within a few minutes. A persistent gap means a category is missing, usually loading and staging that belongs in on-site non-productive.
- Check that a clustered day costs less per stop than a scattered day. If it does not, your allocation is not causal, and every routing improvement you make will be invisible in your own numbers.
- Confirm travel appears once. Trace one job's travel from the day sheet through the allocation into the estimate model and the burdened rate. Two appearances is the most common and most expensive error in this whole procedure.
- Watch the unplanned-trip tags month over month. If the count is flat while your travel factor rises, the territory grew. If the factor is flat while the tag count rises, you have a truck stock or scheduling problem, and raising the travel factor would bury it.
References
- U.S. Department of Labor, Fair Labor Standards Act travel time rules (29 CFR 785.35 through 785.39)
- Trade-standard practice for job cost allocation of indirect field time
- See related: Minimizing Drive Time Without Software, How to Route a Day's Jobs to Cut Drive Time, Tracking Cost Per Mile Across a Mixed Fleet, How to Build an Estimate From a Cost Model