The Costing Review That Changed a Shop's Pricing

Why this matters

Most costing reviews end in a percentage. Numbers looked soft, so the shop raised prices by some amount and moved on. That works when the pricing structure is right and the level is wrong. It does nothing at all when the structure itself is the problem, and it usually makes things worse, because a percentage applied to a broken structure raises the price on exactly the work that was already profitable and loses you those customers first.

This is a walkthrough of a review that went the other way. The shop went looking for a rate problem, spent six weeks eliminating three plausible causes, and found that their single largest pricing instrument was averaging across a population it no longer described. The correction was structural, and the arithmetic that exposed it hinged on one distinction most shops never make.

The first signal

A nine-technician shop. Revenue had grown for three consecutive quarters. The owner's read on the P&L was that gross margin was acceptable, sitting roughly where it had for two years. But the operating account never grew, and the draw kept getting deferred.

The owner's opening hypothesis was cash timing: receivables stretching, collections slipping. That got checked first and cleared quickly. Days to collect were flat, the aging report was not worse, and there was no pile of unbilled work. Cash was not being delayed. It was not being generated.

That is the finding that reframes the whole investigation: when margin looks acceptable and cash is not appearing, either the margin number is measured on the wrong population, or an expense sits outside the margin calculation. They went after the second one first, which is the natural order and, here, the wrong one.

Wrong diagnosis one: overhead crept up

The theory: they had added a truck, a part-time office person, and a software subscription over eighteen months. Overhead grew, gross margin did not have to move, and the money went out the bottom.

They pulled overhead as a share of revenue by quarter across two years. It was flat within about a point. Real dollars had grown, but revenue had grown alongside, and the ratio had not moved.

Why this was worth doing anyway. It closed off the most common explanation with a two-hour pull, and it produced the ratio series they used later as a control. When they eventually found the real cause, the flat overhead ratio was what proved the problem lived above the overhead line, not below it.

Wrong diagnosis two: material costs moved

The theory: supplier increases had outrun their price book.

They pulled material cost as a share of revenue over the same eight quarters. It moved less than a point and a half, and in the direction of getting slightly better, because their material pricing floated with cost by design and had been keeping up.

What ruled it out conclusively: the same test run separately on jobs where materials were a large share of the ticket and on jobs where they were a small share. If materials were the cause, margin should have degraded faster on material-heavy work. It had not. The margin problem was present on jobs with almost no material content at all, which pointed hard at labor and away from purchasing.

Wrong diagnosis three: a crew is slow

The theory that everybody privately favored. Two experienced techs had left in the past year, replacements were newer, so hours per job had crept up.

They split labor variance by technician for the quarter. The spread across techs existed but was unremarkable: no one person was carrying an outsized share of the overrun, and the newest techs were not the worst. More telling, the same overrun pattern showed up on jobs run by the two most senior people in the building.

The rule that saved them here: a cause that lives in a person shows up as variance that follows the person. When variance is spread evenly across everyone who touches a category of work, the cause lives in the work or in the price, not in the crew. They stopped the performance conversation at that point, which is also why the technicians kept reporting hours honestly through the rest of the investigation.

The cut that finally worked

Three cuts had failed: by expense category, by material intensity, by technician. The fourth cut was by ticket size.

They sorted every closed job in the quarter into large jobs and small service calls and computed margin per job separately for each group. Large jobs were comfortably positive and roughly where the estimates said they would be. Small service calls were negative.

Service calls were 214 of the quarter's closes, well over half the ticket count, and they had been reviewed as a group exactly never, because each one was small enough to be beneath notice individually.

The number that lied

The service call carried a single flat price built years earlier on a model of 1.0 hour on site plus 0.4 hours travel, so 1.4 crew-hours covered by the price.

The first pull looked fine. Median on-site time across the 214 calls was 1.0 hour, dead on the model. The office manager's reasonable conclusion was that the service call was priced correctly and the problem was elsewhere.

That conclusion was wrong, and the reason is the single most useful thing in this case. A flat price is collected on every call regardless of length, so what determines whether it pays is the mean, not the median. The median tells you what a typical call looks like. The mean tells you what the population costs you. Those are the same number only when the distribution is symmetric, and this one was not.

Sorted by on-site time, the 214 calls split into two clear groups rather than one hump:

Group Share of calls Count Median on-site hours
Short calls 62 percent 133 0.8
Long calls 38 percent 81 2.5

Approximating from the two group medians, 0.62 times 0.8 plus 0.38 times 2.5 puts the population mean around 1.45 hours. Compute it exactly from the raw rows before you act on it: a weighted average of two medians is not a mean, and this article is about a shop that got burned by reaching for the median when the question needed the mean. The approximation is close enough to show the shape and not close enough to reprice on. Against the modeled 1.0 hour of on-site time, the mean was 45 percent over while the median was exactly on target. Add measured travel of 0.45 hours and the average call actually consumed about 1.90 crew-hours against the 1.40 the price covered, 0.5 hours over, about 36 percent over the crew-hours the price was built on.

