Construction Job Costing: Why Your Company Made Money and You Still Cannot Tell Which Jobs Did
On this page
- Cost Codes: The Common Language
- Labor Burden, Calculated From Your Own Payroll
- Committed Costs: What You Have Already Promised to Spend
- Owned Equipment: An Internal Rate Without Double Counting
- Overhead: Allocated, Consistently
- Putting the Layers Together
- Why the Rest of the Financials Depend on It
- Setting It Up
Company-level books answer whether the business made money. Job costing answers which work made it, by charging every cost to the job that caused it. Take a hypothetical contractor with $100,000 of revenue from two jobs in a period. The company statement shows $82,000 of cost and an $18,000 profit, an 18% margin that looks healthy. Split by job, the same numbers tell a different story:
| Job A | Job B | Company | |
|---|---|---|---|
| Revenue | $55,000 | $45,000 | $100,000 |
| Cost assigned | $38,000 | $44,000 | $82,000 |
| Profit | $17,000 | $1,000 | $18,000 |
| Margin | 31% | 2% | 18% |
Job A carried the period; Job B, once its share of labor burden, equipment time, and overhead is charged, barely broke even. A thin margin is not always a bad job. It may have been priced that way on purpose, underbid, or loaded with costs nobody estimated, and only job-level numbers show which. The rest of this guide covers the layers that have to be charged to each job for those numbers to be honest.
Cost Codes: The Common Language
Costs do not arrive labeled by job. A lumber delivery covers three projects, a foreman splits a week between two sites, and an excavator moves from one job to another midweek. A cost code is the category each cost is assigned to, so the same kind of cost can be compared across jobs and across time.
| Code | Category | Captures |
|---|---|---|
| 100 | Labor | Field wages and burden, by trade or activity |
| 200 | Materials | Lumber, concrete, steel, fixtures, finishes |
| 300 | Equipment | Owned equipment at an internal rate, rentals |
| 400 | Subcontracts | Subcontracted scopes by trade |
| 500 | Overhead | Indirect costs allocated to the job |
Contractors who want more detail add sub-codes by trade or activity, or adopt an industry coding framework. The value comes from consistency: a structure that changes from project to project cannot be compared. Detail has a cost too. Codes the field cannot assign correctly get guessed in the truck and cleaned up in the office, and the data becomes fiction. The right structure is the most detailed one the field will actually use correctly.
Labor Burden, Calculated From Your Own Payroll
The wage a worker earns is not what the worker costs. The burdened rate adds the employer’s other costs and spreads them over the hours that can actually be charged to jobs. A percentage borrowed from an article is not a substitute, because the inputs that drive it, such as workers’ compensation class, benefits, and paid time off, differ from company to company. Calculate it:
Burdened hourly rate = total annual employer cost of the worker ÷ annual productive (job-chargeable) hours
Total annual cost includes wages for all paid hours, including paid time that is not chargeable to jobs, plus employer payroll taxes, workers’ compensation premium, benefits, and training. The employer share of FICA is 7.65%, which is 6.2% Social Security up to the annual wage base and 1.45% Medicare, under IRS Publication 15. The other inputs come from your own premiums, plans, and rate notices. These are employer costs, so the rate is only as honest as the crew’s 1099 or W-2 classification: a worker paid on a 1099 who is really an employee carries these costs anyway, and the job cost that leaves them out is understated.
For example, assume a carpenter paid $30 an hour for 2,080 paid hours, with 160 of those hours spent on paid time off, training, and shop time, leaving 1,920 productive hours. Assume a workers’ compensation premium of 8% of wages, $300 of state reemployment tax, and $6,000 of health benefits:
| Cost | Amount |
|---|---|
| Wages, 2,080 paid hours at $30 | $62,400.00 |
| Employer FICA at 7.65% | $4,773.60 |
| Federal unemployment tax (0.6% of the first $7,000, after the maximum state credit) | $42.00 |
| State reemployment tax (assumed) | $300.00 |
| Workers' compensation at 8% of wages (assumed) | $4,992.00 |
| Health benefits (assumed) | $6,000.00 |
| Total annual cost | $78,507.60 |
| Divided by 1,920 productive hours | $40.89 per hour |
The burdened rate is about 36% above the $30 wage, and the paid but unproductive hours account for part of that, because they are paid but cannot be charged to any job. On a job with 500 carpenter hours, costing labor at $30 instead of $40.89 understates labor cost by about $5,445 (500 × $10.89). Repeated on every job and every bid, that gap can make labor-heavy work look profitable when it is not. Recalculate the rate when premiums, benefits, or wages change.
Committed Costs: What You Have Already Promised to Spend
A job’s cost picture has three parts, and keeping them separate is what makes the budget useful:
| Column | What it holds | Example |
|---|---|---|
| Incurred costs | Costs actually incurred: labor worked, materials received, subcontract work performed | $210,000 posted to date |
| Open commitments | Signed purchase orders and subcontracts not yet incurred | $40,000 of material ordered, $80,000 subcontract signed |
| Estimated cost to complete | Everything still needed, including the open commitments | $175,000 |
A budget report that counts only invoices shows room that is already spoken for. A project manager who sees $120,000 “left” without the $120,000 of commitments can keep spending into an overrun that surfaces weeks later. Open commitments belong in the forecast of the job’s final cost, but they are not incurred costs, and they do not count as progress on a percent-complete calculation until the work or material is actually received. The revenue standard’s cost-based measure of progress is built on “costs incurred” relative to total expected costs (paragraph 606-10-55-20 in ASU 2014-09), not on amounts committed.
Owned Equipment: An Internal Rate Without Double Counting
Charging an owned machine’s full cost to whichever job is running when a payment clears is wrong, and leaving it all in overhead is just as wrong, because machine-heavy jobs then look cheaper than they are. The fix is an internal hourly rate built from the annual cost of owning and operating the machine:
- Ownership costs: depreciation, interest on the money tied up in the machine, and insurance.
- Operating costs: fuel, maintenance, and repairs.
- Divided by expected annual hours of use.
Two things stay out. Loan principal payments are not a cost of using the machine; they repay financing whose cost is already captured through depreciation and interest, so adding them counts the machine twice. And the purchase price itself enters only through depreciation, not as a lump.
The internal rate is a management tool, not a financial statement figure. If the interest in it is the actual interest on a loan that financed the machine, it matches an expense the books already record. If the machine was paid for in cash and the rate includes an assumed cost of the money tied up in it, that charge is a pricing and costing assumption: it belongs in job costs and bids, but it is not an interest expense in the financial statements, and the year-end job reports will not reconcile to the income statement unless the difference is tracked.
For example, assume a skid steer with $9,000 of annual depreciation, $1,800 of interest, $1,200 of insurance, $2,400 of repairs, and $3,000 of fuel, over 1,200 expected hours:
| Item | Annual amount |
|---|---|
| Depreciation | $9,000 |
| Interest | $1,800 |
| Insurance | $1,200 |
| Repairs and maintenance | $2,400 |
| Fuel | $3,000 |
| Total | $17,400 |
| Internal rate (17,400 ÷ 1,200 hours) | $14.50 per hour |
Forty hours on one job charges that job $580. Compare the hours actually charged out with the 1,200 expected: a machine that sits idle for long stretches is costing more per working hour than its rate recovers, and only equipment costed by job makes that visible. That history also informs the earlier question of whether buying a machine makes sense before the tax deduction is counted.
Overhead: Allocated, Consistently
Office rent, administrative salaries, general insurance, and the owner’s time spent managing rather than building touch every job and belong to none. Leave them out and every job looks better than the company that houses it. Allocate them by a consistent method, such as a percentage of direct cost or a rate per direct labor hour, and remember that the allocation is an estimate, not a measurement. The method matters less than applying it the same way across jobs and years.
Putting the Layers Together
Total job cost = burdened direct labor + direct materials + equipment at internal rates + subcontracts + allocated overhead
Each layer above is one term. Unburdened labor understates the largest term on labor-heavy jobs; missing equipment rates make machine-heavy jobs look cheap; omitted overhead makes every job look better than the business; ignored commitments make a job appear to have room it has already spent.
On an active job, a direct warning comes from comparing progress with spending. If a job is 40% done but has used 60% of its cost budget, costs are running ahead of progress while there is still time to act. That comparison works only if the cost side is honest, which means burdened, fully allocated, and separated from commitments.
Why the Rest of the Financials Depend on It
The work-in-progress schedule is built from costs incurred by job, so job costing errors become WIP errors, and WIP errors reach the financial statements that lenders and sureties read. The next bid starts from the last job’s cost history. For example, if last year’s similar job was costed at base wage and appeared to clear 15% when the burdened figure was 4%, a new bid priced from that history inherits the gap, and the loss looks like bad luck instead of a costing error repeated.
Setting It Up
- Adopt one cost code structure the field can use, and apply it to every job.
- Calculate the burdened rate from payroll and productive hours, and recalculate when costs change.
- Record commitments when purchase orders and subcontracts are signed, in their own column.
- Set internal rates for owned equipment from depreciation, interest, insurance, and operating costs, and charge jobs by hours used.
- Allocate overhead by one consistent method.
- Code costs to jobs as they happen, in the field, rather than reconstructing them at month-end.
This guide explains construction job costing as general information, not accounting or tax advice. Rates and allocation methods depend on your own costs and reporting needs, so confirm your setup with an accountant familiar with construction.
2 responses to “Construction Job Costing: Why Your Company Made Money and You Still Cannot Tell Which Jobs Did”