Jun 3, 2026
Peak season without the pile-up: routing HVAC calls when every minute counts
Invertops Research
13 min read

When the board breaks in July
Peak HVAC season turns dispatch into triage. No-cools stack up, callbacks multiply, and the fastest loser is the customer you never called back. What breaks is not the software’s uptime—it is the scheduling model’s ability to handle a demand spike that is both larger and more volatile than the baseline it was tuned for.
Under the hood this is a constrained optimization problem that gets harder as load rises. You are assigning a growing set of jobs to a fixed set of technician-hours, subject to skills, parts, time windows, and drive time—a capacitated vehicle-routing problem with time windows, which is NP-hard. In the shoulder season a greedy heuristic looks fine; in July the same heuristic produces the broken board, because the search space and the cost of a bad assignment both explode.
Routing as constrained optimization
Good routing weighs far more than ZIP code. The objective function has to encode tech skill and certification match, parts already on the truck, SLA and membership priority, drive time, and remaining shift capacity. Getting the objective right matters more than finding the mathematically optimal solution—optimizing purely for drive time will happily strand a maintenance-contract customer to save ten minutes, which is a margin decision disguised as a routing decision.
The practical approach is a solver that produces good assignments fast, run incrementally as new calls arrive rather than recomputing the world each time, with the AI drafting the reshuffle and a dispatcher approving it. You want the route to be re-optimizable when a heat wave lands mid-morning, and you want it stable enough that you are not re-texting every tech a new plan every fifteen minutes—so the cost function includes a churn penalty for moving already-committed jobs.
- Hard constraints: Skills/certifications, time windows, and parts availability—violating these produces a route that cannot actually execute.
- Soft costs: Drive time, SLA priority, overtime, and reassignment churn—weighted terms the owner can tune per season.
Callbacks erode margin fast
A callback is a job you pay to do twice, so predicting and preventing it protects margin more reliably than squeezing one more stop into the day. The signal is in your own history: repeat visits to the same address, specific equipment models with high warranty-return rates, or a first visit closed without the part the diagnosis implied. Those are features a model can score at dispatch time.
The action is to route for first-time-fix, not just proximity. That means matching the tech and the truck stock to the likely repair before dispatch, and flagging jobs with high callback probability for a second look. During surge weeks, fewer rollbacks beats more stops—an extra call that becomes a callback is negative margin plus a damaged relationship.
Capacity limits and graceful degradation
When demand exceeds capacity—and in a heat wave it will—the system’s job is to degrade gracefully, not to pretend every call fits. That means an explicit triage policy (emergencies and service contracts first), honest customer-facing ETAs derived from real remaining capacity rather than optimistic defaults, and overflow handling: a waitlist, proactive reschedule offers, or a spillover to overtime that the owner approves with eyes open.
This is the same discipline as backpressure and load-shedding in a distributed system. A queue that accepts unbounded work and silently misses SLAs is worse than one that admits its limit and prioritizes explicitly. Surfacing ‘here is what we cannot get to today, ranked’ is what lets an owner make the overtime-versus-defer call before the customer calls angry.
After the surge: close the loop
The surge is also your best training data. Capture what actually happened—approval patterns, vendor lead times, crew utilization, first-time-fix rates by tech and equipment type—as structured events, and next summer starts with tuned parameters instead of panic.
Concretely, this feeds back into the objective function and the callback model. If a certain condenser model drove callbacks, truck-stock policy and routing weights adjust before next season. Treated as a feedback loop rather than a memory, peak season gets less chaotic every year instead of being relived from scratch.