Construction cost control
Committed cost vs actual cost on a construction project
A project that has spent 2,000,000 against a 10,000,000 budget looks comfortable — until you notice it has awarded 9,500,000 of contracts. Actual cost tells you what has happened; commitment tells you what has already been promised. A cost position that shows only one of them is half a number.
Last revised
Why actual cost alone is half a number
Ask most project accountants what a construction project has cost and they will answer with the ledger: the contractor bills certified, the vendor bills accrued, the payroll posted. That number is true and it is incomplete. It says nothing about the contracts already awarded but not yet billed, the purchase orders issued but not yet delivered, or the retention that will fall due at completion. A project can be well within budget on actual cost and already over budget on what it has promised.
The spreadsheet answer is a “cost to complete” column somebody maintains by hand, from the contract file, and updates when they remember. The system answer is to measure commitment as a first-class figure, from the documents that create it, beside the actual cost — and to keep the two apart, because they answer different questions.
The five figures, and which document produces each
BuilderOne’s Construction module publishes a project cost position by cost category. Every row carries the same five measures, each derived from a specific kind of document rather than typed in:
| Measure | What it means | Where it comes from |
|---|---|---|
| Budget | The current effective approved budget for the category. | Approved (or closed) budget versions and their active lines; drafts and cancelled budgets do not count. |
| Committed | What has been promised to contractors under live contracts. | Active lines of active or completed contracts, by category. |
| Billed (cost incurred) | The preferred measure of actual project cost. Not cash paid. | Confirmed contractor bills, plus confirmed site expenses. |
| Paid | Cash actually settled against those bills. May be less than billed under partial payment. | Posted, non-reversed bill settlements, allocated pro rata. |
| Open commitment | Committed less billed, floored at zero: what is still to come under awarded contracts. | Derived from the two figures above. |
Two derived figures follow: remaining budget is budget less billed (never budget less paid — a bill you have not yet paid is still a cost), and a category is over budget when billed exceeds budget. The contract publishes each of these as an exact decimal, with the caveats travelling as data rather than footnotes.
A worked example
One category — say structural steel — with a 1,500,000 budget, one awarded contract of 1,200,000, 900,000 certified so far and 400,000 paid:
| Figure | Amount | Reading |
|---|---|---|
| Budget | 1,500,000 | The plan. |
| Committed | 1,200,000 | Promised under the awarded contract. |
| Billed | 900,000 | Incurred — the project cost so far. |
| Paid | 400,000 | Cash out. 500,000 of billed cost is still unpaid. |
| Open commitment | 300,000 | 1,200,000 − 900,000: still to be billed under the contract. |
| Remaining budget | 600,000 | 1,500,000 − 900,000. |
| Remaining after commitment | 300,000 | 600,000 − 300,000: what the budget can still absorb beyond what is already promised. |
Read only the ledger and this category is 600,000 under budget. Read the commitment and it is 300,000 under — half the headroom. Read only cash and it looks like 1,100,000 of room, which is not a number that means anything. The exposure the project actually carries is the committed figure; the ledger will catch up with it bill by bill.
Not all “actual” cost is in the ledger, and the position says which is
A subtlety that matters for reconciliation: cost incurred is not one thing. In BuilderOne the billed figure is deliberately split into the portion backed by a posted general-ledger accrual (confirmed contractor bills whose accrual has posted), the portion confirmed but not yet posted, and the portion from confirmed site expenses — which are operational records that write no ledger entry at all. The three always sum to billed, but they are exposed separately so that no report can present a non-posting figure as if it reconciled to the general ledger.
This is also why the ledger-backed figure reconciles to the general ledger only in aggregate: a contractor bill posts its accrual at header level, not per cost-category line. The position tells you this rather than letting you discover it.
Where purchase orders fit — and an honest limit
Purchase orders are commitments too: an issued order for steel is a promise to pay for it once it arrives. In BuilderOne, Procurement shares the supplier, project and cost-category records with Construction, so a vendor bill lands on the project it was bought for, and the purchase-order register states how much of each order line has been received.
What Procurement does not currently do is state an open commitment in money. The purchase-order register reports remaining quantity per line and the order’s own header total, and it says explicitly that the total is not a commitment, an amount paid or an amount owed. The committed figure in the cost position is therefore contract commitment: awarded construction contracts, not open purchase orders. If your exposure is dominated by material orders rather than contracts, read the two registers together; the product does not add them into one number, and this guide will not pretend it does.
What keeps the position honest
- Budgets are versioned. A revised budget is a new approved version; the position always reads the current effective one, and superseded lines cannot be counted twice.
- Commitment counts only live contracts. A draft, a cancelled contract or a superseded contract line contributes nothing.
- Certifying a contractor bill measures it against the budget of its category at that moment, so an overrun surfaces on the bill that causes it rather than at month end.
- Every figure is the project’s own currency and scale — a project kept in a zero-decimal currency reports at scale 0, not rounded from somewhere else.
- Uncategorised cost is not hidden. Cost carrying no governed category appears in a single explicit bucket, so the named rows plus that bucket always equal the project total.
The same discipline that keeps this position honest is what makes a project-wise profit and loss trustworthy: one source per figure, no figure typed, and a plain statement of what each number does and does not include.
Where this lives in BuilderOne
See it on your own numbers
The fastest way to judge whether this is how your software should work is to put a real project through it. Tell us what you run and we will set your company up.
