WHY CONSTRUCTION JOBS LOOK PROFITABLE BUT LOSE MONEY.
A job can look profitable at 60% complete and produce a loss at final billing. It happens constantly in commercial subcontracting and almost always traces back to one of five causes: labor overruns that are not being tracked at phase level, overbilling that creates a false cash cushion, overhead not allocated to the job, change order costs absorbed into base scope, or retainage holdback that skews the apparent margin. None of these show up in a progress report that is not backed by real job costing.
The most dangerous financial position in construction is a job that looks fine. When a job looks bad, people pay attention. When it looks fine, everyone relaxes — and the problem compounds for another 60 days before anyone notices. This page covers the five mechanisms that produce that outcome and how to catch each one before the job closes.
HOW A JOB PRODUCES A LOSS WITHOUT LOOKING LIKE ONE.
Labor Tracked in Lump Sum — Phase Overruns Invisible
When all labor for a project is coded to one "Labor" line, the total looks on budget until it does not. A project 60% complete at 58% of labor budget looks fine — but if underground is 100% spent and above-slab has not started yet, you are heading for a significant overrun that will not surface until the next month's data. Phase-level labor tracking — underground separate from floor 1 separate from floor 2 — shows the overrun in week two instead of week eight. By week two there is still leverage to change the outcome.
Overbilling Creates a False Cash Cushion
A job billed at 65% complete when it is actually 52% complete has $78,000 in overbilling on a $600K contract. That cash is in the bank. It looks like margin. It is not — it is borrowed revenue that will have to be worked off before the final billing. When the job closes at actual completion, the final pay app is smaller than expected, retainage is held, and the "profitable" job produces a cash deficit at closeout. The WIP schedule catches this monthly. Without a WIP, it surfaces as a surprise.
Overhead Not Allocated at the Job Level
Job cost reports that show material, labor, equipment, and subs but not overhead look better than reality. If overhead is 18% of revenue and a $400K job is showing 24% gross margin before overhead, the real margin after overhead allocation is 6%. Most contractors see gross margin at the job level and compare it to net margin targets — not realizing that overhead allocation changes the comparison entirely. Apply your real overhead rate to every job cost report as a line item.
Change Order Costs Absorbed Into Base Scope
A change order scope that gets executed before the change order is approved — or whose costs are coded to the base scope instead of the change order cost code — inflates base scope costs and makes the change order profit invisible at best and unrecoverable at worst. Every change order scope item needs its own cost code from day one, even before approval. Tracking the cost makes the change order value obvious to the GC and makes the recovery visible in the job cost report.
Retainage Holdback Skews Apparent Margin
On a $600K contract with 10% retainage, $60,000 is held until final acceptance. A job that shows $54,000 in apparent profit at 90% billing has $60,000 in retainage outstanding — meaning the actual cash collected is less than the costs incurred. The job is cash-negative until retainage is released. Track retainage as a separate receivable and include it in the cost-to-complete calculation so the true margin picture is visible throughout the project, not just at closeout.
WHAT CATCHES ALL FIVE — BEFORE THE JOB CLOSES.
The monthly cost-to-complete: All five mechanisms are visible in a properly built monthly cost-to-complete report. Labor by phase vs estimate. Billing percentage vs actual completion percentage. Overhead applied. Change order tracking. Retainage outstanding. One report, produced by the 12th of every month from closed books, catches every one of these before it compounds into a closeout loss.