惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

美团技术团队
人人都是产品经理
人人都是产品经理
月光博客
月光博客
V
V2EX
WordPress大学
WordPress大学
酷 壳 – CoolShell
酷 壳 – CoolShell
Last Week in AI
Last Week in AI
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
V
Visual Studio Blog
宝玉的分享
宝玉的分享
雷峰网
雷峰网
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - Franky
博客园 - 聂微东
博客园 - 司徒正美
博客园 - 【当耐特】
爱范儿
爱范儿
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
阮一峰的网络日志
阮一峰的网络日志

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
Building a scheduling optimizer for field service teams
Tim Carter · 2026-06-23 · via DEV Community

Tim Carter

The hardest part of building a scheduling tool for field service teams isn't the calendar. It's the fact that the calendar is a lie.

Here's what I mean. A six-truck shop runs 8 to 10 stops per truck per day. Looks packed. Looks productive. But when you actually measure windshield time (the hours your tech spends driving instead of working), you find that one extra hour per truck per day is pretty common. Across six trucks, that's 30 billable hours a week. That's a full-time tech's worth of revenue, lit on fire in traffic.

You don't see it on the books. The cost gets split across payroll, fuel, and the vague "we couldn't fit it in this week." It looks like normal operating expense. It isn't.

The dispatch anti-pattern

Most small trades book jobs in the order the customer called. First call gets the 8 AM slot. Second call gets 10. Third gets 1 PM. The route ends up zigzagging across town. Morning job up north, midday south, afternoon back north. Nobody designed it that way. It just happened, one phone call at a time.

We built ToolbagCRM's dispatch board to fight this. Every job is plotted by tech and by zone, with drive time estimates between stops. Move a stop and the next start time updates on its own. You can see who's overbooked, spot the gaps, and slot an emergency in without guessing where it lands.

But here's the thing we learned: the tool only works if the habit changes. The fix isn't software alone. It's the habit of spending ten minutes at end of day grouping tomorrow's jobs by area, not by call order.

Geographic zones and day-of-week routing

The bigger lever is zones. Pick three or four geographic chunks of your service area, assign each one a day of the week. North side gets Tuesdays. South gets Wednesdays. East gets Thursdays. Emergencies break the rule. Everything else falls into place.

Customers don't mind nearly as much as contractors think. "Can we do Tuesday morning?" lands about the same as "can you come tomorrow?" on a non-urgent call. Shops that hold the zone line end up running roughly a third less drive time on the same job count. Same trucks, same techs. Better sequencing.

We didn't build a "zone optimizer" that auto-assigns areas. We thought about it. Decided against it. The contractor knows their territory better than any algorithm we'd write. What we built instead is a visual board where you can drag jobs into zone clusters and see the route shape. The human does the thinking. The software does the math on drive times and start times.

The emergency slot-in problem

Here's the dispatch edge case that catches everyone. A tech is 20 minutes into a routine maintenance call and an "AC's out, family with a baby" call lands. Gut says send the closest truck. Sometimes that's right. Often it isn't, because closest doesn't mean fastest once you factor in the stop you'd have to leave half-finished.

Better play: ask the emergency customer for a real window, not "right now." Most take "between one and three" without complaint. Now you can slot the call in without torching the route. The ones who can't wait at all need a separate solution: either you run an on-call truck, or you charge a real after-hours premium.

We built the board to show this visually. You see the current route, you see where the emergency could fit, and you see what it displaces. Drag it in, see the cascade. It's not a solved optimization problem (field service routing is NP-hard, and we're not pretending to solve TSP), but it gives the dispatcher enough info to make a good call fast.

Drive time belongs in the quote

One thing we keep telling contractors: if your hourly rate doesn't account for drive time, the tech is eating it. Pricing a one-hour job at one hour of labor assumes you teleported. You didn't. Half an hour out, half an hour back, nobody billed for it.

Two ways to handle it. Roll the average drive time into your hourly rate, or add a flat trip charge. We let you do either in the quoting flow. Pick one and stop pretending the drive was free.

The scheduling problem in field service is one of those things that looks simple from the outside and is genuinely hard up close. We're not done building it. But the early feedback from shops using the zone-based dispatch is that they're fitting one more job per truck per day, and that adds up fast.

Originally published at toolbagcrm.com