Skip to content
Code Serve Tech logo
← BACK TO CASE STUDIESFIELD SERVICE & FACILITIES MANAGEMENT

Choose "Save as PDF" in your browser's print dialog.

Work order and field service operations platform for a 23-region facilities management network

Proposed replacement of region-level work order spreadsheets, phone-coordinated technician dispatch, and paper-based SLA tracking with a centralized event-driven field service platform architected to support expansion to 60 regions without compounding SLA breach exposure or asset maintenance visibility gaps.

ONGOING · 6 ENGINEERS · FIELD SERVICE OPERATIONS PLATFORM

§01 / THE BRIEF

A facilities management operator running 23 regional offices was managing work order creation, technician dispatch, asset maintenance scheduling, SLA tracking, and parts inventory through a combination of region-specific spreadsheets, phone-based job allocation, and WhatsApp coordination between dispatchers and technicians. Each region had independently developed its own job prioritization logic and dispatch conventions, producing missed SLA deadlines that were discovered only during monthly client reporting, untracked parts consumption that caused stockouts mid-job, and a technician utilization picture that regional managers could not produce without manual effort. The incumbent vendor FSM platform charged per-technician licensing fees that made the planned 60-region expansion economically indefensible. Clients were receiving SLA reports assembled manually from regional exports that were already days old by the time they were delivered. The proposed platform centralizes work order orchestration and SLA lifecycle management, enforces parts reservation structurally before job dispatch, and provides both regional operations and client-facing reporting with a continuously updated service state — while preserving the regional dispatch autonomy that time-sensitive job allocation genuinely requires.

§02 / SYSTEM ARCHITECTURE

Event-driven, offline-tolerant field service platform spanning regional dispatcher nodes, a central Kafka event bus, SLA monitoring and asset maintenance layers, parts inventory management, and multi-surface client interfaces for dispatchers and field technicians.

Work order and field service operations platform for a 23-region facilities management network

§03 / THE WORK

  1. 01

    Regional Workflow Mapping and Dispatch Pattern Analysis

    Spent four weeks embedded across seven regional offices observing actual dispatch workflows before committing to any data model or workflow engine design. The most significant finding was that job priority in practice was not a static field set at work order creation — it was continuously renegotiated by dispatchers throughout the day as new urgent jobs arrived, technician availability shifted, and client escalations came in. Any system that treated priority as a set-once attribute would immediately be worked around. The dispatch model was designed around dynamic priority re-evaluation as a first-class operation, not an edge case.

  2. 02

    Work Order Lifecycle and SLA Monitoring Engine

    Designed a work order service that models each job as a state machine — raised, triaged, assigned, in-progress, pending-parts, completed, verified — with SLA deadline metadata attached at creation and evaluated continuously by a monitoring service that consumes state transition events. The SLA monitor calculates time-to-breach for every open work order in real time and emits escalation events at configurable threshold intervals before the deadline — allowing dispatchers to act before a breach occurs rather than discovering it afterward. SLA breach events, when they do occur, are written to the audit log with the full assignment history of the work order, enabling root cause attribution to be produced immediately rather than reconstructed days later.

  3. 03

    Parts Reservation and Inventory Lifecycle

    Parts inventory is modelled as an event stream rather than a mutable quantity record. When a work order is dispatched, the required parts are reserved against the work order record, reducing available stock immediately — before the technician physically collects them. Reservations that are not fulfilled within a configurable window (technician did not collect; job was cancelled) are automatically released back to available stock and surfaced as an exception. Parts collection and consumption are recorded as events by the technician through the mobile application at the moment of collection and use, making the inventory position accurate to within minutes rather than hours. Low-stock alerts are derived from the event stream and routed to the regional parts coordinator role with a lead time calculated from the average procurement cycle for that part.

  4. 04

    Asset Service History and Preventive Maintenance Scheduling

    A canonical asset registry was designed to accumulate every work order — reactive and preventive — against a persistent asset identifier that survives technician and dispatcher turnover. Each asset record holds a complete event-sourced service history: every job raised against it, every part replaced, every fault category recorded, and every technician who worked on it. Preventive maintenance schedules are defined per asset class and per contract, generating scheduled work orders automatically at the configured interval. The maintenance schedule engine tracks whether scheduled jobs are completed within their service window and flags overdue preventive maintenance as a compliance exception before it becomes a client-reportable failure.

  5. 05

    Technician Mobile Application with Offline Job Management

    Field technicians operate in environments with inconsistent connectivity — plant rooms, basement plant spaces, and remote sites regularly have no signal. The technician mobile application runs a local job state cache that holds the technician's assigned jobs, asset details, required parts list, and job history access for the current shift. Job status updates, parts consumption records, fault categorizations, and completion sign-offs are written to a local queue and synchronized to the central platform on reconnection. The synchronization is idempotent: if a technician's device submits the same completion event twice due to a partial sync, the second submission is deduplicated at the ingestion layer without creating a duplicate job record.

  6. 06

    Client-Facing SLA Reporting and Contract Visibility

    Client SLA reports were previously assembled manually from regional exports once a month, delivered as PDF attachments with no self-service access for clients. The proposed reporting layer maintains per-contract SLA performance models updated continuously from the work order event stream, enabling client-facing report generation at any cadence — daily, weekly, or on-demand — without manual assembly. Reports cover response time compliance, resolution time compliance, first-time fix rate, repeat fault rate by asset, and open work order aging. The reporting layer is physically separated from the transactional path, ensuring that client reporting queries do not affect dispatch performance during operational hours.

