On this page
Cost-to-cost is the default way most contractors measure percent complete on long-term contracts. It’s simple, it uses numbers accounting already has, and auditors understand it:
percent complete = cost to date ÷ estimated total cost
It also has a quiet assumption baked in: that every dollar spent represents the same amount of progress as every other dollar. When that’s true, cost-to-cost is a good measure. When it isn’t, the job’s revenue, margin and over/under billing are all wrong, and they’re wrong in a way that looks perfectly reasonable on the WIP schedule.
Here are the five most common ways it goes wrong.
1. Material bought before it’s installed
The mechanical sub buys $600,000 of rooftop units early to lock pricing. The invoice posts. Cost to date jumps by $600,000, and percent complete jumps with it, even though not one unit is on the roof.
| Without the units | With the units | |
|---|---|---|
| Cost to date | $3,600,000 | $4,200,000 |
| Percent complete | 40.0% | 46.7% |
| Earned revenue | $4,000,000 | $4,666,667 |
That’s $666,667 of revenue recognized for equipment sitting in a warehouse. Revenue recognition guidance under ASC 606 recognizes this problem: costs that don’t depict progress, such as certain uninstalled materials, can be excluded from the measure of progress. Many contractors handle it by tracking uninstalled materials separately and keeping them out of cost-to-cost until installed. Your CPA should set the policy, but the fix is the same either way: you have to know which costs are uninstalled material.
2. Costs that haven’t arrived yet
The opposite problem. A sub did $300,000 of work in March but won’t bill until April. Unless someone accrues it, March cost to date is $300,000 light, so percent complete is understated, earned revenue is understated, and the job looks overbilled.
This one is endemic. Sub pay apps usually lag the work, and accruals often depend on someone in accounting knowing what happened in the field. Commitments help here: if you know the subcontract, its schedule of values and what the PM has seen installed, you can estimate the accrual instead of waiting for the invoice.
3. A stale cost to complete
This is the big one, and we’ve written about it in over billing vs under billing. Cost to date is a fact. Cost to complete is an opinion. If costs are running hot and the forecast hasn’t moved, percent complete inflates:
| Forecast as booked | Honest forecast | |
|---|---|---|
| Cost to date | $5,400,000 | $5,400,000 |
| Cost to complete | $3,600,000 | $4,300,000 |
| Estimated total cost | $9,000,000 | $9,700,000 |
| Percent complete | 60.0% | 55.7% |
| Earned revenue | $6,000,000 | $5,567,010 |
| Projected margin | 10.0% | 3.0% |
The stale forecast overstates revenue by about $433,000 and hides seven points of margin fade. Nothing about it looks wrong on the WIP schedule. It’s a perfectly reasonable 60%.
4. Inefficiency counted as progress
A crew spends 400 extra hours reworking a wall assembly that failed inspection. Those labor costs are real, and they hit cost to date. But the job isn’t 400 hours further along. Under cost-to-cost, the rework looks like progress, which pushes revenue forward. ASC 606 guidance also addresses this: costs from significant inefficiencies that weren’t reflected in the contract price generally shouldn’t count toward progress. In practice, rework and wasted costs need their own cost codes to be visible at all.
5. Costs coded to the wrong job
The simplest one. An invoice for Job A gets coded to Job B. Job B’s percent complete rises, Job A’s falls. Both are wrong, and the error survives until someone notices a cost line that doesn’t make sense.
How to catch it
Cost-to-cost doesn’t need to be replaced. It needs a second opinion. The cross-checks that work:
Compare to physical progress. Ask the PM for their physical percent complete by major scope. Units installed, linear feet of pipe, floors topped out, rooms finished. When cost-to-cost and physical disagree by more than a few points, someone writes a sentence explaining why. On our sample job, Riverside Medical is about 67% complete by the field’s estimate (66.9% billed through Pay App #9) and 72.6% by cost-to-cost in the WIP from an earlier post. That gap is exactly the kind that deserves a sentence.
Compare to billing. Billing percent complete (billed to date ÷ revised contract) is a third view. If billing, physical and cost-to-cost all disagree, start asking questions.
Look at cost codes, not just totals. A job can look fine in total while one cost code is 30% over and another is 30% under because of a miscode. A job cost report by cost code shows it.
Watch the forecast’s age. Every cost-to-complete line should have a last-updated date and a name. A line that hasn’t moved in three months on an active scope is a stale forecast until proven otherwise.
Separate what doesn’t depict progress. Uninstalled materials, rework and known inefficiencies on their own cost codes or flags, so they can be excluded or explained.
Track the estimate at completion over time. A single month’s EAC tells you little. A chart of EAC by month tells you whether the job has been quietly fading.
Why it’s hard to catch today
Each cross-check needs data from a different place. Cost-to-cost comes from accounting. Physical progress lives in the field: daily logs, quantities, the super’s judgment. Billing comes from the pay app. The forecast lives in a spreadsheet with no history. Comparing them takes someone assembling four sources by hand, which is why it tends to happen at year-end with the auditors instead of every month.
What we’re building
In os.construction, cost, commitments, field records, billing and the forecast share one job record. The budget already rolls up by cost code with forecasts, modifications and snapshots you can compare. A job cost report with cost-to-cost next to billing progress, and the Risk agent that flags gaps for a person to review, are planned.
The budget is live. The accounting job-cost forecast implementation uses posted job-cost entries subject to coverage checks; the Risk agent is planned. See the project and accounting boundary. The EAC calculator is available now if you want to run the numbers on a job today. If your percent complete is a number nobody questions, join the founding program.
Share this article