Construction job costing software records each cost against a job and cost code as it is committed, not weeks later when the bill arrives, so a contractor sees an overrun in month three rather than at final account. Devvista is a software development and growth agency and an official Odoo partner that sets up job costing and cost control in Odoo for UK contractors, with custom reports such as CVR where the standard product stops.
This page covers why job costs arrive late, a cost code structure, the steps to fix it and a worked CVR.
The problem: you learn a job lost money after it is finished
Ask a contracts manager how a job is doing and the honest answer is often "fine, as far as we know". The cost report in the accounts shows what has been invoiced and paid. It does not show the scaffold hire running past its period, the groundworks subcontractor's next application, or the variation that was instructed on site but never priced.
By the time those costs reach the ledger, the money is spent. Job costing that only reads the ledger is history, not control.
Why job costs arrive late: five causes
Check which of these applies to you. Most firms have at least three.
- Costs are recorded at invoice, not at order. Purchase and subcontract orders are not in the system, so committed cost is invisible.
- Cost codes differ between estimating and accounts. The tender was priced by trade package; the ledger records by nominal code. Nobody can compare the two.
- Labour is booked weekly from paper timesheets, or not to jobs at all.
- Plant and materials are charged to "general" and spread across jobs at year end.
- Variations are tracked by the QS only, so value goes up in the valuation while cost goes up in the ledger, and the two never meet.
A cost code structure site and office will both use
The structure matters more than the software. This is a starting point we adapt with each contractor; keep it short enough that site staff can remember it.
| Cost head | Examples | Where the cost enters the system |
|---|---|---|
| Preliminaries | Site set-up, welfare, scaffolding, site management | Purchase orders, timesheets |
| Labour (direct) | Own operatives by trade | Daily timesheets against job and code |
| Materials | Concrete, timber, blocks, M&E kit | Purchase orders, deliveries, bills |
| Plant | Owned plant charge-out, hired plant | Hire orders with off-hire dates, internal rates |
| Subcontract packages | Groundworks, roofing, M&E | Subcontract orders and valuations of applications |
| Variations | Instructed changes, by number | Variation register linked to cost and value |
| Contingency and risk | Allowances held from the tender | Budget only, released by approval |
Six steps to job costing that tells you something in time
- Turn the tender into the job budget by cost code on day one, so every cost has something to be compared with.
- Raise an order before every commitment: purchase order, plant hire order or subcontract order, each tagged to job and code. That is your committed cost.
- Book labour daily on a phone, by job and code. Costs come from each employee's cost rate, so the job sees labour the next morning.
- Match bills to orders so the actual cost replaces the commitment rather than doubling it.
- Log variations with a number and attach both the cost and the value to it.
- Run a cost value reconciliation (CVR) each month per job, reviewed by the contracts manager and a director.
If you can only do one thing this month, do step 2. Committed cost is what turns a cost report into cost control.
Cost value reconciliation, worked through
A CVR compares the value earned on a job with the cost of earning it, at the same date. Illustrative figures for a £1.2 million contract at month six:
| Line | Amount |
|---|---|
| Value: gross valuation certified to date | £640,000 |
| Plus: agreed variations not yet certified | £25,000 |
| Less: provision for work valued but defective or disputed | £10,000 |
| Adjusted value | £655,000 |
| Cost: actual costs posted to the job | £548,000 |
| Plus: accruals for work done, not yet billed (subcontract applications, hire, deliveries) | £62,000 |
| Total cost to date | £610,000 |
| Margin to date | £45,000 (6.9%) |
If the tender margin was 10%, the job is running about £20,000 behind on value earned so far. The accrual line is where spreadsheet CVRs go wrong: without committed costs in the system, someone has to phone round to find out what has been done but not billed. With orders in the system, the accrual is the gap between what was received or valued and what was billed.
What cost control software in construction should show
Whichever product you choose, these are the views that make it cost control rather than cost reporting:
- Budget, committed, actual and forecast final cost per cost code, on one screen.
- Variance alerts when committed cost passes the budget for a code.
- Labour hours against allowed hours by trade.
- Plant on hire by job, with off-hire dates.
- The CVR, with drill-down from each figure to the orders and bills behind it.
Products marketed for this in the UK range from job costing tools for small builders to the cost modules of construction suites. For cash and forecasting views, see our page on construction budgeting software.
How job costing works in Odoo
In Odoo each job is a project with its own analytic account. Purchase orders, bills, timesheets and stock moves linked to it appear in the project profitability panel as costs, with customer invoices and down payments as revenue (Odoo documentation). Timesheet cost comes from each employee's HR settings, so daily booking gives labour cost without retyping.
Analytic budgets add the committed side: Odoo's budget report shows a committed amount that includes confirmed purchase orders not yet billed (Odoo budgets). Cost codes can be set up as analytic accounts under a plan of their own, so one bill line carries both the job and the code. What Odoo's documentation does not describe is a CVR report in the UK format; we build that as a custom report from the same analytic data, so the figures reconcile to the ledger.
For subcontract valuations, retentions and CIS on the same records, see the construction ERP page.
Main contractor or specialist subcontractor: what changes
The method is the same, but the pressure points differ.
Main contractors
Most cost is subcontract packages, so cost control lives in the subcontract order and the valuation of each application. The risks are over-valuing a subcontractor before their work is complete, and variations instructed to the subcontractor that are not yet agreed with the client. Track both against the same variation number.
Specialist subcontractors
Most cost is your own labour and materials, so daily labour booking and material orders carry the weight. You also have CIS deducted from your own payments and retention held by the main contractor, which squeezes cash even on a profitable job. Your job report should show margin and cash separately, because a job can be in profit and still be cash negative for months.
How to know your job costing is working
- Share of cost committed by order: aim for nearly all subcontract and material spend to have an order before the bill.
- Accrual size in the CVR: it should shrink as orders replace estimates.
- Forecast vs final margin: compare the month-three forecast with the final account on finished jobs.
- CVR preparation time per job.
- Unpriced variations older than 30 days.
Mistakes that make job costing useless
- Cost codes so detailed that site staff pick "general" to save time.
- Allowing bills with no order, which hides commitments until they arrive.
- Booking own labour at wage cost only, without employer costs, so labour looks cheaper than it is.
- Counting retention held from subcontractors as a saving rather than a liability.
- Reviewing the CVR only at quarter end, when it is too late to change the job.
Where Devvista fits
Devvista is an official Odoo partner that sets up construction job costing for UK contractors in Odoo: cost code plans, purchase and subcontract orders, daily labour booking, committed cost and a monthly CVR report. Where a site needs its own app for timesheets or deliveries, we build it as custom software and connect it. We work remotely, and our Odoo work is under NDA.
Good fit: contractors with several concurrent jobs and a commercial team that wants CVRs from live data. Not a fit: firms that only need a list of costs per job; your accounts package may already do that. See also construction accounting software, our Odoo implementation service, when Odoo customisation is worth it, and the UK hub.