All insightsFinance & Cash Flow

Why Do You Only Find Out a Job Lost Money After It Closes?

Margin leaks across timesheets, parts, subcontractor invoices and billing. Here is how to link them so you see a job's profit while there is still time to change it.

The Ninjaz Group8 min read

Most operations leaders can tell you what a job was supposed to earn. Far fewer can tell you what it is earning right now. The quote assumed a healthy margin, the work is half done, and the only honest answer to "how are we tracking?" is a shrug followed by a promise to check once finance closes the books.

That delay is the problem. A job that loses money rarely does it in one dramatic moment. It leaks: an extra day on site, a part bought at a rush price, a subcontractor invoice that lands three weeks late, a change request nobody billed. Each leak is visible to someone, but never to the person who could act on it.

This article explains why that happens, how to diagnose it in your own business, what it costs, and how to build job costing visibility that works while the work is still in flight.

Why margin only appears after the job closes

Job profitability is the sum of several cost streams that live in different systems, owned by different teams, updated on different schedules.

Labour sits in a time tracking tool, a field service app, or timesheets someone keys in on Friday. Parts leave a stockroom and are recorded in an inventory system, sometimes at issue and sometimes when a pick list is reconciled. Subcontractor costs arrive as invoices in an accounts payable inbox, long after the work was done. Billing lives in the finance system or ERP, driven by milestones that the project management tool tracks but finance never sees. The budget may be a spreadsheet built at quote time.

No single system tells you the margin. You get it only by joining all of them to the same job, and in most companies a person does that join, once, at the end. Finance exports from three places, matches job numbers by hand, and discovers that the code on the time entries doesn't match the code on the purchase orders. By then the crew has moved on and the customer has been invoiced.

Three habits make it worse:

  • Actual costs post late, so the cost to date on any report is understated and looks healthy.
  • Job identifiers differ across systems, so costs land on the wrong job or on none.
  • Budgets are static, so nobody can compare cost to date against percent complete.

How fragmented systems hide a loss

Consider a group with twelve locations that installs and services equipment at customer sites. A mid-sized job is quoted at forty labour hours, a defined parts list and one subcontracted electrical task, for a fixed price with two billing milestones. The project manager tracks progress in a project management tool. Technicians log hours in a field service app. Parts are issued from each branch's inventory. The electrician's invoice goes to accounts payable at head office.

Midway through, the site turns out to need extra cabling. Technicians spend two more days. One branch is out of a component, so someone buys it locally at a higher price and files an expense. The electrician returns for a second visit. Nobody did anything unreasonable. But the project tool says 60 percent complete, the field app's hours look fine because the extra days haven't synced, the purchase awaits approval, and the second electrician invoice isn't in yet.

At close, finance sees a margin far below the quote. The extra work was never billed because nobody tied it to the milestone schedule. The loss wasn't hidden by bad people or bad software. It was hidden in the gaps between systems that each did their own job correctly.

How to diagnose where your visibility breaks

Before changing anything, measure how late your numbers really are. Pick five recently closed jobs, including one that surprised you, and work through this list.

  1. Reconstruct the timeline. For labour, parts and subcontractors, note when each cost was incurred and when it appeared on a job cost report. The gap is your latency for that stream.
  2. Compare margins at three points. Look at quoted margin, margin a quarter of the way through, and margin at close. If you can't produce the middle one, you've found the gap.
  3. Check identifiers. Does the same job number appear in the project tool, time entries, inventory issues, purchase orders and invoices? Count the costs that needed manual re-coding.
  4. Trace unbilled work. List change requests, extra visits and added materials, and mark which were invoiced.
  5. Ask who sees the margin, and when. If the answer is "finance, after close," the people who can change the outcome are working blind.

Most companies find that one stream, often subcontractor cost or parts issued, carries the longest delay. Start there.

What late discovery actually costs

The visible cost is the margin lost on the job. The wider costs are easier to miss.

Time. Finance teams spend days each month-end chasing codes and reconciling exports instead of analysing results. Project managers rebuild cost histories from memory when a customer disputes an invoice.

Inventory. When parts issued to jobs aren't recorded promptly, stock counts drift. Branches reorder what they believe is missing, hoard what they can't trust, and make rush purchases at premium prices.

Lost deals and bad pricing. If you learn actual cost only after close, the next quote rests on an estimate you already know was off. You underprice the work you estimate worst, win it more often, and grow into losses quietly.

Mistakes. Unbilled change work, duplicate supplier invoices and costs posted to the wrong job all come from the same missing join.

