A plain-English walkthrough of the construction work-in-progress schedule: the cost-to-cost method, over and under billing, the columns it contains, and a full worked example you can follow line by line.
A work-in-progress (WIP) schedule is a report that shows, for every open job, how far along the work is, how much revenue you have actually earned, and how that earned revenue compares to what you have billed. On long-duration construction contracts, revenue is recognized as you perform the work, not when you send an invoice. The WIP schedule is the tool that translates "we're about halfway done" into a dollar figure your financial statements can stand on.
It matters because almost everyone who evaluates a contractor reads it. Your bonding company and surety use the WIP to judge how well you estimate and control jobs before they extend a bond line. Your bank leans on it to understand the real earnings behind your balance sheet. Your CPA needs it to book percentage-of-completion revenue correctly at year end. And internally, it is the earliest warning system you have: a WIP schedule updated every month catches a job that is bleeding cost (or one you have overbilled and are quietly borrowing against) while there is still time to react.
Skip it, or build it once a year in a hurry, and you are flying blind on the two questions that sink contractors: are my jobs actually making the margin I bid, and am I billing ahead of the work I've done?
Almost every construction WIP schedule is built on one simple idea: you are as far along as the share of your costs you have already spent.
The cost-to-cost method measures percent complete by comparing costs incurred to date against the total costs you expect the job to require:
That last line is the one everyone cares about. When you have billed more than you have earned, the difference is called billings in excess of costs and estimated earnings. It is a liability on your balance sheet, because it represents work you have collected for but not yet performed. When you have billed less than you have earned, the difference is costs and estimated earnings in excess of billings, an asset, because you have done work you have not yet invoiced.
A healthy contractor tends to bill slightly ahead of cost to stay cash-positive, but large or growing overbillings are a red flag: they can mask a job that is losing money, and they represent cash you may have to give back in production later. Underbillings are money left on the table and a sign your billing is lagging your field.
Numbers make this concrete. Follow one $500,000 roofing contract through the math.
Say you hold a commercial re-roof contract worth $500,000. Your estimate says the job will cost $350,000 in labor, material, equipment, and subcontract to complete. As of month-end, your job-cost report shows you have spent $175,000 so far.
Now bring in billings. Suppose your pay applications to date total $300,000. Compare that to the $250,000 you have earned:
You are carrying a $50,000 billing in excess, a liability. That is not automatically bad; you are ahead on cash. But it means the next $50,000 of work is, in a sense, already spoken for, and if your cost estimate is too optimistic, that cushion can evaporate. Flip the billings to $220,000 instead and the sign reverses: $220,000 − $250,000 = −$30,000 underbilled, an asset. You have performed $30,000 of work you have not yet invoiced, and you should get a pay application out.
A standard WIP schedule is one row per open job and a set of columns that walk left to right from contract value to over/under billing. The typical layout:
Controllers frequently add a few more: costs remaining (estimated total cost − cost to date), gross profit earned to date, and a comparison of this month's estimated margin to last month's, which surfaces jobs whose margin is quietly slipping.
The mechanics, in the order you actually do them each month.
Start with each open job's original contract. Add every approved change order to get the revised contract value. Only signed, approved changes belong here. Pending or verbal changes are not contract yet, and including them overstates both revenue and margin.
For each job, refresh the forecast of what it will cost to finish. This is your best estimate today, not the original bid frozen in time, reflecting cost overruns, buyout savings, and any change-order scope. A stale estimate is the single biggest source of a wrong WIP.
From job costing, total the labor, material, equipment, and subcontract cost booked to each job through the cut-off date. Committed costs matter here: an installed material you have received but not yet been billed for is a real cost incurred, and leaving it out inflates your percent complete downward.
Divide cost to date by total estimated cost for each job. This is the engine of the whole schedule: every revenue and billing comparison flows from it.
Multiply each job's percent complete by its revised contract value. That is the revenue you have earned to date under percentage-of-completion, regardless of what you have billed.
Pull billed-to-date from your pay applications and subtract earned revenue. Positive is overbilled (a liability); negative is underbilled (an asset). Scan the column: large or growing overbillings and any underbilling that should have been invoiced are your action items for the month.
Most bad WIP schedules fail for the same handful of reasons.
Running percent complete against last quarter's cost estimate makes a job that is over budget look on track. Re-forecast estimated total cost every period, not just when it hurts.
Material received but not yet vouchered, or a sub's completed work not yet billed, is real cost incurred. Leave it out and your percent complete (and earned revenue) come in low.
Approved change orders belong in the revised contract and, if they add cost, in the estimate. Tracking billings against the original contract while the scope has grown corrupts every downstream number.
Cost to date must be actual, source-document cost, never a prorated or estimated figure. Blending the two is how a WIP quietly stops tying to the general ledger.
A WIP built four times a year catches problems a quarter late. Monthly is the standard; the whole value is early warning, and early means monthly.
If cost to date exceeds your estimate, percent complete tops 100%: a sign the estimate is wrong, not that the job is 110% done. Cap it, and treat it as a signal to re-forecast the cost immediately.
Every step above is arithmetic, and every step is also a place a manual spreadsheet drifts. A pasted cost number that never got refreshed, a change order that made it into the contract column but not the estimate, a billed-to-date figure keyed by hand from a stack of pay apps. Any one of them quietly throws the whole schedule off, and you usually find out when the surety asks.
The fix is to build the WIP from the same data that runs the job. When your job costing is source-document accurate and your billings live in the same system, the WIP schedule computes itself: revised contract from approved change orders, cost to date from the ledger, billed to date from your pay applications, over/under billing falling out automatically, and a month-end snapshot you can hand to the bank. That is exactly what WIP schedule software is for.
See how SitewideOps computes over/under billing straight from your job costs and pay applications, with a month-end snapshot your surety can read.