§04 / RESULTS

Figures marked "target" are engagement objectives. Results marked "enforced" reflect architectural constraints rather than behavioural targets.

SLA BREACH DETECTION LATENCY
Month-endpre-breach alert (target)
PARTS STOCKOUT DURING ACTIVE JOBS
0 (reservation-enforced)
ASSET SERVICE HISTORY COMPLETENESS
Fragmentedcanonical per-asset log
CLIENT SLA REPORT ASSEMBLY TIME
2 days manualon-demand automated (target)
TECHNICIAN UTILIZATION VISIBILITY
Nonecontinuous per-technician (target)
FSM LICENSING COST AT 60-REGION SCALE
Eliminated (vendor dependency removed)

§05 / CONTEXT

  1. 01

    Fragmented Regional Dispatch Baseline

    Each of the 23 regional offices operated its dispatch function with its own spreadsheet-based job board, maintained by dispatchers who updated it manually as technicians called in job completions or new work orders arrived from clients. No two regions used consistent status terminology, priority classification, or update cadence. When central operations needed a network-wide SLA compliance view, they assembled it by emailing each regional manager for an export — a process that took two days, produced incompatible formats, and reflected a state that was already outdated before the consolidation was finished.

  2. 02

    SLA Breach Discovery Lag

    SLA deadlines were tracked in the same spreadsheets used for job status, with no automated monitoring against breach thresholds. Dispatchers were aware of SLA obligations in aggregate but had no system alerting them when a specific job was approaching its deadline without a technician assigned. Breaches were discovered during monthly client reporting preparation, at which point the contractual consequence had already occurred and the only available response was a retrospective explanation to the client. There was no operational mechanism for detecting and preventing a breach before it happened.

  3. 03

    Parts Inventory Opacity and Stockout Failures

    Parts inventory was tracked per region in separate spreadsheets that were reconciled against physical stock counts monthly. Technicians collected parts from regional stores on the way to jobs, with no system reservation against a specific work order. When two technicians needed the same part on the same day, the first to physically collect it got it; the second discovered the stockout at the stores window. Parts consumed on jobs were logged by technicians at shift end, meaning inventory records were perpetually between four and twelve hours out of date during operational hours.

  4. 04

    Asset Maintenance History Fragmentation

    Each client site contained assets — HVAC units, elevators, electrical infrastructure, plumbing systems — that required scheduled preventive maintenance and had histories of reactive repair jobs. These histories were distributed across the work order spreadsheets of whichever region happened to manage the site, with no canonical asset record that accumulated maintenance history across job types. When a technician arrived at a site, their knowledge of the asset's prior service history was limited to what the dispatcher could recall or what previous technicians had noted informally in job completion forms.

  5. 05

    FSM Licensing Cost Trajectory

    The incumbent field service management platform charged per-technician per-month licensing fees. At 23 regions and the current technician headcount the cost was manageable. The expansion plan to 60 regions required a proportional increase in technician capacity that made the vendor licensing trajectory economically untenable before the expansion was half complete. Unlike the vendor platform, which was also constrained in its ability to support the client-facing SLA reporting formats the business needed, a purpose-built platform would eliminate both the cost trajectory problem and the reporting flexibility problem simultaneously.