The real cause

Work the break-even backward. The flat price covers 1.40 crew-hours. Travel actually ran 0.45, leaving 0.95 hours of on-site time as the break-even point.

The short-call group at a 0.8 hour median finished 0.15 hours inside break-even each, so across 133 calls they contributed about 20 crew-hours of margin for the quarter. The long-call group at a 2.5 hour median ran 1.55 hours past break-even each, so across 81 calls they consumed about 126 crew-hours. Net for the quarter: roughly 106 crew-hours of unpriced labor, which in a shop of this size is about three weeks of one technician's time given away every quarter.

The structural cause: a single flat price is a bet that the population it is applied to has a stable average. Theirs did not anymore. The long-call group was concentrated in an aging segment of their installed base, and that segment's share of call volume had been climbing year over year. The price had not changed and did not need to change; what changed was the mix underneath it, which is drift in the population rather than drift in any number.

Why it hid so long

Two reasons worth naming, because they generalize past this shop:

  • Individually beneath notice. No single service call was large enough to trigger anything, and their per-job variance threshold was a percentage that small tickets rarely tripped in absolute terms. A loss that never exceeds any threshold is invisible to a system built entirely out of thresholds.
  • The cut nobody makes. Shops reflexively cut by job type, by technician, and by month. Cutting by ticket size is unfamiliar, and it was the only cut that separated the two populations.

The fix, and why it was not a price increase

They considered raising the flat price to cover the 1.45 hour mean. That would have made the short calls, 133 of 214 tickets and their most competitive, price-visible work, substantially more expensive in order to subsidize a segment those customers had nothing to do with. It would also have left the long calls only just covered, and would have failed again as the segment mix kept shifting.

What they did instead had three parts:

  1. Redefined what the flat price buys: diagnosis plus the first hour of on-site time, plus travel, stated plainly to the customer at booking. The instrument stopped being a bet on average length and became a purchase of a defined quantity.
  2. A hard stop-and-quote trigger at one hour on site. At the one hour mark the tech either finishes within the next few minutes or calls the office with a continuation quote before proceeding. This is the piece that actually converts the long tail into revenue rather than into absorbed hours, and it only works because the trigger is a stated number rather than a judgment call.
  3. A second-tier service call price for the aging segment, priced from that segment's own measured distribution rather than from the blended one.

They deliberately did not change the large-job pricing, which the review had confirmed was working.

How they confirmed it

They set three checks in advance and read them the following quarter, on 200-odd calls of comparable volume:

  • Continuation-quote capture rate. Of calls that passed the one hour mark, what share had a continuation quote raised before the extra work happened. The target was most of them; the first quarter landed short of that but well above zero, and the misses clustered with two techs who needed the trigger reinforced.
  • Unpriced crew-hours on service calls. The headline number, computed the same way as the 106 hour baseline. Any real reduction confirms the mechanism, and computing it identically quarter over quarter is what makes it a control rather than a new number.
  • Short-call volume. The counter-signal. If the restructure had scared off the profitable short-call work, that count would fall, and the fix would be worse than the problem. It held roughly flat, which is what told them the structure change had landed on the right population.

What would have changed the conclusion

A unimodal distribution. If the 214 calls had formed a single hump with a mean near the median, then the flat price simply would have been set too low, and a straightforward increase would have been the correct and complete answer. The structural fix is only right because the population was genuinely two populations. Always plot the distribution before choosing between a level change and a structure change.

Variance that followed a technician. Had the long calls concentrated on specific people rather than on a customer segment, the diagnosis would have been training or method, and repricing would have institutionalized a performance problem as a permanent cost.

A shrinking rather than growing long-call segment. If the aging segment's share had been falling, the honest read is that the flat price is temporarily mispriced against a population that is correcting itself, and the right move is to watch it for another two quarters rather than rebuild the instrument.

Thin data on travel. The entire break-even rests on travel being 0.45 hours rather than the modeled 0.4. Had travel been unmeasured and assumed, the 0.95 hour break-even would have been assumed too, and every conclusion downstream of it would have inherited that guess. Measure the input the break-even is most sensitive to before you trust the break-even.

References

  • U.S. Small Business Administration (SBA), pricing strategy and cost analysis guidance for small business
  • Trade-standard practice for flat-rate pricing and service-call structure in field service
  • See related: The Job That Looked Profitable and Was Not, How to Find the Job Types You Consistently Underbid, The Signs Your Estimating Is Drifting, The Time Sink Job: Recognize and Price It