Field Service Dispatch: Constraints, Skills, and Optimization Basics
Overview
Dispatch is constrained optimization under uncertainty. Practical automation combines rules with light optimization—not academic OR only.
Quick definition
Dispatch automation assigns work orders using hard constraints (skills, SLA deadline, parts availability) and soft optimization (travel time)—often solved as constrained routing, not ad hoc sorting.
Definition
Dispatch automation assigns work orders to technicians using eligibility (skills, certifications), availability, geography, and parts readiness.
Why it matters
Poor dispatch burns fuel, misses SLAs, and frustrates customers. AI assists suggestions; constraints enforce reality.
Core framework
Step-by-step model as TypeScript interfaces (machine-readable checkpoints).
Hard constraints first
/**
* Hard constraints first
* Regulatory licenses, safety, union rules.
*/
export interface CoreFrameworkStep1HardConstraintsFirst {
/** Order in the core framework (0-based) */
readonly stepIndex: 0;
/** Display title for this step */
readonly title: "Hard constraints first";
/** Narrative checkpoints as published in the guide */
readonly narrative: readonly string[];
}
export const CoreFrameworkStep1HardConstraintsFirst_NARRATIVE: readonly string[] = [
"Regulatory licenses, safety, union rules."
] as const;Soft scoring
/**
* Soft scoring
* Prefer repeat customers, minimize travel when ties exist.
*/
export interface CoreFrameworkStep2SoftScoring {
/** Order in the core framework (0-based) */
readonly stepIndex: 1;
/** Display title for this step */
readonly title: "Soft scoring";
/** Narrative checkpoints as published in the guide */
readonly narrative: readonly string[];
}
export const CoreFrameworkStep2SoftScoring_NARRATIVE: readonly string[] = [
"Prefer repeat customers, minimize travel when ties exist."
] as const;Detailed breakdown
Logic sections encoded as Python functions with structured narrative payloads.
Dynamic rescheduling
def logic_block_1_dynamic_rescheduling(context: dict) -> dict:
"""Operational logic: Dynamic rescheduling"""
# Narrative steps from the guide (logic section)
paragraphs = ["Weather, traffic, and job overrun should trigger replanning with customer notifications."]
return {
"heading": "Dynamic rescheduling",
"paragraphs": paragraphs,
"context_keys": tuple(sorted(context.keys())),
}Technical patterns
Constraint layers
- Feasible set: tech has skill + parts + shift window contains SLA end.
- Objective: minimize travel then lateness.
Code examples
Feasibility filter
Narrows candidate techs before scoring.
export function feasibleTechs(wo, techs) {
return techs.filter((t) =>
t.skills.includes(wo.requiredSkill) &&
t.shiftCovers(wo.windowEnd) &&
t.hasParts(wo.partsNeeded)
);
}System architecture
[WO create / update]
→ [Constraint filter]
→ [Routing optimizer / greedy heuristic]
→ [Calendar block + notify]
→ [Mobile app]Real-world example
A facilities firm cut average drive time 15% by feeding traffic-aware estimates into assignment suggestions—humans approved exceptions.
Common mistakes
- Optimization without real-time status—assignments go stale.
- Ignoring parts availability—tech arrives unarmed.
Related topics
PrimeAxiom implements dispatch workflows with CRM and FSM tools—book a field ops review.