§06 / ARCHITECTURAL DECISIONS

  1. 01

    Why Kafka for the Event Bus

    Field service operations produce events from three independent sources at different frequencies and latency tolerances: dispatcher-initiated work order transitions (low frequency, moderate latency tolerance), technician mobile app events (moderate frequency, low latency tolerance during sync windows), and SLA monitoring heartbeats (high frequency, must not affect transactional path). Kafka's consumer group isolation allows these workloads to consume from the same event stream at their own pace without coupling. The durable log enables the SLA monitor to replay the full work order history for any contract when recalculating compliance figures, and allows the analytical store to be rebuilt from scratch without re-ingestion from source systems.

  2. 02

    Why Event Sourcing for Work Orders and Inventory

    Both work orders and parts inventory have the same fundamental auditability requirement: it is not sufficient to know the current state; the full history of how that state was reached must be reconstructible for client dispute resolution, SLA root cause analysis, and regulatory inspection. A mutable record with update-in-place semantics cannot answer the question 'what was the inventory position at 14:23 on the day Job X was dispatched?' An event-sourced model answers it directly by replaying events to that timestamp.

  3. 03

    Why Regional Dispatcher Nodes Rather Than Centralized Only

    Dispatch operations cannot tolerate the latency and availability risk of a WAN dependency on the critical path. A dispatcher assigning a technician to an urgent job must receive confirmation in under a second; a central data centre round-trip under variable WAN conditions cannot guarantee this. Regional nodes handle read and write operations against a local store, with asynchronous propagation to the central broker. The dispatch experience is always fast and always available; central visibility is eventually consistent with a bounded, observable lag.

  4. 04

    Why Parts Reservation Before Physical Collection

    Reserving parts at dispatch time rather than at physical collection time shifts the inventory commitment from an untracked informal act to a system-recorded event tied to a specific work order. This enables the inventory position to reflect committed stock before it physically moves, preventing the concurrent collection conflict that caused stockouts. It also enables the parts coordinator to see which reservations are pending collection and which have been outstanding long enough to suspect cancellation — information that was entirely invisible in the spreadsheet model.

  5. 05

    Why Continuous SLA Monitoring Rather Than Deadline Checking

    A system that checks whether a deadline has been breached after the fact produces a compliance record. A system that continuously evaluates time-to-breach for every open work order and emits threshold alerts before the deadline produces operational interventions. The difference is not a feature distinction — it is an architectural choice about when the system acts. Continuous monitoring requires the SLA service to maintain a live computation over all open work orders, which drove the decision to project work order state into a Redis-backed deadline priority queue rather than scanning the PostgreSQL work order table on a polling interval.

§07 / MILESTONES

Phase 1 — Discovery & Architecture

Weeks 1–7
  • ·Embedded four-week dispatch workflow observation across seven regional offices
  • ·Mapped actual vs. documented job prioritization, parts collection, and SLA tracking patterns
  • ·Defined event schema for work order lifecycle, parts inventory, and asset maintenance domains
  • ·Assessed incumbent FSM platform data exportability and migration surface
  • ·Finalised technology selection, regional node architecture, and SLA monitoring design

