ProductSolutionsTradesPricingArticlesContact Log in Start free trial

Field & cost

The cost code list nobody decided, and how to build one for your trade

For the PM or office manager at a commercial sub who has to decide what the codes are before anybody can code an hour to one.

9 min read

Every article about job costing tells you to code your hours. Almost none of them tell you where the code list comes from.

So in most subcontractor offices it came from somewhere accidental. An estimator’s spreadsheet tabs. The chart of accounts in QuickBooks. A list a controller pulled off the internet in 2019. Nobody decided it, which means nobody owns it, which means half the field codes to “general” and the reports are a shrug with numbers on them.

This article is about the list itself: where it should come from, how many codes belong on it, the five kinds every sub needs, and how it should line up against the schedule of values you bill. Tracking hours by job and cost code is the other half — the discipline that gets an hour onto the right code once. That one is about where the hours land. This one is about what they land on.

A code earns its place by changing a decision

Here is the whole test, and it kills most code lists on contact.

A cost code is worth having if the variance on it would make you do something different.

If taping runs thirty percent over budget, you reassign crew, revisit the next bid, or go find the condition that caused it. That is a code. If “job trailer signage” runs thirty percent over, you do nothing — you never had a plan for it and you never will. That is not a code. That is a line in overhead.

Run every candidate code through that question and the list gets short fast. Short is the goal. A list with sixty codes does not give you sixty insights; it gives you one insight and fifty-nine wrong entries, because the foreman in the lift picking from a sixty-item list on a phone is guessing.

The three places your list should not come from

Not CSI divisions. CSI is a language for organizing a specification so twenty trades can bid the same building. It is sorted by material and product, because that is what a spec section is. Your money is spent in a sequence of operations. A division number tells you which products the architect specified; it does not tell you that your layout crew lost four days chasing a slab that was out.

Not your chart of accounts. The chart of accounts answers “what kind of expense was this” for your tax return and your banker. Job costing answers “which operation on which job ate the money.” They overlap on materials and they diverge completely on labor, which is the half that actually moves. Keep them linked — every code should roll up into a cost type your accountant recognizes — and keep them separate as lists.

Not the GC’s schedule of values. This is the subtle one, and the next section is about it, because the SOV is close enough to be tempting and wrong in a specific way.

The right source is narrower than all three: your own production sequence, in the order your crews actually do the work, in the words your foremen already use out loud. Walk one typical job start to finish with your best foreman and write down what he calls each stretch of it. That transcript is your first draft, and it will be better than anything you could have downloaded.

Codes and SOV lines are different animals

Your schedule of values is a billing instrument. It is negotiated with the GC, it is shaped to get you paid early and smoothly, and once the first pay application goes in it is usually locked for the rest of the job. Your cost codes are an internal measuring instrument. You can rename one tomorrow and nobody outside the office needs to know.

Forcing them to be the same list breaks both. An SOV built to match your cost codes exposes more of your means and methods than you want in a GC’s hands, and it usually bills badly. Cost codes built to match an SOV inherit whatever horse-trading produced that SOV, including the line you loaded on purpose.

What you need is not identity. It is a clean direction of travel:

  • Many codes to one SOV line is fine. “Hang,” “finish” and “patch” rolling into one billed line for Level 3 interior walls is normal and useful.
  • One code spanning several SOV lines is the trap. When a single code collects cost from two billed lines, you can no longer answer whether either line is making money, and “is this line profitable” is the only question the whole exercise exists to answer.

So the rule is: every SOV line must be answerable from the codes underneath it. Write the mapping down once, on one page, and keep it with the budget. It takes twenty minutes and it is the artifact that makes a job cost report mean something at a draw meeting.

The five kinds of code every sub needs

Most lists have only the first kind. The missing four are where the money hides.

1. Production phases, in sequence. The operations you bid, in the order they happen. Six to ten of these covers a typical job for most trades. Numbered in sequence so the report reads like the job: layout, rough-in, hang, trim, test, punch.

2. Indirect field work. Real hours, no installed quantity attached: layout, mobilization and demobilization, material handling and stocking, housekeeping and cleanup, protection, hoisting and waiting on a hoist. Subs who skip these codes do not stop paying for the hours — they bury them in production codes and then wonder why their units per hour never match the bid. On a tight downtown job, indirect field work can be a meaningful share of the labor, and if you cannot see it you cannot price it next time.

3. Rework. One code, separate, not a sub-flavor of the phase it undid. Nothing else on a job cost report has the same power to change behavior, because nobody argues with the number once it has a name. Keep it blunt and keep it blameless — the point is the dollar figure, not whose it was.

4. Extra work, with its own code per change order. This is the single most common reason a profitable job reads as a loser. Crew does out-of-scope work, the hours land on the base contract phase they resemble, the base contract looks blown, and the change order revenue shows up later with no cost attached to it. Now both numbers are lies. Every approved change order gets its own code. Work done on a promise with nothing approved yet gets a pending code, so billing extra work without a signed change order is at least a visible exposure rather than an invisible one.