Burnout and customer frustration. Teams get pulled into end-of-job firefighting. Customers receive late, corrected or disputed invoices, or a sudden conversation about extra charges that should have been raised while the work was under way.

What in-flight margin visibility requires

Real-time project margin is a data problem first and a dashboard problem second. Four things have to be true.

  • One job record. Every system references the same job, project or contract identifier, created once.
  • Costs captured at the event. Hours are logged on site in the field service or time tracking tool, parts are recorded when issued from inventory, and subcontractor commitments appear when the purchase order is raised, not when the invoice arrives.
  • Billing joined to cost. Milestones, progress invoices and approved changes from the finance system or ERP sit beside cost to date.
  • A live comparison to budget. Cost to date, committed cost, billed amount and percent complete are measured against the original estimate, with thresholds that trigger alerts.

Committed cost deserves emphasis. A subcontractor PO or parts order is money you have already agreed to spend, even without an invoice. Including it is the most effective way to detect cost overruns early, because it closes the gap between doing and paying.

Percent complete needs an honest source too. A project management tool can supply it, but tie it to something measurable, like milestones completed or work orders closed, rather than a gut-feel slider.

A useful margin dashboard is narrow. For each active job it shows quoted margin, projected margin, cost to date, committed cost, billed to date and percent complete, sorted by variance rather than by job number. Leaders at multi-location companies also need the same view rolled up by site, job type and manager, so a pattern across branches is visible before it becomes a quarter-end surprise.

Steps to get margin visibility without a big-bang project

You don't need to replace your ERP or field tools to get there. A sequence that works:

Start with one job type. Choose the work where margin varies most, such as installations or fixed-price service contracts, and define its cost structure: labour hours by role, standard parts, subcontract items and billing milestones.

Standardise the job key. Decide where the job ID is created, usually the ERP or project tool, and make every other system use it. Reject time entries and purchase orders that lack a valid job.

Shorten the slowest stream. If technicians log hours weekly, move to daily mobile entry. If parts are issued on paper, scan at issue. If subcontractor cost arrives only by invoice, require POs with job codes.

Set margin thresholds. Agree what triggers a review, such as projected margin falling a set number of points below quote, or labour reaching 80 percent of budget before 60 percent of milestones are done. Give each alert an owner.

Review weekly, by exception. A fifteen-minute look at flagged jobs beats a monthly review of all of them. Then feed actuals back into quoting by job type.

How The Ninjaz Group approaches it

The Ninjaz Group is a managed-services partner for multi-location enterprises, including automotive dealer groups, energy and industrial companies with field sites, field service, real estate and retail networks. For job margin, the work usually isn't choosing new tools. It's linking the ones you already own.

Engagement starts with a Blueprint: we map the operation and find where work is done twice, where data goes stale and where money leaks. For job costing, that means following a job from quote to final invoice and marking where each cost stream is recorded, by whom, and how late. You keep the map whether or not you continue with us.

Build & Link comes next, with no rip-and-replace; software you've already paid for stays. Through Managed Link, the integration layer Ninjaz builds, owns and maintains, the Ninjaz Operating Platform connects to the ERP, finance system, inventory or WMS, CMMS and other systems you run. Its unified data layer keeps one record per customer, asset and order, so labour, parts, subcontractor and billing activity can attach to the same record instead of being reconciled afterwards.

On top of that, the Command Center shows live KPIs and alerts across locations, so a leader can see which jobs at which sites are drifting from plan, and workflow automations can route an alert to the right person. Reports, roles and an audit trail let finance see where each number came from.

Return to the twelve-location group. With the systems linked, the extra cabling hours could reach the job record the day they are logged, the locally bought component could be coded to the job at purchase, and the electrician's second visit could show as committed cost once the PO is amended. Projected margin dips below threshold on day two, the project manager is alerted, and the change is priced and billed as a variation while the customer is still on site. The same tools are in use. What changed is that they now share one job record.

Operate follows: Managed Business Operations covers managed IT and day-to-day running after go-live, so integrations don't quietly break when a system changes.

There is a limit worth stating. The platform can only show what the underlying systems capture. If nobody logs time, no connector will invent it. The Blueprint is where those process gaps get named, and closing them matters as much as the integration.

Start with one job you already know

Take one job that closed worse than expected and ask the question in the title: when could we have known? If the honest answer is "weeks earlier," the fix is probably linking, not replacing.

Run the five-job diagnostic above, find the slowest cost stream, and fix that first. If you'd like help mapping where your margin data goes stale across locations, book a consultation. If you'd rather see how a connected view works in practice, watch the platform demo.