Phase 2 — Core Platform Build

Months 2–8
  • ·Work order lifecycle service with state machine and SLA deadline metadata
  • ·Continuous SLA monitoring service with threshold alerting and Redis deadline queue
  • ·Parts reservation and inventory event stream with low-stock alert pipeline
  • ·Regional local service layer with offline queue and idempotent sync
  • ·Asset registry with event-sourced service history and preventive maintenance scheduler
  • ·Central Kafka broker cluster with isolated consumer groups per workload

Phase 3 — Reporting & Client Visibility

Months 8–13
  • ·ClickHouse analytical store and projection worker pipeline
  • ·Background reconciliation workers for overdue preventive maintenance and open reservation detection
  • ·Central operations dashboard (Next.js) — SLA heat map, technician utilization, parts alerts
  • ·Technician mobile application (React Native) with offline job cache and sync
  • ·Client-facing SLA reporting portal with on-demand contract performance views

Phase 4 — Pilot and Migration

Months 13–16
  • ·Pilot deployment across four regions with parallel-run validation period
  • ·Asset registry population from legacy work order history exports
  • ·Technician mobile app rollout and onboarding program
  • ·Parts inventory opening balance migration and reservation workflow validation
  • ·Cut-over validation checks and rollback procedure documentation

Phase 5 — Full Rollout & Optimisation

Months 16–18
  • ·Staged rollout across remaining 19 regions
  • ·Legacy FSM platform decommissioning for migrated regions
  • ·SLA threshold calibration per contract class and client tier
  • ·New region activation workflow validation to target window
  • ·Observability tuning, client reporting sign-off, and expansion readiness review

§08 / IMPACT

  1. 01

    SLA Breaches Detectable Before They Occur

    SLA compliance monitoring previously produced a historical record of failures discovered during monthly reporting. Continuous SLA monitoring targeting pre-breach alerts at configurable thresholds — 75% and 90% of deadline elapsed — converts breach detection from a retrospective audit into a real-time dispatch signal. Dispatchers are notified in time to act; the breach class that was previously undetectable until after its contractual consequence becomes operationally preventable.

  2. 02

    Parts Stockouts During Active Jobs Eliminated

    Parts stockouts mid-job were a direct consequence of the absence of a reservation mechanism — available stock was visible, but committed stock was not. Structural parts reservation at dispatch time, before physical collection, makes the committed inventory position visible and prevents concurrent allocation of the same stock to two jobs. The stockout class caused by concurrent untracked collection is architecturally eliminated rather than operationally managed.

  3. 03

    Asset Service History Becomes a Canonical Operational Record

    Previously, an asset's maintenance history was distributed across whichever regional spreadsheets had managed jobs against that site, inaccessible to technicians in the field and unqueryable for trend analysis. A canonical per-asset event log accumulating every job, fault category, and parts replacement produces a service history that technicians can access before arriving on site, that clients can receive in contract reports, and that the organization can mine for repeat fault patterns indicating assets approaching replacement threshold.

  4. 04

    Client SLA Reporting Converted from Manual Assembly to On-Demand

    Monthly SLA reports previously required two days of manual data assembly from regional exports. The continuously updated analytical SLA models enable on-demand report generation at any granularity — per contract, per site, per asset class, per time period — without manual intervention. Clients can receive weekly reports at no additional operational cost. The reporting lag that allowed contractual consequences to accumulate undetected is removed.

  5. 05

    FSM Licensing Eliminated at Scale

    Per-technician licensing made the cost trajectory to 60 regions economically indefensible. The purpose-built platform eliminates per-technician and per-region licensing entirely, with infrastructure costs scaling sub-linearly with operational volume. The compounding licensing savings at 60-region scale represent a material financial outcome of the transformation program, independent of the operational improvements.

