Your Time Estimates Are Optimistic — And Everything Else Is Wrong
Your Time Estimates Are Optimistic, and Everything Else Is Wrong
The 14-truck residential HVAC shop P&L I pulled in 2019 looked fine at first pass. Revenue was up. The owner was busy. He had a good reputation in his market and a crew he'd built over a decade. What he didn't have was accurate job costing, and the reason started with his time estimates.
He had been losing money on every install for three years. He didn't know it. The loss wasn't on a line item. It was distributed invisibly across labor variance and overhead absorption, in amounts too small per ticket to read as an alarm and too consistent across every ticket to look like outliers. When I showed him the analysis, his first question was about material costs. His second was about his supplier relationship. It took forty minutes to get to the actual source: his install estimates were built on best-case hours, and everything downstream had been inheriting that error since at least 2016.
The Error That Multiplies Every Other Error
A ductless mini-split install gets estimated at 4 hours. That estimate drives the labor cost on the job — 4 hours times the technician's burdened rate. It drives the overhead allocation — 4 hours times your overhead per billable hour. It drives the truck cost per job — 4 hours of vehicle operating cost at your real loaded rate, if you've calculated that. Most shops borrow a national average instead, which is a different problem. And it drives the gross margin projection on that ticket before anyone has touched a line set.
The job runs 6.5 hours.
The invoice goes out at the quoted price. The technician clocks 6.5 hours, which shows up in payroll. The overhead ran 6.5 hours of shop capacity. The truck ran 6.5 hours of fuel, wear, and insurance. But the job was priced for 4. The margin projected at estimate was, say, 34%. The margin at close is closer to 14%, and even that requires you to be running your own truck cost per billable hour rather than borrowing from a trade association.
The error doesn't announce itself. It distributes. And on the next similar job, the estimating template still says 4 hours.
That's how a shop runs busy for three years, invoices consistently, and bleeds money on installs until someone pulls the right report.
Where the Optimism Gets Built In
Time estimates in residential HVAC shops almost always trace back to the owner, the senior tech, or a flat-rate pricing book. All three share the same flaw: they assume clean conditions, and field conditions are not clean.
I ran service calls out of a Sprinter for six years, four at Bayview Mechanical in Sunnyvale and two at Caldera. I know what the textbook sequence for a rooftop changeout looks like. I also know what it looks like when the disconnects are corroded. When the crane window is 45 minutes late. When the Manual D on record doesn't match the duct configuration in the ceiling. None of those conditions are unusual. All of them add time. None appear in the estimate template.
The flat-rate pricing books compound this. Those books produce predictable revenue per ticket and unpredictable margin per ticket, which is the opposite of what a small shop needs. The labor units were calibrated somewhere else, by someone else, under conditions that may not resemble your market or your crew. When a shop imports that book without local validation, it's importing someone else's optimism about how long things take. And it has usually paid a licensing fee for the privilege.
The reason none of this gets corrected is simple. After job close, the crew is already staged for tomorrow. No one compares the clocked hours to the estimate, and no one updates the template. The loop stays open because no one owns it and no system requires it.
The Audit You've Never Run
When I come into an engagement, one of the first things I ask for is two numbers per job over the last 90 days: what the job was priced on and what the timecards actually recorded. They are almost never the same.
On install jobs, actual hours exceed estimated hours in the majority of engagements I've audited. I've seen the gap run as tight as 12% and as wide as 55%. I have not yet run this for a shop where actuals came in under estimate on average across a full quarter of installs.
Most shops assume the data isn't there to run this comparison. It usually is. Field service software logs clock-in and clock-out by job; the estimated hours live in the quote record. The comparison is possible. It just requires someone to build the report, and building management reports requires believing the output will be actionable.
I have watched shop owners pay for software they use for two things: open invoices and revenue by tech. Both useful. Neither tells you whether your time estimates are accurate. That data is in the same system.
Your Best Tech's Hours Are the Wrong Benchmark
Even shops that do some version of time-tracking often make a specific calibration error: they build estimates around senior tech performance. The owner ran the job once in five hours. That becomes the template.
The problem is that the owner is not running most of the jobs.
"Hire on personality, train on skill" gets repeated constantly. For service technicians in shops under 50 trucks, it is wrong. Training cost is real. Failure rate is high. A second-year on their third solo install of a given type might run 7.5 to 8 hours on a job a seasoned tech runs in 5. Not negligence. Just repetitions they haven't accumulated yet.
The price is the same. The margin is not. In shops I've worked with, the labor cost on the same quoted ticket varies significantly depending on who runs it, and the estimate was almost never built around who's actually in the truck.
The BLS Occupational Employment and Wage Statistics data makes the staffing picture more specific than the trade press usually does. The shortage is concentrated at the journeyman level and worst in metros under 250,000 population. In those markets, shops that can't find experienced techs are running installs with less-seasoned crews. If the estimate assumed a journeyman and a second-year apprentice is in the truck, the estimate is wrong before the truck leaves the yard.
Most shops know their crew is less experienced than they'd like. They don't adjust the estimate to reflect it.
A Job She Remembers
In my second year at Caldera, we were running commercial split changeouts regularly. Three-ton to five-ton rooftop units, mostly light commercial. The estimate template assumed clean conditions and called for 6 hours on a standard three-ton swap.
One job that fall ran to 11.5 hours. The disconnect box was original to the building, mid-1980s, corroded, and required full replacement before the inspector would sign off. The crane was late. The rooftop access hatch was undersized for the new unit's curb footprint. The as-built duct configuration required a custom transition nobody had specced. None of this was unusual for the building stock we were working. All of it was absent from the template.
The invoice went out at the quoted price. The job ate 5.5 hours of unbilled labor plus the disconnect material. Nobody updated the template. The next similar job was priced at 6 hours.
What I remember most clearly isn't the paperwork. By hour 8, I was moving faster than I should have been. Skipping confirmation steps on the electrical because we needed to get the system commissioned before the building manager left at 5. That's how I burned my left forearm on a reversing valve. The scar is still there. Speed pressure and accuracy are not compatible when the estimate is two and a half hours behind and the job isn't done.
The tech absorbs the overage, works faster, makes the errors that optimistic estimates tend to produce. The template doesn't change.
What to Do Monday Morning
Start with a log. A spreadsheet, a shared Google Sheet, whatever you have. Four fields for every completed install: job type, crew composition, estimated hours, actual clocked hours, and a one-line note on any complication that added time.
Run it for 90 days across your install tickets. At the end, you will have your real average hours per job type, broken down by who actually ran the jobs. Not best-case hours. Not senior-tech hours. Crew average, weighted by who is in your trucks.
That number feeds directly into your cost-of-doing-business calculation. Your overhead per billable hour needs a denominator: total billable hours. Your truck cost per job needs a duration. Your labor cost per job needs actual hours. When those inputs are wrong, every ratio downstream is wrong, and you won't find the error until you pull a P&L that looks like the one I pulled in 2019.
There is also a cash conversion angle. Jobs that run significantly over estimate tend to create invoicing delays. The tech is behind schedule, the paperwork gets rushed or deferred, the invoice goes out a day late. Across a high-volume season, that slippage accumulates in days sales outstanding. Shops that track time actuals tend to tighten their invoicing cycle as a side effect, because they start treating job close as a moment that triggers billing rather than a moment that just ends the work.
Pull the last 30 completed install jobs from whatever system you're using. Put estimated hours next to clocked hours. Calculate the variance on each, then the average across all 30. If the average is under 10%, either your estimates are unusually accurate or your timekeeping is unusually loose. Figure out which. If the average is 20% or more, which is what I typically see, you now have a concrete number to bring into your next pricing conversation. Not a suspicion. A number.
FAQ
Why do time estimates run long so consistently — isn't that just bad planning?
The template was built on someone's best performance under clean conditions and never tested against real job data. Corroded disconnects, late equipment, duct mismatches, access problems — these are variable by nature and almost never factored in at the estimate stage. The result isn't negligence. It's a starting assumption that was never corrected after the fact.
What if my field service software doesn't track estimated hours versus actual hours?
Clock-in and clock-out by job live in most platforms that track technician time. Estimated hours usually live in the quote record. If both are in the same system, the comparison is possible; it may require exporting to a spreadsheet and doing it manually. If the software genuinely doesn't capture both, that's a visibility gap worth knowing about.
Should I adjust my prices immediately once I find the variance?
Yes, but it can be phased. Start by correcting estimates on job types where the variance is largest. The goal is for the quoted price to reflect what the job actually costs to complete, not what it would cost if everything went perfectly.
What should I do when a job runs over estimate on a fixed-price quote?
You absorb it and finish the job. Then: document the overage, identify the cause, and decide whether it's a one-time anomaly or a systematic condition. Most shops skip that step. One-time anomalies become repeating losses because nobody updated the template.
My senior tech estimates faster and runs jobs faster — should I keep using his times?
Only if he's running every job. For pricing, you need average hours across whoever actually runs that job type in your shop, weighted by how often each crew composition appears. Price for the crew you have.
How does this connect to my overall cost-of-doing-business calculation?
Your CODB allocates overhead across billable hours. If the hours on a given job type are understated by 20%, your overhead allocation per job is understated by the same amount and your projected gross margin is overstated by the same amount. The time estimate isn't one input among several. It sets the scale for every cost figure that follows it.
Enjoyed this article?
Get articles like this in your inbox every Monday. Free, no spam.
