Most plumbing shops run on one gear. Every job — emergency, scheduled repair, remodel rough-in, warranty callback — flows through the same intake, the same dispatch logic, the same parts assumptions. That works fine until volume climbs past a certain point, and then the cracks show up in the worst possible way: your best tech stuck on a $180 job while a $4,200 repipe waits two days, or a same-day emergency getting bumped because someone booked it into a slot meant for a leisurely faucet install.
The fix isn't more dispatchers or a bigger truck fleet. It's a service delivery model that sorts work into distinct families and treats each one differently — different promised response times, different routing rules, different parts staging, different staffing. Once you separate the work, most of the daily chaos becomes predictable.
This is the framework I wish more owners built before they hit six trucks, because retrofitting it later means untangling habits your whole team already baked in.
Why one-size delivery quietly caps your growth
The pattern that shows up across shops running 3–10 trucks: revenue grows, but margin per job stays flat or slides. Owners assume it's pricing. Usually it's mix.
When every job type shares a single queue, three things happen at once. Emergencies get de-prioritized because they don't fit the schedule cleanly. High-value replacement work gets assigned to whoever's free instead of whoever's best. And parts get stocked for the average job, which means you're simultaneously overstocked for routine calls and understocked for the complex ones.
The deeper issue is that different job families have genuinely different economics. A drain clear is a volume game — short duration, thin margin, wins on route density. A water heater or repipe is a margin game — longer duration, fat ticket, wins on being done right the first time by someone competent. Emergency work is a reliability game — you're selling response speed, and the margin comes from the premium people pay when water is spreading across their floor.
Run them all identically and you optimize for none of them.
Step one: define your job families
Before you can assign SLAs or routing rules, you need clean categories. Most shops can sort nearly all their work into four or five families. The trick is defining them by operational behavior, not by trade jargon.
Stop missing service calls and double bookings.
Plummerly helps you schedule, assign, and manage every plumbing job efficiently.
- Centralized job scheduling
- Technician dispatch & tracking
- Customer notifications
No credit card required
A useful way to classify: ask how time-sensitive the job is, how predictable the duration is, and how much the parts requirement varies.
| Job Family | Time Sensitivity | Duration Predictability | Parts Variability | Primary Objective |
|---|---|---|---|---|
| Emergency | Very high (same-day) | Low | High | Response speed |
| Standard Repair | Medium (1–3 days) | Medium | Medium | First-time fix |
| Replacement / Install | Low (scheduled) | High | Low (known list) | Margin + quality |
| Maintenance / Recurring | Low (planned) | Very high | Very low | Route efficiency |
| Project / Rough-in | Very low (booked weeks out) | Medium | High (bulk order) | Coordination |
The categories matter because everything downstream — the promise you make the customer, who you send, what's on the truck — flows from which box the job lands in. Get the sorting wrong at intake and every later decision inherits the error.
One mistake that shows up constantly: shops fold "urgent-but-not-emergency" into the emergency bucket. A slow leak under a sink isn't an emergency, but a panicked customer will describe it like one. If your intake can't tell the difference, you'll burn emergency capacity on non-emergencies and have nothing left when a real one comes in.
Step two: assign SLAs that match the family, not the customer's mood
An SLA is just a promise with a clock on it. The error most shops make is having one implicit promise — "we'll get to you when we can" — which satisfies nobody and sets no internal target.
-
Emergency — On-site within a defined window (say 2–4 hours during business hours, with an after-hours tier). This is the promise you charge a premium to keep.
-
Standard Repair — Booked within 1–3 business days, completed in a single visit when parts allow.
-
Replacement / Install — Scheduled by mutual convenience, but with a firm arrival window and a completion-same-day expectation.
-
Maintenance — Batched into route-efficient days; the "SLA" is really about hitting the planned date, not speed.
-
Project — Milestone-based, coordinated with other trades.
The important rule: an SLA you can't staff for is just a lie you tell customers. If you promise 3-hour emergency response but only have one float truck, you'll break that promise the first busy afternoon. SLAs have to be backed by capacity, which is why staffing comes later in this framework rather than first.
A quiet trade-off lives here too. Tighten your emergency SLA and you need slack capacity sitting idle waiting for calls to come in. Loosen it and you lose the premium and the loyalty that comes from showing up fast. There's no universal right answer — it depends on how much of your revenue is emergency-driven and what your market will actually pay for speed.
Step three: routing and parts policies by family
Routing is where the families really diverge, and where a lot of shops leave money on the road.
Volume families (maintenance, standard repair) should be routed for density. You want these clustered tight so a tech knocks out several in a compact geography. This is exactly the logic behind zone-based route clustering — for high-frequency, short-duration work, drive time is pure margin leak, and tight zones recover hours a week.
Emergency work breaks the density model on purpose. You route for speed, which means keeping a truck positioned to respond rather than fully loaded into a route. That's an intentional efficiency sacrifice — you accept some idle capacity as the cost of keeping your response promise.
Replacement and project work routes differently again: these are anchored appointments. You build the day around them and fill gaps with nearby volume jobs, not the other way around.
Parts policy splits along the same lines. Volume families run on a standard, predictable truck stock — the recurring items you know you'll need. Replacement work runs on job-specific staging: the water heater, the fittings, the known list, pulled and confirmed before the tech leaves. Emergency work needs a broader "just in case" kit because you can't predict what you'll find.
If your par-levels are still one flat list for every truck, you're guaranteeing return trips on the complex jobs and dead inventory on the simple ones. A truck parts par-level matrix that varies stock by the work a truck actually handles is what keeps first-time-fix rates up without bloating your inventory cost.
Here's a simple workflow for how intake, routing, and parts staging interact.
A quick checklist to pressure-test your parts policy
-
Do your emergency-capable trucks carry a broader diagnostic kit than your maintenance trucks?
-
Is replacement/install work staged per-job, not pulled from general stock?
-
Do your highest-volume standard repairs have guaranteed truck stock so they never trigger a supply-house detour?
-
Are par-levels reviewed by truck role, not applied uniformly across the fleet?
-
Does someone confirm the job-specific parts are on board before dispatch, not at the customer's door?
If you answered "no" to more than one, your parts policy is still running on one gear.
Step four: staffing models that fit the work
Not every tech should touch every family, and pretending otherwise is expensive.
The natural split: your strongest, most consistent techs anchor replacement, install, and project work — the high-margin jobs where a mistake costs real money and quality drives the price. Your mid-tier and developing techs handle standard repair and maintenance volume, where the work is more predictable and the stakes lower. Emergency work needs your most adaptable people — not necessarily the most senior, but the ones who diagnose fast and stay calm when a customer is stressed.
A common staffing failure: assigning by availability instead of by fit. When dispatch just grabs whoever's free for a $5k repipe, you either send someone under-qualified (callback risk, margin risk) or you pull your best tech off a queue of profitable install work to handle a drain clear. Both are silent losses that never show up as a line item — they just erode margin over months.
protect your high-margin family's staffing first.
The trade-off rule worth holding to: protect your high-margin family's staffing first. If you have to sacrifice something on a chaotic day, let a maintenance visit slip a day before you pull your install specialist off a replacement. Maintenance can flex. A booked, high-ticket install that gets bumped or botched costs you far more than a rescheduled tune-up.
When to build dedicated capacity vs. flex it
Dedicated emergency capacity makes sense when emergency work is a meaningful chunk of revenue — enough that the idle-truck cost is clearly covered by the premium and the repeat business it generates.
A flexible pool makes sense when your volume is steady but emergencies are occasional. You keep techs cross-trained and pull one onto emergency duty as needed, accepting slightly slower response in exchange for not paying for idle capacity.
Who should NOT specialize yet: if you're under three or four trucks, hard specialization will strand you. At that size you need generalists who can cover any family, with routing and SLA discipline doing the sorting work that a bigger roster would handle through dedicated roles. Specialization is a scale move, not a startup move.
What breaks at scale — and where the model earns its keep
The service delivery model doesn't feel necessary at two trucks. You are the dispatch logic; you know every job and every tech. The problem is that this instinct doesn't transfer. The day you hire a dispatcher or add a fifth truck, all that judgment lives in your head and nowhere else.
That's the real failure mode — not a single bad day, but the slow degradation as the business outgrows the owner's ability to personally sort every job. Emergencies get miscategorized. High-value work lands with the wrong tech. Parts assumptions drift. Nobody's exactly wrong; they just don't have the decision rules you never wrote down.
This is why the sorting logic has to become explicit and repeatable. Documented rules for how intake classifies a job, which SLA it inherits, how it routes, what gets staged, and who's eligible to run it — that's what lets the model survive without you standing over it. A well-built operations playbook with copyable SOPs for dispatch, quoting, and parts is where these rules should live so a new dispatcher makes the same calls you would.
Modern field management software helps here, but not because it's flashy — because it can enforce the classification at intake and route each family by its own rules automatically. When the system tags a job's family and applies the right SLA, routing preference, and parts list without a human remembering to check each box, the model stops depending on any one person's memory. That's the quiet payoff: your delivery logic keeps working on your busiest, most short-staffed day, which is exactly when it used to fall apart.
A real scenario
A shop running six trucks, mostly residential, was booking roughly 300–340 jobs a month across a full mix — drain work, repairs, water heater swaps, the occasional bathroom remodel. Everything ran through one queue. Their complaint was familiar: revenue was up year over year, but net margin had barely moved, and their two best techs were burning out.
When they broke the work into families, the problem was obvious. Their strongest installer was spending close to 40% of his week on standard repairs and drain calls because dispatch grabbed him whenever he was free. Meanwhile replacement jobs — their fattest tickets — were sitting in the queue three and four days, and a chunk of them were quoted by whoever happened to be nearby regardless of skill.
They made three changes. Anchored replacement and install work to their two senior techs. Set a real emergency SLA backed by one flex truck. Split parts stock so the volume trucks carried tight, predictable kits and the install jobs got staged per-job. Nothing exotic.
Over the next quarter, first-time-fix on complex work climbed noticeably, return trips on installs dropped, and the senior techs stopped drowning. Margin per job on the replacement family improved by a meaningful amount — not because they raised prices, but because the right people were doing the right work with the right parts on board. Total volume didn't jump. The mix discipline did the work.
Sorting your work into families and giving each one its own rules isn't bureaucracy — it's how you stop your best resources from being consumed by your lowest-value jobs. The framework is straightforward: classify by operational behavior, assign SLAs you can actually staff, route and stock each family by its own objective, and protect your high-margin work first when the day gets ugly.
Start by pulling last month's jobs and sorting them into families. You'll almost certainly find one family quietly subsidizing another, one tech assigned to the wrong work, and one parts assumption costing you return trips. Fix the sorting, and most of the downstream chaos sorts itself out.
Ready to optimize your plumbing operations?
Join 500+ plumbing businesses using Plummerly to save time, reduce scheduling errors, and improve customer satisfaction.