§09 / ARCHITECTURE DETAIL

  1. 01

    Regional Dispatcher Node (Local Service Layer)

    Each regional office runs an isolated local service node maintaining a region-scoped PostgreSQL instance for work order and dispatch state, a Redis instance for the live SLA deadline priority queue and technician availability cache, and a persistent Kafka producer queue for event exchange with the central broker. Dispatchers operate against the local service layer with full performance and availability guarantees independent of WAN state. Events produced locally are signed with region-scoped keys and drained to the central broker asynchronously.

  2. 02

    SLA Monitoring Service

    A dedicated SLA monitoring service maintains a Redis sorted-set priority queue keyed by work order SLA deadline, updated on every work order state transition event consumed from Kafka. A continuous evaluation loop polls the queue for work orders approaching threshold boundaries and emits escalation events to the broker. The monitoring service is stateless except for the Redis queue — it can be restarted and will reconstruct the deadline queue by replaying open work order events from Kafka without data loss.

  3. 03

    Central Event Broker — Apache Kafka

    The Kafka cluster serves as the authoritative event backbone for all operational domains: work order lifecycle transitions, parts inventory movements, asset maintenance events, technician mobile sync events, and SLA monitoring escalations. Topics are partitioned by region identifier and asset identifier respectively. Consumer groups are fully isolated per workload type — dispatch processors, SLA monitors, inventory managers, projection workers, and notification pipelines consume independently at their own throughput.

  4. 04

    Core Field Service Platform — TypeScript + PostgreSQL

    The central service layer handles cross-region concerns that regional nodes cannot resolve independently: network-wide technician availability queries for cross-region job escalations, parts transfer requests between regional stores, client contract SLA configuration management, and asset registry maintenance. The service layer is stateless and horizontally scalable. All persistent operational state is held in PostgreSQL with row-level region and contract scoping enforced at the query layer.

  5. 05

    Analytical Store — Python Workers + ClickHouse

    Python projection workers consume the full event stream and maintain a ClickHouse analytical store optimized for the aggregation queries underpinning client SLA reports and operational dashboards: response time distributions, resolution time compliance rates, first-time fix rates, parts consumption by asset class, and technician utilization by region. Workers are idempotent and can rebuild the analytical store from event history. Reconciliation workers detect overdue preventive maintenance jobs, unfulfilled parts reservations, and open work orders with stalled state transitions.

  6. 06

    Client Surfaces — Next.js + React Native

    Regional dispatchers and central operations use a Next.js dashboard for work order queue management, SLA alert response, technician utilization monitoring, and parts inventory review. Technicians use a React Native mobile application for job acceptance, on-site asset history access, parts consumption recording, fault categorization, and job completion sign-off. The mobile application operates against a local job cache that synchronizes with the regional node on reconnection, functioning normally in environments with no connectivity.

§10/ SECURITY & GOVERNANCE

Role-Scoped Dispatch Authorization

Every work order action — creation, assignment, priority change, completion verification — is gated by role-bound authorization at the service layer. Regional dispatchers operate within their region scope only. Regional managers hold cross-region read access and exception escalation capability within their territory. Central operations holds network-wide visibility and contract configuration authority. Client portal users hold read-only access scoped to their own contract and site records. Role assignments are managed centrally and propagated to regional nodes on synchronization.

Immutable Work Order and Inventory Audit Log

Work order lifecycle events and parts inventory movements are append-only. No operation modifies or deletes historical event records. Every state transition carries the authenticated actor identity, device identifier, region context, and timestamp. The event log is the audit record for client dispute resolution, SLA root cause analysis, and regulatory inspection — there is no separate audit system because the event stream is the audit stream.

Signed Regional Event Synchronization

Events produced by regional nodes are signed with region-scoped cryptographic keys before transmission to the central broker. The broker validates signatures before accepting events into the authoritative stream. Regional node credentials are enrolled during activation and can be revoked centrally. All inter-service and region-to-central traffic is encrypted in transit. Technician device credentials are enrolled through the mobile app onboarding flow and tied to the technician's identity record.

