It's a familiar sequence. Mid-job, the numbers look comfortable. The job wraps, everyone's pleased, and then the mail starts: the sub's final invoice, the lumberyard statement, the rental company closing out the scaffold. Four weeks after "a good job," the profit has quietly dissolved — and nothing actually went wrong at the end. The job was never that profitable. The mid-job view was lying by omission.
The missing concept has a name — committed costs — and tracking it doesn't take an accountant. It takes one small second table per job and the honesty to write down promises the day you make them. This guide is that table.
A cost happens three times
Take one purchase — say you order cabinets. Three different dates follow:
- Committed — the day you place the order. The money's fate is sealed here.
- Recorded — the day the invoice arrives and gets written into your job costs.
- Paid — the day the money leaves your account.
Most small contractors watch the third date (the bank balance), keep a job costing sheet for the second, and track the first nowhere at all. But the first date is when the decision happened — the only moment the number could still have been managed. Everything after is just the paperwork catching up to a choice already made.
A cost is committed the moment you agree to it: the sub's signed price, the placed order, the rental clock that started ticking, the remaining hours your own crew will inevitably work. None of those appear on any invoice yet. All of them are already spent.
The mid-job illusion, with numbers
Back to the Westlake remodel from our job costing guide, mid-job:
| Agreed price | $51,500 |
| Recorded costs so far | $28,400 |
That looks like $23,100 of room — and our job costing guide left it at exactly this cliffhanger: the job ends in the black if the remaining work costs less than that. Here's how you actually answer it. List what's committed but not yet recorded:
| Committed, not yet billed | |
|---|---|
| Drywall & paint sub — contract balance | $9,800 |
| Cabinet order, placed | $4,200 |
| Scaffold rental, ~3 weeks left | $900 |
| Own crew labor to finish, at crew cost | $6,000 |
| Total committed | $20,900 |
Your known exposure is $28,400 recorded + $20,900 committed = $49,300 against a $51,500 price. The room isn't $23,100 — it's $2,200. Nothing new was learned about the job just now; no surprise happened. The information existed all along, scattered across a signed sub agreement, an order confirmation email, and a rental contract. The only thing missing was a table that added it up.
A floor, not a forecast
Notice what this number is and isn't. Known exposure is not a prediction — no crystal ball, no percent-complete estimating, nothing that requires judgment. It's arithmetic over promises already made, which gives it a property predictions never have: it's a floor. The job's real final cost can come in above it (surprises happen — that's what change orders are for), but it cannot come in below, because every line in it is already agreed.
That's exactly why it beats optimism as a management tool. "I think we'll land around $46,000" is a feeling. "We cannot land under $49,300" is a fact — and a fact you can act on with three weeks of schedule left: request the next progress payment, price the remaining selections carefully, stop saying yes for free.
That next progress payment has its own arithmetic — percent complete, retainage held, what's already been paid — and the retainage and progress billing calculator does it for you.
(Accountants solve a cousin of this problem with WIP schedules and percent-complete revenue — proper and necessary for financial statements and banks. You don't need any of that machinery to stop being surprised by bills. The floor is the operator's cut of the idea.)
How to keep the table by hand
One small table per job, next to the cost sheet, four kinds of lines:
- Sub contracts: agreed amount minus what they've billed so far.
- Placed orders: anything ordered that hasn't been invoiced.
- Open rentals: rate × the weeks you honestly expect remain.
- Remaining own labor: crew-cost (not billing rate) for the hours left.
Two habits keep it honest. First, every yes lands the day it's said — the same driveway moment that needs a change order for the client needs a line in your committed table for you. Second, when an invoice arrives, the amount moves: into the recorded costs, out of the committed table — updated in the same ten-minute weekly session as everything else. Forget the move and you double-count; skip the update and the floor drifts stale. It's the same week-behind-and-it's-worthless property your receipts have, applied to promises instead of paper.
Where the hand-kept floor cracks
By hand, this is the most fragile piece of the whole job costing kit — not because the arithmetic is hard, but because it's a second table that must stay synchronized with the first, per job, every week, by the same person doing everything else. Miss one invoice-move and the number stops being trustworthy; and a floor you don't trust is a floor you stop checking.
That's the point where a purpose-built tool earns its keep. Obra keeps both halves in one place: your crew's receipts arrive as photos, WhatsApp messages, or email and you confirm each to its job — that's the recorded side, current this week. And when you look ahead, Obra asks you the question this guide taught you to answer — how much more do you expect to spend? — and builds a final-cost forecast from that review, one it never lets read below what's already recorded. Your committed table stops being a second sheet to synchronize; it becomes one number you review, with the recorded side kept current underneath it. The job that "looks fine" and the job that is fine stop being different jobs. Start free if the four-weeks-later mail sequence sounded familiar.
Get the template
The committed table from this guide is our free subcontractor payment log: each subcontract with its approved change orders, then every invoice and payment against it — invoiced, paid, retainage held and the balance to finish, per sub. Enter your email below and the download starts right away.