The Cost Categories Worth Separating
Why this matters
A job that came in 12% over cost tells you nothing you can act on. A job whose consumables came in at nearly three times their estimate while everything else landed close tells you exactly what to fix, and the fix takes ten minutes. Same job, same total, different category structure.
Categories are not accounting decoration. They are the resolution of your measurement. Too few and every variance is an unattributable blur. Too many and the crew starts guessing which bucket a task belongs in, which corrupts the data faster than having no categories at all. This card is about where the line sits.
The test for whether a split is worth making
One question decides it: would the two halves lead to different corrections?
If labor runs over, you change template hours or a process. If material runs over, you change a takeoff or a price-book figure. Different owners, different artifacts, different fixes, so labor and material are separate categories in every shop that costs jobs at all.
Now apply the same test to a proposed split you are less sure about. Splitting material into specified equipment and small consumables passes: an equipment miss means your supplier pricing aged out, a consumables miss means your takeoff never listed them, and those are two different problems fixed by two different people. Splitting labor by day of the week fails: whatever you find, the correction is the same, so the split buys nothing and costs a field decision every time somebody logs time.
The cost of a split is real and it is paid by the crew. Every additional category is one more judgment call at the moment of logging, and judgment calls at logging time are where data quality goes to die. A split has to earn that.
The four that always earn their keep
Every shop, every trade, no exceptions:
| Category | What goes in it | The correction it points to |
|---|---|---|
| Labor | Hours worked on the job, at burdened cost | Template hours, sequencing, crew mix, scheduling |
| Material | Parts and materials consumed on the job | Takeoff completeness, price-book cost figures |
| Subcontract and rental | Outside labor and equipment brought in for this job | Sub pricing, whether to self-perform, rental scheduling |
| Other direct | Permits, disposal, freight, specialty testing, anything job-specific that is none of the above | Whether these are being quoted at all, or absorbed silently |
That fourth row is the one shops skip, and it is where the quiet leaks live. Permit fees, dump fees, expedited freight, and specialty rentals are real, job-specific, and frequently never appear on the estimate because they do not feel like cost. They land in overhead, disappear into the general pool, and every job in that category is quietly less profitable than it reads. If a cost is caused by one job, it belongs to that job.
The splits inside labor worth making
Two are worth the field friction. A third usually is not.
Productive against non-productive time. Wrench time on the customer's problem versus staging, loading, cleanup, waiting, and paperwork. This split is uncomfortable because the label sounds like a judgment on the tech, and it is not: non-productive time is necessary and it is real cost. The reason to separate it is that it corrects differently. Productive time over budget means the template hours are wrong. Non-productive time over budget means your process is wrong, and the fix is staging, truck stock, or scheduling. A shop that merges them sees a labor overrun and goes and adjusts a template number to cover a loading problem, which permanently overprices the work.
Role or rate class. Lead tech, journeyman, helper, apprentice. Worth splitting when your crews genuinely mix rate classes, because a job that used a lead where the estimate assumed a helper has a cost overrun with zero hour overrun, and merged hours will never show it.
Regular against premium hours is the third, and it is worth it only if you run meaningful overtime or after-hours work. If you do, an after-hours job that lands exactly on estimated hours can still be well over on labor cost, and the correction is a pricing decision for after-hours work rather than an estimating one. If you rarely run premium hours, skip the split.
The splits inside material worth making
Specified material against consumables. Specified means the parts and equipment that were named in the takeoff. Consumables means fasteners, fittings, tape, sealant, wire, small hardware, cutting and grinding supplies. They fail in completely different ways: specified material misses on unit price, consumables miss on never having been listed at all.
They also differ in scale in a way that hides the problem. Consumables are usually a small share of the bid, so an enormous multiple on consumables can hide inside an unremarkable total. That is the exact shape of the worked example below.
Waste and re-order is a third bucket worth having if your trade cuts material to length. Material that was bought and not installed is a different problem from material that cost more than you thought, and separating it tells you whether your takeoff needs a waste factor or your pricing needs a refresh.
What does not belong on the job
Shop overhead. Rent, insurance, office wages, the truck payment, software, the owner's time. These are real costs and they must be recovered, but recovering them happens through your billing rate, not by sprinkling an allocated share into each job's cost categories.
The reason is specific to variance work: an allocated overhead figure moves with your volume, not with the job. A slow month spreads the same fixed cost over fewer jobs, so every job's allocated overhead rises, and every job's cost variance goes unfavorable for a reason that has nothing to do with how the job was run or estimated. You would spend a review meeting hunting for a cause that lives in the sales pipeline.
Keep job cost as direct cost only. Compare gross margin at the job level, and handle overhead recovery at the shop level where it belongs.
Categories people split that they should not
- Line-item-level part costing on short service calls. Coding every fitting individually on a two-hour ticket costs more tech time than the information is worth. Roll it into consumables and watch the bucket.
- Splitting by anything the crew cannot answer instantly. If coding a block of time requires a judgment call, half your crew will make it one way and half the other, and the resulting data is not comparable across people. A category has to be obvious at the moment of logging.
- Splitting to make a report look thorough. Twelve categories where four would do produces twelve thin buckets, each too small for a pattern to be visible, and a crew that has stopped caring.
A worked example: the same job costed two ways
A job comes in at 1.12 times its estimated cost, 12% over. The bid's cost mix was 60% labor, 30% specified material, 5% consumables, 5% sub and rental.
Costed as one bucket: 12% over. The review meeting says labor, because labor is 60% of the bid and labor is usually the culprit. Someone adjusts a template. Nothing about the actual cause is touched.
Costed with four categories, here is what each bucket actually did:
| Category | Share of bid | Actual vs estimate | Contribution to the 12-point overrun |
|---|---|---|---|
| Labor | 60% | 1.02x | 0.60 x 0.02 = 1.2 points |
| Specified material | 30% | 1.05x | 0.30 x 0.05 = 1.5 points |
| Consumables | 5% | 2.70x | 0.05 x 1.70 = 8.5 points |
| Sub and rental | 5% | 1.16x | 0.05 x 0.16 = 0.8 points |
| Total | 100% | 1.12x | 12.0 points |
Consumables were 5% of the bid and drove 8.5 of the 12 points, about 71% of the entire overrun, at a multiple of 2.70x their estimate. Labor, the bucket everyone suspected, contributed 1.2 points and was essentially right.
The correction is now obvious and cheap: the takeoff for this job type has a consumables allowance that is roughly a third of what the work actually consumes. Fix the allowance, or move to a percentage-of-material allowance sized from your own history. No template hours change. No conversation with the crew about speed.
Now look at what a partial split would have shown. A shop that separates labor and material but keeps consumables inside material would read a merged material bucket at (0.30 x 1.05 plus 0.05 x 2.70) divided by 0.35, which is 0.450 divided by 0.35, or 1.286 - about 29% over on material. That reads as a supplier price problem. Somebody spends a week renegotiating with a supplier whose pricing was fine at 1.05x, and the consumables allowance stays wrong.
That is the argument for the split in one number: the merged bucket did not just lose resolution, it pointed confidently at the wrong cause.
What changes the answer
- Trade mix. A trade whose jobs are dominated by one large piece of equipment needs the specified-material split most, because a single unit price drives the whole job. A trade that is mostly labor with a bag of small parts needs the consumables split most. Split where your money actually is.
- Job size. On short service calls, four categories are plenty and further splitting is pure overhead. On multi-day project work, add phase coding on top of the categories, because knowing that labor ran over is much less useful than knowing which phase it ran over in.
- Heavy subcontracting. If subs are a large share of your delivery, split subcontract labor from rental. They fail differently: subs miss on scope definition and coordination, rentals miss on duration and on idle days.
- Self-performed versus purchased decisions. If you are deciding whether to keep doing something in house, you need labor split finely enough to isolate that work. Add the split for the duration of the decision and collapse it afterward rather than carrying it forever.
How to verify your categories are working
- Every category has produced a distinct correction in the last year. If a bucket has never once pointed at a fix that the other buckets would not have found, it is not earning its friction. Merge it.
- The categories sum to the job total, and the shares sum to 100%. In the example, 60 plus 30 plus 5 plus 5 is 100, and 1.2 plus 1.5 plus 8.5 plus 0.8 is 12.0. If your contributions do not reconcile to your headline variance, something is being counted twice or landing outside the structure.
- No category is a dumping ground. If "other direct" or "miscellaneous" is consistently your largest variance, it is not a category, it is a shrug. Look at what is actually in it and give the recurring items their own home.
- Two different people code the same job the same way. Take one completed job, have two people code it independently, compare. Disagreement means your category definitions are ambiguous, and ambiguity at the coding step makes every downstream analysis unreliable no matter how good the arithmetic is.
References
- U.S. Small Business Administration: job costing, direct cost, and overhead guidance for small contractors.
- Standard construction accounting practice on direct cost categories and overhead allocation.
- See related: How to Compare Estimated Against Actual on Every Job.
- See related: How to Capture Actual Costs Without Slowing the Crew.
- See related: How to Find the Job Types You Consistently Underbid.