CONSTRUCTION2026-07-147 MIN READ

Construction job costing: cost codes, WIP, holdbacks

Job costing is the discipline of knowing what a project has cost, committed, and will cost — per line. Cost code structures, commitments vs actuals, WIP, and where BC holdbacks fit.

BY OPSPHERE TEAM

Every builder can tell you what a project was supposed to cost. The ones who stay in business can tell you, at any moment, what it has cost, what it is committed to cost, and what it will cost to finish — per line, not per project. That is job costing, and it is less an accounting technique than an operating discipline that happens to produce accounting.

This post covers the four load-bearing pieces: cost code structures, the commitments-versus-actuals distinction, work-in-progress reporting, and — because this is Canada and much of our readership builds in BC — where lien holdbacks sit in the numbers. Your accountant governs the accounting treatment throughout; the operating discipline is yours.

Cost codes: the project’s chart of accounts

A cost code is to a project what a GL account is to a company: the place a dollar lands so it can be found again. A workable structure has two dimensions. The first is the work breakdown — divisions and codes for sitework, concrete, framing, mechanical, electrical, finishes, and the rest. Many builders start from an industry structure such as CSI MasterFormat and prune it; others build their own. The second dimension is cost type within each code: labour, material, subcontract, equipment, and other — because "framing is over budget" is a different conversation depending on whether the overrun is lumber or hours.

Two rules keep a code structure useful. Keep it as small as your reporting actually needs — codes nobody books to are noise, and codes everybody guesses at are worse. And freeze it per project once work starts: recoding mid-stream destroys the history that makes the reports comparable.

Commitments versus actuals

The single most common job-costing failure is managing to actuals alone. Actuals — invoices received and costs booked — tell you where the project has been. Commitments — signed subcontracts and purchase orders — tell you where it is contractually going. A framing line can look comfortably under budget on actuals while the signed sub plus pending change orders already exceed it; the overrun exists the day the contract is signed, not the day the invoice arrives.

The committed cost report is therefore the working document: per cost code, original budget, approved changes, revised budget, committed, actuals to date, and the two derived numbers that matter — cost to complete and projected final cost. When change orders update the budget and the commitment in one motion, that report stays true between months instead of true once a month.

WIP: where the project meets the financial statements

Work-in-progress reporting answers a question the job cost report does not: how much of this project’s revenue and margin belongs in this period? The generally used approach for contractors recognizes revenue as work progresses — commonly in proportion to costs incurred against total expected costs — which makes the WIP schedule the bridge between project reality and the income statement. Two of its outputs deserve every builder’s attention: overbilling (billed ahead of work performed — a liability, and someone else’s cash you are temporarily holding) and underbilling (work performed ahead of billing — often the first visible symptom of unapproved change orders or a billing function falling behind).

Revenue recognition is squarely your accountant’s territory, and the standards have real nuance. The operational point survives the nuance: a WIP schedule is only as honest as the cost-to-complete estimates feeding it, which is why the estimating discipline above is a financial-statement issue and not just a PM habit.

Where holdbacks fit

In BC, the Builders Lien Act generally requires a 10% holdback on the value of work and materials — which means every progress billing has a piece you will not collect yet (the owner’s holdback on you) and every subcontractor billing has a piece you must retain (your holdback on them). Job costing has to carry both: the retained amounts are real receivables and payables with statutory timelines attached, and a cost report that ignores them overstates both what you are owed now and what you owe now. The full accounting treatment — separate accounts, release mechanics, the ledger-to-GL tie-out — deserves its own walkthrough, and we wrote one; the job-costing rule is simpler: track holdback per contract, from day one, in the same system as the costs.

OpSphere ProBuild is built around this discipline: budgets and cost codes, subcontracts and commitments, invoices coded to lines, change orders that move contract value and budget together, draw requests assembled from the same records, and holdback ledgers per contract with release-window countdowns. ProBuild is available today. Job costing does not require software — builders ran it on paper for a century — but it does require that the budget, the commitments, and the actuals agree with each other, and that is precisely the property a shared project record provides and a folder of spreadsheets does not.

MORE IN CONSTRUCTION