Growth isn’t a treatment for a bad job margin. It’s a photocopier. If every additional completed job leaves less contribution than it consumes, more sales produce a larger pile of invoices and a larger hole underneath it.
Busy crews make this easy to miss. Revenue rises. The calendar fills. The dispatch board looks like a victory lap. Then cash gets thinner, because you’ve bought more of the exact work that can’t carry its own weight.
Call the control point completed-job economics: the quoted price tested against the revenue actually earned and the resources actually consumed by one finished job.
A price is a promise about a unit. Your job file is where that promise meets labour, materials, travel, payment charges, discounts, rework, and capacity. The quote gets to be optimistic once. The completed job doesn’t.
The Unit
Start with the decision you are actually making. A field-service manager deciding whether to accept or reprice work needs a completed job. A growth lead deciding whether to buy another customer needs an acquired customer. A dispatcher watching scarce technician-hours needs a service-hour or appointment view. A branch lease needs a location-month. These are nested units, not four arguments about the one true denominator.
Build your job unit from three records:
- The commercial record — order, contract, or invoice — states what was sold and the price terms.
- The delivery record — completed job, shipment, occupied night, or service period — states what was actually delivered.
- The resource record — materials, technician time, kilometres, support contacts, or payment charges — states what the delivery consumed.
The join matters more than you would like. One contract can produce four jobs, and a job can require a return visit. If you can’t price and manage that return visit independently, it stays part of the original job. If the contract price covers several service events, assign the revenue across those events before anyone calls one visit profitable.
IFRS 15 makes a related accounting distinction, since distinct performance obligations receive transaction price by relative stand-alone selling prices. Your management unit need not be an IFRS performance obligation, but neither analysis lets an invoice hide several economic events in a trench coat.
| Unit choice | Decision | Included revenue | Traced costs | Capacity implication |
|---|---|---|---|---|
| Completed job | Accept, quote, reprice, or schedule work | Realized job revenue after discounts, rebates, and credits; bundled revenue assigned to delivered events | Technician time, materials, travel, payment fees, subcontracting, disposal, warranty, and rework | Pair the job with technician-hours, vehicle capacity, machine-hours, or appointment slots |
| Customer | Acquire, retain, or change relationship terms | Jobs and recurring revenue rolled into the customer relationship | Acquisition spending, service burden, repeat jobs, refunds, and support | A profitable relationship can still contain jobs that consume scarce evening or emergency capacity |
| Order | Price fulfilment and promotion | Completed transaction revenue, commissions, and delivery fees | Fulfilment, promotion, refunds, merchant terms, and direct generation expense | Small orders can carry the same support or delivery burden as larger orders |
| Location | Open, close, staff, or renew a site | Jobs delivered through the branch or trade area | Lease, local supervision, utilities, scheduled capacity, and job contribution | Expansion can require a new vehicle, shift, warehouse, crew, or location before volume arrives |
That table isn’t an invitation to calculate four dashboards because spreadsheets are cheap. It’s a boundary check. The unit earns its place only if changing it changes an action.
The Quote
Quote economics aren’t actuals wearing a clean shirt. Keep them in separate columns.
The corpus’s invented drain-cleaning job is a tidy illustration. At a $310 price, expected technician labour of $72, materials and disposal of $26, card and booking costs of $18, and travel and vehicle cost of $44 leave expected contribution of $150 per completed job. That estimate is useful because it makes the economic promise visible before you fill the calendar.
But it’s still a promise. A distant afternoon appointment that adds 50 minutes of paid driving and regularly cancels a second booking doesn’t become healthy because your company-wide average is healthy.
The response belongs to the job mechanism: a zone surcharge, clustered service days, a higher minimum ticket, or a decision to stop serving that area.
Raising every price is often the corporate version of repairing a leak by turning up the water pressure.
Record your quote with its scope, exclusions, validity, payment terms, change authority, discount reason, and the risk it assigns.
A firm-fixed-price structure puts you at risk for underestimated work unless an adjustment applies. Time-and-materials moves quantity risk toward the buyer, but federal rules still require fixed labour-category rates, surveillance, and a ceiling the contractor exceeds at its own risk.
Different invoice formats are different risk arrangements, not different fonts.
Actuals
When the job closes, use the completed work to rebuild your unit. Compare your estimated and actual economics by job type, estimator, crew, geography, and source channel. The variance answers a specific question:
- Price variance — was the realized price reduced by a discount, credit, or concession?
- Scope variance — did the work include a callback, exclusion, change, or rework the quote didn’t govern?
- Execution variance — did actual labour, materials, travel, subcontracting, disposal, or warranty exposure exceed the job build?
Don’t confuse a cost traced to the job with a cost avoided by refusing it.
In the corpus’s repair example, 1.5 technician-hours at $32 per hour are traceable. If the technician is salaried and has unused capacity, declining that appointment may not reduce your current payroll. Likewise, a $6 dispatch-platform allocation per job can reconcile full cost without proving that one declined job saves $6. Keep traced use, allocated capacity, and avoidable cash outlay in separate lanes.
That distinction prevents two expensive errors. One is rejecting positive incremental work because it carries a share of idle capacity. The other is accepting a job that looks positive only because the quote ignored costs that really do respond to it.
Both errors begin with the same lazy phrase: “our cost per job.”
Find the Losing Type
Use the shape of your numbers to find the broken stage.
Revenue grows while the contribution pool shrinks → the job unit is losing
Added volume is multiplying a per-job loss. Stop treating utilization as proof of margin, and isolate the job types whose completed contribution is negative.
Quoted margin differs from completed-job margin → the estimate or delivery boundary is broken
Assign actual labour, materials, discounts, travel, rework, and warranty exposure to the completed job, then identify whether price, scope, or execution caused the variance.
Average customer margin looks fine but one channel loses → the blended unit is broken
Segment by channel, geography, job type, crew, and estimator. You’ve averaged incompatible work into a number that can’t make a decision.
Jobs are positive until the schedule fills, then results deteriorate → the capacity view is broken
The next booking may displace better work or trigger a capacity step. Read contribution beside technician-hours, vehicle space, appointment slots, or machine-hours.
A job is charged with rent, software, and supervision, but declining it changes none of those outflows → the incremental-cost test is broken
Keep the full-cost reconciliation, but don’t call allocated fixed cost an immediate saving.
A period average improves while recent work gets worse → the mix and cohort view is broken
Mature dense work can hide newly acquired distant, discounted, or support-heavy jobs. Test the next comparable tranche, not the historical blend.
The corpus’s invented cleaning example shows why this isn’t a semantic complaint. Its average contribution is $75 per completed job. The central zone contributes $96. The outer zone loses $18, because each crew spends an extra 70 minutes travelling while the advertised price stays unchanged.
Another 500 outer-zone jobs therefore worsens economics even if revenue, utilization, and customer count all rise.
The average was arithmetically correct and operationally useless. That’s a dangerous combination.
Capacity
Contribution is a screen for work inside your capacity band. It isn’t proof that you can grow without changing the band.
A low-contribution job may be worth taking in an idle slot. The same job may be destructive in a fully booked emergency window, because it displaces a better one.
And a plan can cross a step. The corpus’s invented cleaning company earns $35 contribution per job with openings, then needs a $5,400 monthly supervisor once weekly volume exceeds 240 jobs. The 241st job didn’t create the whole supervisor cost, but an expansion plan for another 80 jobs has to absorb it.
Capacity you supply also needs its own line. In one time-driven activity-based-costing example, a customer-service department supplied 700,000 practical-capacity minutes in a quarter and used 578,600 of them, assigning about 83% of expense to productive work.
The following period showed 106,400 unused minutes. Idle capacity shouldn’t vanish, and it shouldn’t be mechanically stuffed into every ordinary transaction until the job margin looks criminal.
Monday
Pick your last ten completed jobs. Don’t begin with the ten largest invoices — begin with completed jobs, because delivery is the event that consumed the resources.
- Put quote and actual side by side: realized revenue, labour, materials, discounts, rework, travel, payment fees, subcontracting, disposal, and warranty exposure.
- Tag each job by job type, estimator, crew, geography, and source channel; preserve the order or contract identifier where one sale created several jobs.
- Flag the losing types, then state the decision beside each: reprice, change scope, add a surcharge, cluster routes, change the channel, use idle capacity deliberately, or stop accepting the work.
Reconcile upward after that: jobs to customer or channel, customer or channel to location, location to the management income statement.
Name the items you deliberately keep outside the job view — central payroll, financing, taxes, unallocated software, and timing differences.
A unit that can’t add back to the controlling accounts isn’t a unit. It’s a sales meeting with decimals.
Growth multiplies the margin already attached to the completed job. Completed-job actuals turn a quoted margin into a decision.
Don’t buy more demand until the job can carry itself. Price the completed unit. Then multiply it.