construction job costing

Construction Job Costing for Specialty Contractors: How to Read the Numbers That Matter

Job costing isn't an accounting function — it's a PM function. Here's what the mid-job report should show at week four, what a 12% rough-in overrun tells you before you commit the trim crew, and how to use closeout data to bid the next job better.

Job costing isn’t an accounting function. It’s a PM function.

The bookkeeper reconciles the job cost ledger at closeout. The controller produces the work-in-progress report for the bank. Those are accounting tasks. What the specialty sub PM needs is different: the ability to look at actual labor hours against the estimate at week four of a 40-week job and answer one question — is this job going to close on budget or not?

That question can only be answered with two things: phase-based cost codes attached to every hour that goes in, and an estimate broken out by those same phases. Without both, you have payroll. With both, you have job costing.

Here’s what the numbers look like when the system is working, and what they tell you at the two moments that matter most.

The Two Moments That Matter

Job cost data is only useful at two points in a job: mid-job, when you can still do something about it, and at closeout, when the data feeds the next bid.

Mid-job is when the PM asks whether rough-in labor is tracking to the estimate before committing the trim crew at the same rate. A 12% overrun on rough-in in week three is recoverable — you investigate, you adjust, you catch it before it becomes a 12% overrun across the whole job. A 12% overrun discovered at closeout is a postmortem.

Closeout is when the PM asks what this job actually cost by phase, so the next bid for a similar job is based on data instead of a percentage adjustment on a total that doesn’t explain itself.

Both moments require the same inputs — phase codes, hourly actuals, and a phase-based estimate — but produce different outputs and drive different decisions.

What the Mid-Job Report Should Show

At week four of a 40-week electrical rough-in on a commercial office building, the PM should be looking at something like this:

PhaseBudgeted HoursActual Hours (Wk 1–4)% Variance
ELEC-ROUGHIN480538+12% over
ELEC-TRIM320
ELEC-SERVICE80

Rough-in is 12% over budget through week four. Trim and service haven’t started.

That one number — 12% over on rough-in — is the signal. What happens next depends on why it’s 12% over.

Investigate before you accept it. A 12% overrun in week one is often a learning curve — the crew is figuring out the building, the pull sequence, where the conflicts are. By week two it’s usually corrected. A 12% overrun through week four means something structural: the estimate was wrong, the building is more complicated than expected, the crew is underperforming, or there’s a scope change that hasn’t been formalized yet.

Ask the foreman before you conclude. The PM reads the number. The foreman knows why. Was there a coordination conflict on Floor 3 that cost eight hours? Did the material delivery push work to overtime for two days? Is the building just harder to pull wire through than the estimate assumed? The number tells you there’s a problem. The foreman tells you what kind.

Decide before you commit more. If rough-in is tracking 12% over budget and you’re about to start trim-out with the same crew at the same rate, you’re locking in a 12% overrun on trim-out before the first device is installed. The mid-job check is the window to investigate and adjust before that commitment happens — change the crew, renegotiate the rate, or revise the estimate and have the conversation with the owner.

None of that is possible if you don’t have hours by phase. A single “labor” code shows you total hours burned. It doesn’t tell you which phase is running over or give you the foreman context to understand why.

What the Closeout Report Should Show

At the end of a job, the closeout report is the historical record that feeds the next bid. For a specialty sub, it should answer three questions:

Did each phase close on budget, over, or under — and by how much?

The phase-by-phase variance is the only number that’s useful for bidding the next job. A total that’s $40,000 over tells you the job lost money. A breakdown that shows rough-in closed 8% under and commissioning ran 31% over tells you your rough-in estimate is solid and your commissioning estimate is broken. The next hospital job bid gets a revised commissioning line, not a blanket 8% contingency on everything.

What was the actual labor unit cost for each phase?

Lineal feet of pipe per labor hour on overhead piping. Square feet of drywall hung per crew-hour. Circuits rough-in per worker-day. These productivity metrics, built from actual phase cost data over multiple jobs, are how specialty sub estimating gets better over time. Without them, every bid is educated guesswork. With them, the estimate is built from a track record.

What was the cause of any significant variance?

The closeout report is more useful if the PM has added notes during the job — what drove the week four rough-in overrun, whether it was corrected, and what it cost. The job cost number is the outcome. The PM’s notes are the context that makes it actionable for the next bid.

The Setup Requirement: Estimate in Phase Format Before Day One

Job costing only works if the estimate is broken out by the same phases as the cost codes. An estimate that has “Labor: $180,000” and a time tracking system that separates rough-in, trim-out, and service/commissioning produces a comparison that can’t be made — one side is phase-based, the other is a lump sum.

The setup sequence before mobilization:

  1. Define cost codes by phase — the same codes the foreman will use at clock-in. Three to five phases per trade, based on how the work actually flows.
  2. Break the estimate into those phases — rough-in labor budget, trim-out labor budget, commissioning budget. Each phase has a number. Each phase has a cost code.
  3. Enter the phase budgets into the job costing system — so the actual vs. estimated comparison is possible from day one, not retrofitted at closeout.

If the estimate is built in phases and the time tracking uses the same phase codes, the mid-job report writes itself every week. Phase-based cost codes are the input. The weekly comparison is the output. The PM reads it Friday morning instead of running a custom report.

What the Accounting Integration Has to Produce

Job cost data lives in two places on most specialty sub operations: the time tracking system (where hours come in) and the accounting system (where the job cost ledger lives). For the closeout report to be complete, those two records have to match.

The time tracking system captures hours by phase — actual labor, broken out by cost code, by employee, by week. The accounting system captures costs — labor, materials, subcontract, overhead — against the estimate. If the two systems don’t talk to each other, someone is re-entering data. And when re-entered data has errors, the closeout report shows a number that doesn’t match the payroll records, and the reconciliation is a manual project.

The accounting integration has to produce one thing: approved time entries, by employee, by cost code, in a format the accounting system accepts without reformatting. For QuickBooks Online, that means time activities synced directly. For Sage 100 or Sage 300, that means a formatted CSV import file. The cost code in the time tracking system has to map to the cost code in the accounting system — once, at setup — so every subsequent export uses the right mapping automatically.

When the integration works, the closeout report in the accounting system and the closeout report in the time tracking system show the same numbers. When they don’t match, the job cost record is wrong somewhere, and figuring out where it’s wrong is the kind of Friday afternoon problem that job costing is supposed to prevent.

The Practical Test: One Number Before Noon on Friday

The job costing system is working when the PM can answer this question before noon on Friday without a phone call, a spreadsheet pull, or a request to accounting: Is rough-in tracking to budget this week?

If the answer requires pulling a report, calling the foreman, or waiting for the bookkeeper to close the week — the inputs are right but the visibility isn’t. The PM should be able to open a dashboard, look at hours by phase for the current week, and see the variance against the estimate before the crew has clocked out for the day.

Time tracking that produces real-time actual vs. estimated by phase is the difference between a PM who catches a 12% rough-in overrun in week three and a PM who discovers it at closeout. The hours were going to be logged either way. The phase code and the estimate baseline are what turn those hours into a decision.

Running a Job Where Closeout Is a Data Set, Not a Surprise

Three numbers at closeout: hours by phase, actual vs. estimated by phase, unit cost by phase. That’s the job cost record that makes the next bid better.

The work is the same either way. The cost codes and the estimate baseline are the difference between a closeout that explains what happened and one that just tells you what it cost.

See how cost codes and time tracking work together for specialty contractors, or check the pricing — it’s on the website.

Ready to simplify your business?

LogLoon helps contractors manage projects, track time, and run their crew — all in one place.

Get Started Free