Episode 152 of the Construction Accounting Podcast with George Ghazarian, CPA · 5 min 31 sec · Published 1 June 2026

You won the bid, the client is happy, the job is finished — and the real numbers show a loss. That happens to more contractors than you would think, and it is almost never because they are bad at construction.

It is because the bid ended with a percentage added “just to be safe.” Here is what that fudge factor is hiding and the five-step system that replaces it.

What you’ll learn

  • Why estimating and bidding are two completely different tasks
  • What a flat percentage buffer is actually covering up
  • How to calculate and allocate a real overhead rate
  • Why burdened labor rates beat base wage in every estimate
  • How weekly job costing catches overruns while you can still fix them

Estimating and Bidding Are Two Different Jobs

Most contractors treat estimating and bidding as the same activity. They are not. Estimating is figuring out what the job actually costs. Bidding is deciding what you charge the client. Blend them together and you end up hoping one extra percentage covers overhead, profit, mistakes, unknowns, labor overruns and material increases all at once. One number cannot reliably do all of that. That is how a contractor stays busy all year and still feels broke.

A $180,000 Fit-Out That Lost $6,200

A contractor bids a commercial interior fit-out at around $180,000. He prices the materials, talks to his subs, estimates labor, then adds a 12 percent buffer at the end. The job runs smoothly. The client is happy. Everything looks fine.

Then the actuals land. Labor came in $11,400 over. One subcontractor came in $4,800 higher than expected. Materials added another $2,100 mid-project. Overhead was never allocated at all. Final result: a $6,200 loss on a job he thought made money. That is the danger of the fudge factor. It gives you a false sense of profit right up until the numbers close.

Overhead Is the Number Nobody Calculated

The biggest thing contractors miss is not materials and it is not labor. It is overhead. Office staff, insurance, vehicles, software, phones, bookkeeping, project manager salaries, admin payroll, owner salary — everything it takes to keep the doors open. For most contractors that is a 15 to 25 percent cost sitting completely unallocated.

Most have never calculated their actual overhead percentage, so they throw 10 or 15 percent onto a bid and hope. If your true overhead is 22 percent and you are only adding 12 percent, you are underwater before the job even starts. That is why revenue by itself means nothing. I have seen contractors doing $3 million a year with almost no real profit, purely because the estimating system was broken.

Your $35 Employee Does Not Cost $35

The second issue is labor. A lot of contractors estimate labor using the hourly wage only, which is a large mistake. A $35 an hour employee does not cost you $35 an hour. Add payroll taxes, workers’ comp, benefits, training, downtime and supervision, and that employee may actually cost $45 to $50 an hour.

Bid labor at wage instead of true labor burden and every labor-heavy project is underpriced before the first crew shows up. Most contractors never realize it, because the gap only appears after the job closes.

Job Costing After the Job Is Too Late

The third issue is the absence of real-time job costing. Most contractors look at job profitability once the project is complete. You cannot fix a bad job at 100 percent completion. You need to know halfway through whether labor is running hot or materials are blowing the budget. Weekly tracking is how construction businesses protect margin. End-of-job surprises are how they lose it.

The Five-Step Estimating System

  1. Build a real cost database from your actual job history
  2. Calculate your overhead rate annually and allocate it in every bid
  3. Use burdened labor rates, not base wage
  4. Implement weekly job costing so you catch overruns early
  5. Set a specific net profit target and build it into every bid

Profit should not be whatever is left over. That is not a business plan, that is gambling.

What This Looked Like for a $2.1 Million Roofer

We worked with a roofing contractor doing about $2.1 million in revenue. He thought he was making around 8 percent net profit. When we cleaned up the numbers, his real profit was closer to 1.7 percent. The problem was never sales. Overhead was not allocated correctly, labor burden was wrong, and every bid carried a flat 15 percent buffer.

We rebuilt the estimating system, implemented job costing and corrected the labor rates. About 18 months later he was running around an 11 percent net margin. Same business, far more profit, because he stopped guessing.

The fudge factor feels safe. In practice it hides broken estimating, missing overhead, incorrect labor rates and weak job costing. The contractors building real wealth in construction know their numbers precisely, not approximately. That is what lets you scale profitably, build cash flow, and stop working harder just to feel broke at the end of the year.

The short version

  • Estimating is what the job costs; bidding is what you charge the client
  • An unallocated overhead rate of 15 to 25 percent will sink an otherwise clean bid
  • A $35 an hour employee may actually cost $45 to $50 an hour burdened
  • Recalculate your overhead rate every year and put it into every single bid
  • Track job costs weekly so overruns surface while the job can still be fixed
  • Set a net profit target before the bid goes out instead of taking what is left

Want this applied to your numbers?

We are a CPA firm built for construction contractors. If you want to know what this looks like against your actual profit, salary and job mix, we will run it with you.

Book a free consult

Related episodes

Browse the full Construction Accounting Podcast archive

This episode is general information about how these rules work, not advice for your situation. Tax law changes and the right answer depends on your entity, your income and your circumstances. Talk to a CPA before acting on it.