How we rebuilt appointment scheduling for a 28-truck HVAC company — reducing no-shows from 23% to 14% and adding two jobs per technician per day.

A growing HVAC company with 28 service trucks across two metros came to us with a scheduling nightmare. Technicians were driving past each other on the highway. Customers were canceling because the arrival window was "sometime between 8 and 5." And the dispatch team was drowning in phone calls trying to keep up.
No-show rates had crept up to 23%. Every missed appointment meant a wasted truck roll and a slot that could've gone to a paying customer. The company was losing an estimated $180,000 annually just on no-shows.
Their dispatchers were manually assigning jobs each morning based on gut feel and geography. There was no real-time visibility into technician location or job completion. When a job ran long, the whole day's schedule fell apart.
"We were growing, but our scheduling couldn't keep up. We'd book 40 jobs and complete 30. That's not a capacity problem - that's a systems problem."
- Operations Manager
We designed a scheduling system that optimizes routes, confirms appointments automatically, and adapts in real time when jobs run long or customers reschedule.
New bookings now get automatically slotted based on technician location, skill set, and current workload. The system calculates drive time between jobs and builds in realistic buffers for complex repairs.
Customers receive SMS confirmations at booking, a reminder 24 hours before, and a "technician on the way" alert with a 30-minute arrival window. They can confirm, reschedule, or cancel with a single tap - and the system automatically fills canceled slots from a standby list.
Dispatchers get a real-time board showing every truck, every job, and every delay. When a job runs over, downstream appointments automatically shift and customers get updated without anyone picking up a phone.
Week one was ride-alongs and dispatch shadowing. We needed to understand the real job durations - not the estimates in the system. Turns out, a "standard AC tune-up" ranged from 25 minutes to 2 hours depending on the unit.
Weeks two and three were building the scheduling logic and integrating with ServiceTitan. We configured job type durations, skill requirements, and travel time calculations using actual historical data.
Week four focused on the customer communication flows - confirmation sequences, reminder timing, and the real-time "on my way" triggers.
We piloted with one metro in week five, refined the arrival window messaging based on customer feedback, and rolled out to both metros in week six.
No-show rates dropped from 23% to 14% - a 40% reduction. The automated reminder sequence catches cancellations early enough to fill 60% of those slots from the standby list.
Technicians are completing an average of two more jobs per day, driven by tighter routing and fewer wasted trips. That's an additional $320,000 in annual service revenue without adding trucks or staff.
Customer satisfaction scores on scheduling jumped from 3.8 to 4.5. Dispatchers report spending 50% less time on phone calls - time they now spend on exception handling and customer recovery.
Confirmation timing matters more than frequency. A reminder 24 hours out plus a "30 minutes away" alert outperformed sequences with 3 or 4 touchpoints. Customers don't want more messages - they want the right messages.
Realistic job durations beat optimistic ones. The old estimates assumed perfect conditions. Building in buffers for actual variability meant fewer cascading delays and happier customers.
And we learned that dispatchers need override power. The system handles 90% of scheduling automatically, but the 10% that requires human judgment - a VIP customer, a callback from a bad install - needs to be easy to handle manually without breaking the automation.
11 years of "can you make these things talk to each other?" - turned into a career.
Behind-the-scenes looks at what we're building, integration tips that actually work, and automation strategies from 40+ implementations.