Structural SLA and Parts Enforcement

SLA escalation thresholds and parts reservation requirements are enforced at the service layer, not the UI layer. A work order cannot be dispatched without confirming that required parts are either in stock and reserved or explicitly marked as to-be-sourced with a procurement workflow triggered. SLA configuration changes to client contracts are versioned and audit-logged — a retroactive change to an SLA threshold cannot silently alter compliance calculations for historical periods.

§11 / SCALE READINESS

DESIGNED FOR

75+ Branches Without Core Redesign

The platform was designed to support controlled expansion to 60 regions without requiring workflow redesign or schema migration. New regions are enrolled as isolated local service nodes that join the existing event topology through a structured activation workflow — no manual Kafka topic provisioning, no schema changes, no consumer group reconfiguration required. Client contracts and asset registries are additive — new contracts are configured centrally and new assets are registered against their canonical identifier on first job creation. The Kafka backbone scales by partition; the ClickHouse analytical store scales independently of the operational PostgreSQL layer; and the stateless central service tier scales by replica count. The SLA monitoring service's Redis deadline queue scales with open work order volume, not region count. No component of the architecture contains a region-count or technician-count sensitive bottleneck.

§12 / LESSONS

  1. 01

    SLA Monitoring Is an Architecture Problem, Not a Reporting Problem

    The organization initially framed SLA compliance as a reporting gap — they needed more frequent reports. The actual problem was that the system had no mechanism for detecting a developing breach before it completed. Retrofitting alerting onto a monthly reporting model produces faster notifications of failures that have already occurred. Embedding continuous deadline evaluation into the work order lifecycle as a first-class architectural concern produces interventions before failures occur. These are different problems requiring different architectures, not different report frequencies.

  2. 02

    Inventory Reservation Must Be Tied to the Work Order, Not the Technician

    Initial workshop discussions proposed reserving parts against a technician's daily allocation rather than against a specific work order. This would have reproduced the opacity of the spreadsheet model in a different form — parts would be committed to a person rather than to a job, making it impossible to release unused reservations automatically when jobs were cancelled or rescheduled. Tying reservations to work orders makes the reservation lifecycle parallel to the job lifecycle, enabling automatic release on cancellation and automatic consumption confirmation on completion without any additional dispatcher action.

  3. 03

    Asset History Is Only Valuable If It Is Accumulated Canonically

    Technicians already recorded job completion notes in the legacy system. The information existed; it was just fragmented across regional exports with no canonical asset identifier linking records across time and across regions. The asset registry's value was not in collecting new information — it was in providing a stable identifier against which existing information could accumulate into a queryable history. Canonical identity is the infrastructure that makes distributed operational records into a coherent knowledge base.

  4. 04

    Regional Autonomy and Central Governance Are Not Mutually Exclusive

    Regional dispatch managers were concerned that centralization would remove their ability to prioritize jobs according to local knowledge — client relationship context, technician skill matching, site access constraints — that no central system could capture. The regional node architecture addresses this directly: priority renegotiation, technician assignment, and job sequencing remain entirely under regional dispatcher control. Central governance applies to SLA threshold enforcement, parts reservation integrity, and audit trail completeness — the concerns that were failing under the informal model — without touching the dispatch judgment calls that regional expertise handles better than any automated system.

§13/ TEAM & STACK

TEAM

ROLECOUNT
Platform Architect×1
Backend Engineers×3
Frontend Engineer×1
Implementation Lead×1
Duration18 MONTHS

STACK

  • TYPESCRIPT
  • POSTGRESQL
  • APACHE KAFKA
  • REDIS
  • NEXT.JS
  • REACT NATIVE
  • PYTHON
  • CLICKHOUSE

Have a brief that looks like this?

Bring it to us