Learn how the routing engine calculates schedule times for both virtual and physical jobs, respects forced ETAs, and estimates driver home arrivals. This guide covers the logic behind route timing and how your schedule boards are automatically updated.
How Route Timing Works
The system processes each job in a driver's queue sequentially, calculating start and end times based on the job type and location.
flowchart TD
A["Next Job in Queue"] --> B{"Is it a Virtual Job?"}
B -- Yes --> C["Use Planned Start/End Times"]
B -- No --> D["Calculate Drive Time (Google Maps)"]
D --> E{"Is ETA Forced?"}
E -- Yes --> F["Override with Manual ETA"]
E -- No --> G["Use Calculated Arrival Time"]
C --> H["Update Schedule Board"]
F --> H
G --> HVirtual vs. Physical Jobs
The system automatically distinguishes between jobs that require travel and those that don't.
Virtual Jobs
Virtual jobs do not require drive time calculations.
The system uses the predefined Planned Start and Planned End times.
If no end time is provided, the system automatically calculates it by adding the job's duration to the start time.
Exception: If a job is explicitly named "late start", it will bypass standard start-time overrides and strictly use its assigned planned start time.
Physical Jobs
For physical jobs, the system calculates the drive time from the previous location using Google Maps.
Same-Address Buffer: If consecutive jobs are located at the exact same address, the system skips the Google Maps API call and automatically applies a standard 5-minute transition buffer between the jobs.
Handling Forced ETAs
Sometimes, a driver must arrive at a specific time regardless of how quickly they can get there. You can manage this using the Forced toggle alongside a Manual ETA.
When Forced is ON: The system locks the job's start time to the Manual ETA. Even if the driver finishes their previous job early and has a short drive, the schedule will reflect the forced appointment time.
When Forced is OFF: The system compares the calculated arrival time (based on drive time) with the Manual ETA, and uses whichever is later.
# The core logic determining the start time for a physical job
start_dt = manual_eta if (manual_eta and (is_forced or calculated_arrival < manual_eta)) else calculated_arrivalEnd of Day and Overtime Tracking
The routing engine doesn't just calculate job-to-job travel; it also manages the driver's return trip and monitors for potential overtime.
Once the final job is complete, the system calculates the drive time from the last job's address back to the driver's home address to determine the Final Home Time.
Overtime Alerts: If a route includes an "early stop" requirement and the calculated final home time exceeds your daily schedule goal, the system will automatically flag the job's Action column with Overtime 🚩.
Route Finalization Process
When the route calculations are complete, the system performs an atomic update to your Monday.com board to ensure all data stays perfectly in sync.
- 1
Clean previous metadata
The system wipes outdated scheduling data (like old leave times or planned starts) from jobs that have been rescheduled or modified, ensuring no ghost data remains.
- 2
Generate route links
A comprehensive Google Maps URL is generated, containing the starting address, all routed stops, and the driver's home address.
- 3
Update schedule columns
The system applies the newly calculated times to the board in a single batch update.
Board Updates Reference
Here are the primary columns updated during the finalization process:
| Data Point | Description |
|---|---|
| Planned Start / End | The finalized start and end times for the job. |
| Drive Time | The calculated travel time (in minutes) to reach the job. |
| Leave Time | Applied only to the first job of the day, indicating when the driver must leave home. |
| Home Time | Applied only to the last job, indicating the estimated arrival time back home. |
| Route Link | A clickable Google Maps link containing the entire day's itinerary. |
Why are some jobs skipped during updates?
The system will intentionally skip updating jobs if they are marked as Cancelled or if they are currently in the SDC (Same Day Cancellation/Change) stage, preserving their historical or manual status.