The Haul Got Longer
19 October 2026
Ninety-five dollars a load. Call the job Marsh Creek; that was its number in March, and in March it was a good number. The excavation contractor had roughly 900 loads of spoil to move off the site, the farm taking fill sat 4.2 miles down Route 9, and at a 40-minute cycle each of the two trucks you put on it turned ten loads a day. You penciled it before you signed: $950 a truck-day against the driver, the diesel, and the iron, with a margin you could say out loud.
In week seven the farmer quit taking fill. His low spot was a low spot no longer. Dispatch did what dispatch exists to do, found the next open hole, a reclamation pit 11.3 miles out, and kept the trucks rolling without losing an hour. Nobody called the customer, because the reroute was temporary and the trucks had momentum.
The job ran five more weeks at $95 a load.
A flat rate is a route in disguise
A per-load rate never prices a load. It prices a loop: load out, 4.2 miles, dump, 4.2 miles back, at whatever the road allows. Stretch that loop to 11.3 miles and the cycle runs about 75 minutes. The same truck now turns six loads a day instead of ten.
Billed per load, that's $570 a truck-day where there used to be $950, against the same wages and insurance, plus fourteen more miles of diesel per loop. Revenue per truck-hour drops from roughly $142 to $76. Nothing you sell got cheaper by choice. The thing you were actually selling, truck-hours, got repriced by a farmer's low spot, and the discount went out the gate 60 times a week.
Run it to the end of the job. Two trucks, five weeks, call it $380 of vanished revenue per truck-day, and the gap runs to $19,000. Would a mid-job reprice have recovered all of it? No. Some haulers eat a mile as goodwill, and some customers push back hard. But the fair number was worth a phone call, and the call never got made, because nobody in the office knew there was anything to call about.
The office hears about breakdowns, not about miles
Here's why the five weeks stayed silent. A reroute is an operational decision. It gets made at dispatch, on the radio, in the ten minutes between the farmer's call and the next loaded truck, and it solves dispatch's problem completely: the trucks keep moving. Price is not dispatch's problem. The person who owns the price, the owner who quoted $95 off a legal pad, learns about routes only when a route costs a phone call, and a longer haul doesn't ring any phone.
The drivers won't raise it. They're paid by the hour, and an hourly driver drives wherever the radio says. Flip that for a second: if your drivers were on load pay, you'd have heard about the extra seven miles before lunch, loudly. Your billing is on load pay. It just can't talk.
The customer won't raise it either. His invoice shows the same loads at the same rate, the spoil is leaving his site on schedule, and he may not know the farm closed at all. And your billing clerk sees tickets that clear perfectly: right customer, right job, rate matches the quote, count matches the trucks. The month ties out to the penny. Every control you have checks the count and the rate, and the count and the rate are both fine.
The tickets wrote it down anyway
Now open the folder, because the paper has been telling the truth the whole time.
Every one of those tickets has a destination blank, and starting the exact Tuesday the farm closed, the drivers stopped writing "Hanley farm" and started writing "R9 pit." In ink, load after load, 60 times a week, your own paperwork recorded the event that should have repriced the job. So did the quote: "spoil hauled to Hanley farm" is sitting right there in its description line, which makes the route a term of the deal, not trivia.
Two documents in your own office disagreed about where the trucks were going, for five weeks, and nothing ever put them in the same room. No billing office I'd bet on prices off the destination blank, so nothing reads it. It's the most informative line on the ticket and the least looked at.
flowchart TD A["Quote: $95 a load, fill to Hanley farm, 4.2 mi"] --> B["Week 7: Hanley stops taking fill"] B --> C["Dispatch reroutes to Route 9 pit, 11.3 mi"] C --> D["Tickets now say R9 pit, in ink"] D -- "nothing reads the blank" --> E["Billed at $95 for five more weeks"] D -- "destination checked against the rate" --> F["Flagged in week seven, repriced once"]
A reroute is a price event
The position worth arguing about: when the destination on the ticket stops matching the destination behind the rate, the load shouldn't bill at the quoted number at all. It should sit flagged until a human prices it, even if that costs a day.
The objections are real. You'd hold up invoices over a half-mile detour. Dispatch reroutes for an afternoon constantly, and you can't reopen a signed price every time the county closes a bridge. Fine: set a tolerance in miles, and an afternoon isn't five weeks. But notice what the current policy is, because it is a policy: every route change, of any size, for any duration, gets absorbed silently, and the absorbing was decided by nobody. On Marsh Creek that policy handed the customer a five-figure favor no one chose to give.
It cuts the other way too, and saying so is what makes the call easier to make. When the dump gets closer mid-job, the customer deserves the same phone call, with the rate moving down. An operator who makes both calls can defend either one.
Put the route in the rate
Fix the next quote with one sentence: rate assumes disposal at Hanley farm, 4.2 miles, reroutes repriced at a stated figure per added mile. Now the reprice is a clause you invoke instead of a negotiation you dread.
Then make the comparison happen while the job is still running. This is the slice Termco works in: tickets digitized the day they come in off the trucks, as written, destination blanks included; the quoted route held as a billing rule, so a ticket bound anywhere else gets flagged that week, while "temporary" is still one afternoon old; invoice totals assembled from tickets that cleared. Nothing changes in the cab or on the radio. The drivers were already writing it down.
The audit on your end takes one evening. Pull one finished per-load job, read nothing but the destination blanks, and count the loads to each place the paper names. More than one destination means the margin moved mid-job and the rate didn't, and the cycle-time difference times those load counts is the check you never sent yourself. If you want a second reader, send 10-20 sample tickets from a per-load job to hi@termco.ai, and findings come back within 48 hours.
The farm was always going to fill up. Holes do. The question a flat $95 can't answer is what happens after, and your tickets have been answering it in ink all along.
More from the Termco blog.
October 18, 2026
One Customer, Three Scale Houses
Run more than one pit and the price gets set by whichever scale house wrote the ticket. Your customer can see the spread across sites. Your office can't.
Read postOctober 17, 2026
The Button Moved
Rebuild your process around software and you rebuild it again every time the vendor ships. The scale window deserves an interface that never changes.
Read postOctober 16, 2026
Billed Off the Board
A dispatch board records what was supposed to run. When month-end invoices get built from it, the loads the day added are never billed.
Read post