Blog

Why Your Accounting System Cannot Tell You Which Jobs Made Money

The short answer

Most accounting systems record costs by type, not by job. So they can tell you what you spent on labour, materials and subcontractors, and they cannot tell you which work was profitable. That is a structural gap rather than a reporting gap, and no amount of reporting on top of it will close it. Job costing and work in progress have to be set up underneath.

A P&L records costs by nature. Running the work needs costs by job.

By Stephen Ninesling, FynScale

Why Your Accounting System Cannot Tell You Which Jobs Made Money

Short answer: Most accounting systems record costs by type, not by job. So they can tell you what you spent on labour, materials and subcontractors, and they cannot tell you which work was profitable. That is a structural gap rather than a reporting gap, and no amount of reporting on top of it will close it. Job costing and work in progress have to be set up underneath.

The pattern

You finish the year up on revenue and flat on profit. Everyone was busy. Some jobs clearly went well and some clearly did not, and nobody can say by how much.

Ask which of last quarter's jobs made money and the answer takes a week to assemble, comes out of a spreadsheet, and is met with a shrug because everyone knows the allocations in it were estimates.

That is not a bookkeeping failure. It is what happens when the accounting is structured for tax filing rather than for running the business.

Why the P&L cannot answer the question

A standard profit and loss organises costs by nature: wages, materials, subcontractors, equipment, fuel, insurance.

Running a services or contracting business, you need costs by job: what did this project consume, and what did we bill for it.

Those are two different cuts of the same data, and if the second dimension was never captured, it cannot be recovered later. You can allocate estimates after the fact, and that is exactly the spreadsheet everyone distrusts.

The tell is simple. If your accountant can produce a P&L in thirty seconds but a job margin report takes a week, the dimension is missing.

The four things that have to exist

A job as a real entity in the system. Not a memo field, not a customer name in the description. An actual dimension every transaction can be tagged to, whether that is a project, a class, a location or a job code depending on your system. Most systems support this and most companies never turn it on.

Labour costed to jobs. This is where the largest cost usually sits and where it is most often lost. Hours have to be recorded against a job and costed at a fully burdened rate, not the raw wage. Burdened means payroll taxes, benefits, workers comp, and any equipment or vehicle cost that follows the person.

Materials and subcontractors coded at entry. Coding at the point of entry is the only version that works. Coding later, from memory, is how the estimates creep in.

Work in progress. For any job spanning more than a month, costs incurred and revenue earned have to be recognised in the same period. Otherwise a job that consumed three months of cost and billed on completion makes two months look terrible and one look extraordinary. That is the single most common reason monthly numbers in this industry are meaningless.

Work in progress is the one people skip

It sounds like an accounting nicety and it is the difference between monthly numbers that mean something and monthly numbers that do not.

The principle: as a job progresses, recognise revenue in proportion to the work completed rather than when you invoice. Costs incurred but not yet billed sit as an asset. Amounts billed ahead of work performed sit as a liability.

Without it, your monthly profit is really a chart of your billing schedule. Companies make hiring and equipment decisions off that chart every year.

There is more than one acceptable method and the right one depends on the nature of the work. What matters far more than the method is picking one, applying it consistently, and having the schedule tie to the balance sheet.

The burdened rate is where the margin hides

Most businesses that do cost labour to jobs use the wage rate. That understates cost by a wide margin.

A person on a $30 hourly wage typically costs $40 to $48 fully burdened once payroll taxes, benefits, workers compensation, paid time off and their share of equipment and vehicles are included. That is a 35 to 60 percent uplift depending on the trade and the state.

Cost jobs at $30 and every job looks more profitable than it is, uniformly. Worse, the error is not evenly distributed: labour-heavy jobs are understated far more than material-heavy ones, so the comparison between jobs is wrong as well as the absolute number. You will systematically favour exactly the work that is least profitable.

Calculating a burdened rate is an afternoon of work. It changes which jobs you bid on.

What becomes visible once it works

Companies that put this in usually find three things in the first quarter.

A customer or a job type that consistently loses money. Almost always one everyone suspected and nobody could prove. Proof is what allows you to reprice it or decline it.

Estimating error concentrated in one area. Not random. Usually one phase, one crew, or one type of work where the estimate is habitually low. That is fixable once it is visible.

Change orders that were never billed. Work done outside the original scope, absorbed because nobody was tracking against the scope. In most services businesses this is a meaningful percentage of the year.

What it takes to fix

Less than people expect, and it happens once.

  1. Define the job dimension in your existing system. Almost always already supported.
  2. Calculate burdened labour rates by role or crew.
  3. Change the intake habits so time and materials are coded to a job at entry rather than reconstructed later. This is the part that requires the most discipline and the least software.
  4. Set the work in progress method and build the schedule.
  5. Rebuild the report as a native output rather than a spreadsheet.

The test of success: anyone can produce job margin in under five minutes, and it ties to the financial statements without adjustment.

The objection

The common objection is that the crews will never code their time properly.

That is a real risk and it is the main reason these implementations fail. Two things make it survivable. Keep the job list short enough that choosing is fast, because a dropdown of 200 open jobs guarantees bad data. And make the coding happen at the moment of the work rather than at the end of the week, since Friday recall is where the accuracy dies.

If the data going in is poor, everything above is decoration. This is a habit problem before it is a systems problem.

Common questions

Does my accounting software support this? Almost certainly. Most systems carry a project, class, job or location dimension. The more common finding is that it exists and was never configured.

Do I need construction-specific software? Not necessarily. Dedicated job costing software helps at higher volume and complexity. Plenty of services businesses run this well in a general ledger with the dimensions turned on and disciplined coding.

How far back should I go? Forward-only is usually right. Reconstructing historical job costs from memory produces exactly the unreliable numbers you are trying to escape. Start clean, and you have a trustworthy quarter within a quarter.

What if jobs are short, a day or two? Work in progress matters much less, since costs and revenue land in the same period naturally. Job-level cost capture still matters if you want to know which work types pay.

Is this the same as a percentage of completion for tax? Related but not identical. Tax method and management reporting method do not have to match, and they frequently should not. Keep the management view honest and let the tax treatment be a separate conversation with your preparer.


FynScale builds accounting operations for services businesses, including job costing and work in progress that produce margin you can act on. If your job margin currently lives in a spreadsheet, that is usually a one-time fix.