All posts

How to Estimate Labor Hours for a Job Without Guessing

9 min read

The short answer: Estimate labor hours by multiplying the quantity of work by a production rate you measured on your own past jobs, then adding non-productive time for setup, travel, and cleanup. The formula is Estimated hours = quantity ÷ production rate, + fixed time. The part almost everyone skips is the feedback loop: unless you compare the estimate to the hours your crew actually worked, the next estimate is the same guess with more confidence. CRMb records the real punched hours against each job, so every job you finish makes your next estimate sharper.

Labor hours drive the price, the schedule, and the margin. Get them wrong and everything downstream is wrong with them — you underbid, you overpromise the start date, and you eat the difference. This guide covers how to build an estimate you can defend, and how to close the loop so the estimate improves instead of ossifying.


Why gut-feel estimates drift

Experienced estimators are good at recalling how long a job felt. They are bad at recalling the hour it actually consumed, because memory edits out the parts that were not the work: the truck loading, the second supply-house run, the twenty minutes explaining the change to the homeowner, the punch list.

Three failure patterns account for most of the drift:

  • Estimating the task, not the day. You price four hours of installation and forget the ninety minutes of drive, load, and cleanup that surround it.
  • Assuming a good crew day. The estimate quietly reflects your best two people on a dry morning, not the crew you will actually assign in August.
  • No correction signal. Nobody ever compares estimate to actual, so an error of 20% repeats on every job of that type for years.

The fix is not more experience. It is a production rate you measured yourself.

Step 1: build a production rate from your own history

A production rate is how much work one worker completes in one hour. Not the manufacturer's number, not the industry table — yours, on your jobs, with your people and your equipment.

To build one, take a job type you do often, pull the finished jobs, and divide:

Production rate = quantity completed ÷ labor hours worked

An example from interior painting. Four past jobs, with the wall area and the hours the crew actually punched:

JobSquare feetCrew hoursSq ft per hour
Maple St. repaint2,40021.5112
Oakwood unit 31,85018.0103
Riverside duplex3,60030.5118
Carter kitchen + hall9009.0100
Average8,75079.0111

Your production rate is about 111 square feet per labor hour. That number is now worth more than any published table, because it already contains your crew's pace, your prep standard, and your equipment.

Build a rate for each job type you repeat — square feet painted, linear feet of fence, fixtures installed, units cleaned, tons of material moved. Five or six rates cover most of the work of most service businesses.

Step 2: convert the rate into hours for the new job

Divide the new job's quantity by the production rate:

Estimated productive hours = quantity ÷ production rate

A 3,000 square foot repaint at 111 sq ft per hour is 3,000 ÷ 111 = 27 hours of productive labor.

That is labor hours, not calendar hours. Three painters produce those 27 hours in roughly a nine-hour day — before you add anything else.

Step 3: add the non-productive time

Productive hours are the work. Non-productive hours are everything that has to happen around the work, and they are paid the same. Add them explicitly instead of hoping they hide inside the rate:

  • Mobilization: loading, driving, unloading, and setting up. Round trip.
  • Supply runs mid-job, which are nearly guaranteed on anything longer than a day.
  • Client interaction: walkthroughs, questions, approvals.
  • Cleanup and demobilization, including disposal.
  • Punch list and callbacks, if your job type reliably generates them.

For the 3,000 sq ft repaint:

ComponentHours
Productive painting27.0
Mobilization (3 crew × 0.75 hr, both ends)4.5
One supply run1.5
Client walkthrough and touch-up list2.0
Final cleanup3.0
Total estimated labor hours38.0

The productive work is 27 hours. The job is 38. Estimating the 27 and pricing it is how a job that looked like 22% margin closes at 4%.

Step 4: apply a crew factor for larger teams

Two people on a job are not twice as fast as one, and six are nowhere near six times as fast. Coordination, shared access to the work face, and waiting on each other all eat into output. A practical rule of thumb, worth calibrating against your own data:

Crew sizeEfficiency factorEffective workers
11.001.00
20.951.90
30.902.70
40.853.40
60.784.68

Use the factor for schedule, not for cost. A three-person crew delivering 38 labor hours does not finish in 38 ÷ 3 = 12.7 hours; it finishes in roughly 38 ÷ 2.70 = 14.1 crew hours, or about two days. You still pay for all 38 labor hours, plus the coordination loss — which is why adding people to a late job rarely rescues it.

Step 5: state a range, then commit to a number

Give yourself a contingency band based on how well you know the work. A repeat job type in a familiar building is ±10%. A first-of-its-kind job in an unknown structure is ±30%.

Price the midpoint and schedule the top of the range. Promising the optimistic end of your own estimate is how a profitable job turns into an unhappy customer.

Step 6: close the loop against real hours

This is the step that turns estimating from a habit into a skill. When the job finishes, compare:

Variance = (actual hours − estimated hours) ÷ estimated hours

Estimated 38, actual 44 is a +16% variance. One job is noise. The same sign on five jobs in a row is a broken production rate, and it is telling you exactly how much to correct.

The catch is that the comparison only works if the actual hours are measured, not remembered. Timesheets reconstructed on Friday afternoon are as vague as the estimate you are trying to check.

How CRMb makes the loop close itself

CRMb was built around this feedback loop, because job costing is meaningless without trustworthy hours.

  • Crew hours come from Punch. CRMb shares its data with the Punch time-tracking app, so hours your crew punches against a job flow straight into that job's labor cost. No re-entry, no recall.
  • Reports show margin on real punched hours. Your job margin is computed from measured labor and average-cost materials, so the variance you are reading is real.
  • Materials are costed at average cost. Inventory pulled to a job is costed from actual purchase history, so the labor variance is not contaminated by a materials guess.
  • Quotes and invoices pull from the job. Labor and materials on the finished job carry into the invoice, so what you billed and what it cost sit against each other.
  • Scheduling reflects the estimate. Assign the crew, see capacity, and find out whether the two-day window you promised was ever realistic.

After a season, you are not estimating from feel. You are estimating from your own measured production rates, corrected by every job you finished.

Frequently asked questions

How many past jobs do I need before a production rate is reliable?

Three gives you a usable starting point; five to ten makes it stable. Discard obvious outliers — the job with the flooded basement is not a data point about painting — and recompute as new jobs finish.

Should I use published industry production rates?

As a placeholder for work you have never done, yes. Treat them as a first guess to be replaced. Published rates assume a crew, a site, and a standard of finish that are not yours, and they are frequently optimistic.

Do I estimate in labor hours or crew hours?

Estimate in labor hours (man-hours) for cost, because that is what you pay for. Convert to crew hours with your efficiency factor for scheduling. Confusing the two is the most common estimating error on multi-person jobs.

How do I estimate a job type I have never done?

Break it into components you have done and estimate those, then add a larger contingency — 25% to 30% — for the unknown part. Track it closely, because that job is how you build the rate for the next one.

Should travel time be in the estimate?

Yes. If you pay for it, it belongs in the labor hours. Whether you show it as a separate line to the customer is a pricing decision; excluding it from your internal estimate is just an error.

What variance is acceptable?

Within ±10% is good on familiar work. Consistently over on the same job type means the production rate is wrong. Consistently under means you are leaving money on the table and probably losing bids you should be winning.

Getting started with CRMb

Estimating well is a measurement problem before it is a judgment problem. CRMb gives you the measurement: real punched hours against real jobs, average-cost materials, and margin you can read at the end of every job.

Start a 14-day free trial at crmb.io. Cost your next five jobs from measured hours, and let them tell you what your production rates actually are.

More from the blog