Design Dispatch System

Medium40 min
1 / 30
understanding9 min read

Problem Statement: Field Service Job Dispatch

Problem Statement: Field Service Job Dispatch — field service dispatch interview depth

Problem Statement: Field Service Job Dispatch

Phase understanding — Field service dispatch design note #1. dispatch assigns technicians to jobs under SLA windows. ServiceTitan/Jobber-class SaaS: work orders, skills, territories, customer ETAs.

Interviewers at ServiceTitan, Jobber, and Housecall Pro want you to separate job intake from assignment optimization from field execution telemetry. Dispatch owns who should do which job within SLA windows; CRM owns customer truth; routing engines consume travel matrices, not raw map tiles.

ConcernDesign choice
Consistencydispatch_run_id pins the travel matrix + open job snapshot used by the solver
LatencySoft-lock offers in <3s; hard commit when technician taps Accept
FairnessCap consecutive long drives; respect union break rules per tenant policy
FailureIf solver times out, fall back to greedy + surface manual queue — never drop jobs

Operational signals to cite: assign_latency_p95, sla_miss_rate, schedule_churn, drive_minutes_per_job, and override_rate. Page when assign_latency_p95 exceeds 5s while queue depth is flat — that usually means matrix build lag, not CPU on API pods.

Scenario walk-through

A dispatcher in Phoenix sees 140 open jobs between 08:00–12:00. A burst of emergency HVAC calls arrives during a sandstorm delay. The platform freezes a dispatch_run snapshot, rebuilds travel times with updated traffic factors, re-solves only the affected territory pack, and pushes diffs to technician apps. Customers receive revised ETAs via notification service — all keyed by the same run id for support audits.

Code anchors

javaOne Dark Pro
1public record DispatchRun(String id, String tenantId, Instant matrixAsOf, int openJobCount) {}
pythonOne Dark Pro
1def score(job, tech, matrix, skills) -> float:
2 if not skills.covers(job.required):
3 return -1.0
4 return matrix.minutes(tech.location, job.site) + 0.2 * job.priority
typescriptOne Dark Pro
1export interface AssignmentOffer {
2 jobId: string;
3 technicianId: string;
4 dispatchRunId: string;
5 softLockExpiresAt: string;
6}

Unique depth marker for section 1: ServiceTitan/Jobber-class SaaS: work orders, skills, territories, customer ETAs — dispatch assigns technicians to jobs under SLA windows.

Why interviewers care

Dispatch System interviews reward crisp scope, explicit trade-offs, and failure stories—not generic microservice diagrams.

Interview checkpoint

Name one failure story for Problem Statement: Field Service Job Dispatch that proves you understand real outages, not happy-path diagrams.

Key Highlights

  • dispatch assigns technicians to jobs under SLA windows
  • Version assignments with dispatch_run_id
  • Soft-lock before hard schedule commit
  • Degrade to manual queue — never drop jobs
pro tip
Dispatch sec-1: cite dispatch_run_id whenever you change travel assumptions.
interviewer loves
Dispatch sec-1: separate soft-lock offers from hard schedule commits.
common mistake
Dispatch sec-1: do not let CRM and dispatch both mutate job status without version checks.
trade off
Dispatch sec-1: batch solver improves drive time but adds customer wait for assignment.

Section Rescue Kit

Buzzwords to use:

dispatch_run_idSoft lock

Safe statements:

  • "For Problem Statement: Field Service Job Dispatch, I'll quantify open jobs and technicians before picking solver strategy."
  • "I'll define SLA breach behavior before naming cloud services."
Design Dispatch System - System Design | WinJob | WinJob