WIP and over/under billing
How a work-in-progress schedule is calculated with the cost-to-cost method, what over and under billing mean, and why os.construction computes WIP live instead of at month-end.
This describes how os.construction is being built. Details may change before launch.
On this page
The work-in-progress (WIP) schedule is the most important report most contractors produce, and usually the most painful. Bonding companies, lenders and your own leadership read it to understand whether jobs are making money and whether billing is ahead of or behind the work. This page explains the math, then how os.construction is designed to keep it current.
Percent complete, the cost-to-cost way
Most contractors recognize revenue on long-term contracts over time, based on progress. The most common way to measure progress is the cost-to-cost method:
- Percent complete = cost to date ÷ estimated total cost
- Earned revenue = percent complete × contract value
- Estimated gross profit = contract value − estimated total cost
Estimated total cost is cost to date plus the PM’s cost-to-complete. That is why cost-to-complete matters so much: it drives percent complete, earned revenue and margin.
Over and under billing
Compare what you have billed with what you have earned:
- Billings in excess of costs and estimated earnings (overbilled): billed to date is more than earned revenue. It is a liability: you have been paid for work you have not done yet.
- Costs and estimated earnings in excess of billings (underbilled): earned revenue is more than billed to date. It is an asset, but a risky one: you have done work you have not billed.
Over/under billing = billed to date − earned revenue. Positive is overbilled, negative is underbilled.
Worked example: Riverside Medical
Sample data, rounded:
| Line | Amount |
|---|---|
| Contract value (incl. approved COs) | $49,300,000 |
| Projected margin | 11.4% |
| Estimated total cost (49.3M × 88.6%) | $43,679,800 |
| Cost to date | $31,700,000 |
| Percent complete (31.7M ÷ 43.68M) | 72.6% |
| Earned revenue (72.6% × 49.3M) | $35,778,781 |
| Billed to date (through Pay App #9) | $35,100,000 |
| Over/(under) billing | ($678,781) underbilled |
Riverside is underbilled by about $679K. That can be fine (a timing difference), or it can mean approved work like CO #14 is not getting onto pay apps fast enough, or that cost-to-complete is too low and the job is less complete than the math says.
Fade and gain
Fade is when a job’s projected margin drops over time; gain is when it rises. Fade usually comes from cost-to-complete estimates that were too optimistic, unapproved changes, or productivity problems. On the WIP schedule it shows up as estimated gross profit falling month over month. In the sample portfolio, 3 of 14 active jobs are fading.
A healthy WIP review asks, for every job: is percent complete believable, is cost-to-complete current, is billing tracking the work, and is the margin moving?
Why WIP is painful today
In a disconnected stack, building the WIP means:
- Exporting job cost from accounting.
- Collecting cost-to-complete from each PM, often in separate spreadsheets.
- Pulling contract values and approved COs, which may not match between systems.
- Pulling billings to date.
- Reconciling all of it, then reviewing.
By the time it is done, it describes last month. Mistakes in any step (a missed CO, a stale cost-to-complete) flow straight into revenue recognition.
WIP on one data core
In os.construction, every input to the WIP already lives in the same place:
- Contract value is the prime contract plus approved change orders.
- Cost to date is posted job cost.
- Cost-to-complete is entered by PMs against the same cost codes.
- Billed to date is the sum of actual pay app records.
So WIP, over/under billing and fade can be computed any day, not just at month-end. Month-end becomes a review and sign-off of numbers that were already visible, with a snapshot kept for each period so you can compare months. See Live dashboards and WIP.
Was this helpful?
Help shape how it works on your jobs.