Field-Team Scheduling: Availability, Skill and Travel Time in One Plan
Back to blog
automation·September 5, 2026·5 min read·By Yehonatan Saadia

Field-Team Scheduling: Availability, Skill and Travel Time in One Plan

Scheduling field technicians: hard constraints against soft preferences, travel time as real duration, skill and certification filters, and explainable plans.

Key takeaways

  • Travel time is not distance. Two jobs 9 km apart are 14 minutes at 11:00 and easily 35 minutes at 16:30, and a plan built on distance collapses precisely during peak hours.
  • Skill and certification are hard constraints that filter candidates before anything is computed, not scores that a short drive can compensate for.
  • Optimality is not the objective. The OR-Tools routing solver runs a first-solution strategy plus a local-search metaheuristic under a search limit, and returns the best plan it found before the limit was reached.
  • Every assignment carries a one-line explanation: why this technician, why this hour. Without it, any manual change looks arbitrary and the dispatcher simply works around the system.
  • A day that breaks at 11:40 is not an edge case, it is normal operations. The only question is how many jobs the re-plan moves, not whether it moves any.

A field-team schedule is built from two kinds of rule: hard constraints that may not be broken, and soft preferences that should be honoured where possible. The goal is not the cheapest plan. It is a feasible plan you can explain to the technician and the dispatcher without anybody opening the code.

What has to be defined before anything is scheduled

A schedule can never be better than the data feeding it. These are the fields without which any algorithm returns something that looks plausible and cannot be executed.

Job fieldExample valueWhat happens without it
Customer time window09:00-13:00The system books 15:00 and somebody calls to apologise
Estimated duration75 minutesThe day is full in jobs and empty in hours
Required skillMini-central air conditioningYou send whoever is near, not whoever can do it
Required certificationWork at heightA job that cannot be performed on arrival
Required equipmentSmall craneThe technician arrives and drives back to the depot
Precise address7 HaBanim St, entrance B, RaananaTravel time computed to the wrong destination
PrioritySLA - todayUrgent jobs drift to the end of the day
Site accessSecurity desk until 16:00The technician arrives and cannot get in

The field most often skipped is estimated duration, and it is exactly the one that makes a plan infeasible. A day holding eight jobs is neither busy nor light - that depends entirely on whether they are 30 minutes each or 110.

Why is travel time the constraint that breaks naive schedules?

Because it is not a property of a job, it is a property of a pair. A travel duration exists only between job A and job B, at a particular hour, for a particular vehicle - which is why it cannot be stored on the job.

  • It depends on order. The same five jobs in a different sequence can total 70 minutes of driving or 160.
  • It depends on the hour. A drive that takes 14 minutes at midday takes considerably longer after 16:00 in urban areas. A travel matrix computed once for the whole day describes a day that does not exist.
  • It disappears inside the arithmetic. A quarter of an hour of uncounted travel between eight jobs is two missing hours in a working day - one and a half jobs that quietly fell out.
  • It includes things that are not driving. Parking, finding the entrance, the lift, waiting at the security desk. Better to call that a buffer and declare it explicitly than to discover it as lateness.

The practical approach is to compute travel as a duration between two points at an estimated departure time, and to add a fixed buffer per stop. Both numbers are visible on the plan, and both can be tuned against what actually happened last month.

Hard constraint against soft preference

That separation is the whole difference between a system you can trust and one that produces impossible jobs:

  • Hard constraints: a valid certification, the required skill, the technician's working hours, the window promised to the customer, vehicle capacity, and availability of specialist equipment. Breaking any one of these invalidates the plan.
  • Soft preferences: less total driving, balanced load across technicians, keeping the same technician with a familiar customer, and less idle time. These enter the cost function and compete with each other.

The common failure is turning a hard constraint into a preference with a high weight. That works until a busy day, when the system "decides" it is worth sending a technician without a work-at-height certification because he was 12 minutes closer. A hard constraint has to filter candidates before the computation, not compete inside it.

Why a feasible, explainable plan beats an optimal one