5. Backcharge and others’ damage. Hours spent fixing something another trade broke are not your production cost, and they are not overhead either. They are a receivable until somebody decides otherwise. Code them that way from the day they happen, because a backcharge argued three months later with no hours behind it is an argument you lose.

Naming, numbering, and the one list rule

Short, spoken, specific. The code name has to be the thing your foreman would say. “Hang 2nd flr” beats “09 29 00 Gypsum Board Assemblies.” If a name needs a legend, the field will pick the wrong one.

Number in job sequence, with gaps. Steps of ten, so next year’s insertion does not renumber the list. Sequence matters more than you would think: a report sorted in the order the work happens is readable by anyone, and an alphabetical one is readable by nobody.

One list for the whole company. This is the rule people break first and regret longest. The moment job A has a code list and job B has a slightly different one, you can never compare them, and comparison was the point. Use the same codes everywhere and handle the differences with a second tag — area, floor, building — rather than a second list.

Review it twice a year, not twice a month. After a couple of closeouts, look at which codes nobody used and which ones swallowed everything, then cut and split accordingly. Do it between jobs, never mid-job, and keep retired codes on the list as inactive so last year’s history still reads.

Three mistakes worth naming

A “general” or “miscellaneous” code. It will become your largest line. If you must have one, agree out loud that anything over about two percent of labor there triggers a conversation about what is really in it.

Codes with no budget. A code without a budgeted figure produces an actual with nothing to compare it to, which is bookkeeping, not costing. If a code is worth tracking, it is worth a number — even a rough one — in the budget.

Burden left out of the comparison. Your budget was built on burdened labor and your actuals are going to come back at wage rate unless you say otherwise. Compare like with like, which means knowing your labor burden rate and applying it on both sides.

How SubMark handles it

SubMark is deliberately opinionated here, and the honest limit comes first.

SubMark has no cost codes. Your code list lives in your own sheet; SubMark does not import it, map to it or export to it. Each job gets budget lines you write — labor, materials, subcontractor, equipment, overhead, other — with estimated, actual and variance on each, next to a live cost breakdown: labor from time logs, crew lump sums, materials invoiced and committed, QuickBooks costs and subcontractor invoices. Labor broken out by phase or work type needs phase tracking switched on; the drywall pack ships with it on, and for every other trade it is a switch in Settings, not an upgrade. So keep the code list as your own management tool. In SubMark, labor lands on the job and, with phase tracking on, on the phase — so the closest your list gets to the software is phase names that follow the same production sequence.

That constraint is the reason the advice above is “keep it short.” A list that survives contact with a phone is a list that fits a phase picker.

What the software does with the list once it is there:

  • Your trade pack loads the phase names, so the breakdown reads in your own terminology instead of a drywall company’s.
  • Hours are recorded once from the time clock or a daily log’s labor entries, and the same hours feed payroll reporting and job costing. Field users are free and unlimited, so no license decision ever decides who gets to record a day.
  • Each hour costs at the rate that applied on that date, so a raise in March does not quietly rewrite February’s margin. Labor is costed at wage rate and burden is not added to the job cost total, so apply your own burden rate when you compare against a burdened budget — mistake three above.
  • Open purchase orders show as committed material cost next to what has been invoiced, so money already spoken for is visible before the bill arrives. The live cost total and the overrun alerts count invoiced material, not committed.
  • Overrun alerts fire on the job total and separately on labor, materials and subcontractors, with both the dollar amount and the percentage.
  • Approved change orders land on the schedule of values as their own numbered lines when the job has one, which keeps extra work billed separately — the revenue half of mistake four above.

One more edge, stated plainly: T&M hours do not feed job costing actuals. That is on purpose, because a signed ticket is billing, not cost, but it does mean T&M-heavy work needs its hours logged the normal way as well if you want them in the cost picture. Job costing covers the budget-versus-actual side, and our pricing is one company subscription that includes three office users, plus a per-seat price for each one after that.

Do this in the next week

  1. Sit with your best foreman for forty minutes and write down every stretch of a typical job in his words, in order. Do not edit while he talks.
  2. Cut it to eight to fourteen codes using the decision test: would the variance change what you do?
  3. Add the four kinds you are missing — indirect, rework, extra work, backcharge — if the transcript did not produce them.
  4. Number in tens, in job sequence.
  5. Write the mapping to your SOV on one page. Many codes to one billed line is fine; one code across two billed lines gets split.
  6. Put a budget figure on every code on your next job, even a rough one, and burden both sides the same way.
  7. Publish it as the company list and stop making per-job variants.

Cost a job against budget lines you wrote yourself.

SubMark costs every job against budget lines you write, prices each hour at the rate on the day it was worked, and shows open purchase orders as committed material cost next to what has been invoiced.

Start free trial

14-day free trial, no card needed. Field users and the subs you invite are free and unlimited — see how pricing works. What SubMark does