Routing problems with time windows, skills and capacity are not solved to proven optimality in reasonable time at operational sizes, and they do not need to be. The OR-Tools routing library shows the shape of the approach: pick a first-solution strategy such as PATH_CHEAPEST_ARC, add a local-search metaheuristic such as GUIDED_LOCAL_SEARCH, and set a search limit. The documentation notes that search limits terminate the solver after it reaches a specified limit, such as a maximum length of time or a number of solutions found. Without a time limit the search simply keeps going.

Three design decisions follow:

  • Set an explicit compute budget, say 20 seconds to plan a full day. What you get back is the best plan found in that time, not "the plan".
  • Do not promise a percentage saving. You can compare the generated plan against the plan a dispatcher built by hand on the same day, and that is a real number. "30% less driving" is a promise with no source behind it.
  • Run the same input twice. If the result changes between runs, fix the seed - a dispatcher who sees a different plan on every refresh stops believing the system.

The explanation matters as much as the result. Each assignment carries one line: "chosen for work-at-height certification, 18 minutes from the previous job, inside the 09:00-13:00 window". That sentence turns a manual override into an argument about a fact rather than a feeling.

Related: automating appointment scheduling, an Israeli holidays API for scheduling, daily field reporting over WhatsApp.

What happens when the day breaks at 11:40?

This is the real test. Take a day with three technicians and 11 jobs. At 11:40 a job estimated at 60 minutes stretches to 150, because the pump that was ordered is the wrong model.

  1. Detect the overrun early. The technician reports "running long" from the app, rather than you discovering it when he fails to arrive at 12:15.
  2. Freeze anything already started. A job in progress does not move. A re-plan that relocates a technician already on site is what makes crews stop opening the app.
  3. Re-plan only what was hit. The next two jobs of that technician, not all 11. A full re-plan on every change produces a day nobody can follow.
  4. Re-check the hard constraints. A job requiring a certification only one technician holds does not move to another, even if that one is free.
  5. Tell the customer before the window breaks, not after. A 13:00-17:00 window communicated at 12:50 is an update; the same message at 17:10 is a complaint.
  6. Mark what slipped to tomorrow and place it at the front of that plan, otherwise a job deferred once gets deferred again.

What the technician sees and what the customer sees

  • The technician sees an ordered list for the day with address, window, estimated duration and required equipment - not a map from which a sequence has to be inferred.
  • He also sees the travel time the system assumed. A persistent gap between assumption and reality is the data that calibrates the buffers.
  • The customer receives a window rather than an exact time, and every change to that window is sent when it happens.
  • A dispatcher's manual override is stored with a reason. After a month, that list of reasons is the list of constraints your model is missing.

Sources

#field service scheduling#routing#dispatch#travel time#constraints#אוטומציה

Frequently asked questions

How far ahead does the estimated duration need to be known?

Duration should be defined per job type in advance rather than typed in per job. The practical form is a duration table by job type and customer type, updated from actuals - which means from the gap between what was estimated and what was measured.

Should technicians pick their own jobs?

Free choice produces exactly the problem scheduling exists to solve: the easy, nearby jobs get taken and the rest linger. A middle model that works is automatic assignment with the ability to swap a job between two technicians, subject to the same hard constraints.

What do we do when one technician holds a certification nobody else has?

Treat it as an operational risk rather than a technical detail. In scheduling terms, every job needing that certification becomes a bottleneck that shapes the whole day. The fix is training rather than software, but software is what can show how many jobs a month were blocked that way.

Can we schedule without real travel-time computation?

You can, and in a business whose jobs all sit inside a small radius it is even reasonable. The moment there are two zones or peak hours, a flat assumption of "20 minutes between jobs" produces a day that looks fine in the morning and falls apart after the third job.

Keep reading

Related service

Business Automation

I build custom automations that remove repetitive work end to end.

Learn more →←

About the author

Yehonatan Saadia

Freelance automation, web & MVP developer

I'm Yehonatan Saadia, a senior developer who builds business automation, custom websites, and MVPs for small and mid-sized companies across the US, Europe, and Israel. These guides come from real client work, not theory.

Work with me

Have a project like this?

Tell me what you're trying to automate or build. I reply within 24 business hours with a few targeted questions, then we walk through it on a free 30-minute call, with no commitment. You come away with a scope, a timeline and a fixed price - or a straight answer that it isn't worth building.