The Ops Atlas xOps School

Industry & Organisation Established term Partly verified

FleetOps

FleetOps (fleet operations or fleet management) runs a fleet of vehicles so that they are safe, legal, available and cost as little as possible over their whole life: specifying, assigning, dispatching, fuelling or charging, maintaining and replacing them.

Key takeaways

  • Fleet operations (fleet management) is an established field with an association, a certification and its own regulations; the one-word "FleetOps" is mostly a product name.
  • A fleet is an asset-heavy business: compare vehicles by equivalent annual cost over their life, not by purchase price, and replace them at the age where that cost is lowest.
  • Utilisation decides fleet size: size to a high percentile of the daily peak of vehicles in use, not to the number of people who would like a vehicle.
  • Maintenance is a risk control first: a time-based inspection programme, closed-out defect reports and records an inspector can read are the minimum.
  • Electric vehicles win or lose on duty cycle, charging location and keep period; the same van can be cheapest or dearest depending on where it charges.
  • Telematics and cameras record people at work; a safety programme needs exposure-normalised measures, coaching, and privacy rules that would survive a data-protection review.

FleetOps, better known as fleet operations or fleet management, is the work of running a group of vehicles so that each one is safe, legal and available when the business needs it, at the lowest cost over its whole life. It covers choosing and buying vehicles, assigning and dispatching them, fuelling or charging them, inspecting and maintaining them, keeping drivers safe and within working-time rules, and deciding when to replace or sell each vehicle.

Reference descriptions of fleet management list leasing and financing, maintenance, licensing and compliance, accident management, telematics, driver, speed and fuel management, health and safety, and resale.[1] The discipline makes a few long-lived decisions well (which vehicle, how many, how long to keep it) and many routine ones (today’s routes, this week’s inspections) without letting any become a crash or a roadside prohibition.

Written for beginners, fleet staff, safety and finance leads, and engineers who integrate fleet data. Sources last verified 2026-10-23.

Aspect Summary
Goal Safe, compliant vehicles available at the right utilisation for the lowest whole-life cost
Users Fleet managers, dispatchers, maintenance planners and workshops, safety managers, drivers, finance
Scope Vehicle lifecycle, dispatch, energy, maintenance, driver safety, working time, right-sizing, TCO, electrification, telematics
Prerequisites None. Basic spreadsheet skills; Python helps for the labs
Key outputs Vehicle register and replacement plan, maintenance records, defect close-outs, routes, compliance records, safety programme, KPIs, cost model
Term status Established practice under the names “fleet management” and “fleet operations”; “FleetOps” as one word is mostly a product name

Term status: an established field under a product-name label

Link to section “Term status: an established field under a product-name label”

The practice is established. NAFA Fleet Management Association describes itself as serving “more than 3,500 fleet professionals” from government and corporate fleets and suppliers,[2] and its Certified Automotive Fleet Manager (CAFM) credential is organised into eight disciplines: asset, business, financial, information, maintenance and risk management, professional development, and vehicle fuel management.[3] Public employers write job classes for it: Pinellas County, Florida, has a “Division Manager, Fleet Operations” covering maintenance and repair, vehicle specifications, surplus disposal and the fuel programme.[4] Transport regulations define much of the routine work (see Methods, rules and frameworks).

The one-word label is different. “FleetOps” names several unrelated products: Fleetbase’s open-source “Fleet-Ops” extension, described as “Open-source fleet, dispatch, transport management, and real-time logistics operations for Fleetbase”;[5] an iOS fleet app published by Hypernym LTD;[6] and a transportation and logistics software company whose site now announces “FleetOps is now Class8”.[7] No body, standard or community uses “FleetOps” as a discipline name, so this page teaches the established practice under the Atlas’s label and refers to none of these products.

Without deliberate fleet operations, five things go wrong.

  1. People get hurt. NIOSH reports that “motor vehicle crashes are the leading cause of work-related deaths in the U.S.” and that from 2011 to 2022 more than 21,000 US workers died in work-related motor vehicle crashes, 35% of all work-related deaths.[8] Worldwide, the WHO counts about 1.16 million road traffic deaths a year, with speeding, impaired and distracted driving and unsafe vehicles among the risk factors.[9]
  2. The fleet is the wrong size. US DOE guidance notes that fleets collect specialised, rarely used or unsuitable vehicles over time;[10] each still costs capital, insurance and depreciation.
  3. Cost is judged at the wrong moment. The cheapest vehicle to buy can be the dearest to own, and one kept too long costs more in repairs and downtime than its replacement.
  4. Maintenance becomes reactive. Breakdowns cost a tow, a missed job and sometimes a crash; missing inspection records are a compliance failure even if the vehicles are fine.
  5. Working-time rules are broken by planning. A dispatcher who adds one more delivery can push a driver over a limit.
Before After
Buy the cheapest quote Compare options on equivalent annual cost, then replace at the economic life
Fix things when they break Time-based inspections, defect reports closed before the vehicle moves, records kept
Fuel cards with no reconciliation Fuel or energy use matched to distance and engine hours, exceptions investigated
  • Not logistics, purchasing, the device platform or robot fleets. Modes and carriers are SupplyChainOps, contracts ProcurementOps, telematics devices IoTOps, robots RoboOps; FleetOps runs the organisation’s own vehicles and drivers and decides what to buy, how many and when to replace. Autonomous road vehicles sit on the boundary (use cases).
  • Not a software category. A telematics subscription does not create a maintenance programme or a safety culture.
  • Not only trucks. Sales cars, vans, buses, ambulances and employees’ own cars used for work (the “grey fleet”) are fleets. The UK Health and Safety Executive states that “A grey fleet vehicle is owned and driven by a worker for business purposes” and that health and safety law covers these vehicles as well.[11]

Fleet management has no founding date. Rules and technologies turned vehicles into data sources and working time into something auditable; these are the milestones this page relies on.

Year Milestone Why it matters to fleet operations
1959 Dantzig and Ramser describe “the truck dispatching problem” for fuel deliveries[12] The start of vehicle routing as an optimisation problem
1996 OBD-II required on US cars and light trucks from model year 1996; EOBD in Europe from 2001 (petrol) and 2004 (diesel)[13] A standard diagnostic port for light vehicles
2006 EU Regulation (EC) 561/2006 sets drivers’ hours in road transport[14] Daily, weekly and fortnightly driving limits checked through tachograph records
2011 A presidential memorandum directs GSA to develop a vehicle allocation methodology (VAM) for federal fleets[15]; the federal regulation now requires agencies to implement one[16] Right-sizing as a documented, repeatable study
2014 EU tachograph Regulation (EU) 165/2014[17] Smart tachographs that also record GNSS position
2017 US ELD rule compliance date, 18 December 2017[18] Electronic hours-of-service records for most US interstate drivers
2024 EU Intelligent Speed Assistance on all new cars sold from July 2024[19]; SAE J3400 recommended practice (September; first a technical information report, December 2023)[20] Speed assistance built in; a North American connector standard
2025 EU Data Act applies from 12 September 2025[21] Users of connected products, cars included, can access and share the data they generate
Term Meaning Example
Duty cycle How a vehicle is used: distance, speed, stops, load, idle, hours Parcel van: 120 km, 80 stops, 9 h
Utilisation Share of available time (or days) a vehicle is actually used Used on 12 of 20 working days = 60% by days
Right-sizing Matching the number and type of vehicles to mission need Three under-used pickups become one pool vehicle
TCO Total cost of ownership: everything the vehicle costs from purchase to sale[22] Depreciation, fuel, maintenance, insurance, downtime
EAC Equivalent annual cost: TCO converted to a level annual amount so that options with different lives can be compared[23] A van costing 12,900 a year over 7 years versus 12,700 a year over 9
Economic life The keep period at which EAC is lowest Replace at year 7, not when it breaks
PM Preventive maintenance: planned inspections and services on a time or distance schedule Safety inspection every 8 weeks
DVIR / walkaround Driver’s inspection of the vehicle and report of defects (US driver vehicle inspection report; UK daily walkaround check) Cracked mirror reported at end of shift
Telematics Devices that send vehicle position and data (speed, engine hours, faults, fuel) to a server GPS tracker reading engine data
J1939 / OBD-II Engine-data standards: SAE J1939 (heavy vehicles), OBD-II (light) Engine hours from the J1939 bus
GNSS Satellite positioning (GPS, Galileo and others) Tachograph position records
CMV / HGV / PSV Commercial motor vehicle (US); heavy goods and public service vehicle (GB) An 18-tonne truck is an HGV
Upfit Equipment added to a base vehicle for its job Racking, beacons
BEV / PHEV Battery-electric vehicle; plug-in hybrid with a combustion engine too A PHEV beyond winter range
Charger, CSMS, OCPP Charging station; the management system that controls it; the open protocol between them Depot chargers on a CSMS
DPIA Data protection impact assessment, done before high-risk processing of personal data Before driver-behaviour monitoring
HOS / drivers’ hours Legal limits on driving and working time US 11-hour driving limit; EU 9-hour daily driving
ELD / tachograph Devices that record duty status or driving time for enforcement US ELD; EU smart tachograph
Dwell time Time a vehicle is parked between uses; for EVs, the window in which it can charge 13 hours overnight at the depot

Mental model: a fleet converts capital into available, safe vehicle-hours. Every decision moves one of four dials:

  1. How many vehicles (right-sizing, utilisation).
  2. Which vehicles and for how long (specification, TCO, economic life, EVs).
  3. How each vehicle-hour is used (dispatch, routing, fuel, idling).
  4. How safe and legal each vehicle-hour is (maintenance, inspections, driver safety, working time).

The dials interact: fewer vehicles means less slack for breakdowns; an EV changes energy, maintenance and dispatch at once.

Figure 1. FleetOps and its neighbours: who owns which decision
contractsdemanddevice datatraining needsroad riskremote assistancecarbon methodProcurementOpsSupplyChainOpsIoTOpsFleetOps: vehicles, drivers,costPeopleOpsRiskOpsRoboOpsGreenOps
Diagram source (Mermaid)
flowchart TB
  PR["ProcurementOps"]
  SC["SupplyChainOps"]
  IO["IoTOps"]
  FL["FleetOps: vehicles, drivers, cost"]
  PE["PeopleOps"]
  RK["RiskOps"]
  RO["RoboOps"]
  GR["GreenOps"]
  PR -->|"contracts"| FL
  SC -->|"demand"| FL
  IO -->|"device data"| FL
  FL -->|"training needs"| PE
  FL -->|"road risk"| RK
  FL -.->|"remote assistance"| RO
  FL -.->|"carbon method"| GR
  classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
  classDef neutral fill:#f1f4f6,stroke:#5b7a87,color:#122029
  class FL core
  class PR,SC,IO,RO,GR,RK,PE neutral

Text equivalent: FleetOps (vehicles, drivers, cost) sits in the centre. ProcurementOps hands it vehicle and lease contracts, SupplyChainOps hands it transport demand, and IoTOps hands it device data. FleetOps passes driver training needs to PeopleOps and its road risk to RiskOps. Dotted links show that it shares remote-assistance and exception-handling patterns with RoboOps (see the autonomous-fleet use case) and borrows the carbon accounting method from GreenOps, without handing work to either.

Neighbour Shared ground Choose the neighbour when
SupplyChainOps Transport, delivery performance Choosing modes, carriers or load plans, or buying transport as a service
ProcurementOps Vehicles, leases, fuel cards, workshop contracts You need the approval, contract and payment controls
IoTOps Telematics devices You run the device platform: provisioning, firmware, device security
RoboOps Fleets, remote monitoring The fleet is robots in warehouses, hospitals or on pavements
EdgeOps Remote, intermittently connected assets You run compute at remote sites
GreenOps Emissions and energy The emissions are from IT and cloud
RiskOps Road risk as enterprise risk You are building the enterprise risk method itself
PeopleOps Driver hiring, training, discipline You are designing the HR process

No body publishes a “FleetOps manifesto”; this charter is this Atlas’s proposal. Mission: provide the vehicle-hours the organisation needs, safely and legally, at the lowest whole-life cost, with records that prove it.

Principle In practice Check
Safety before utilisation A safety-critical defect or working-time limit stops the vehicle Defects certified before reuse; no hours-breaching dispatches
Decide on life cost, not price Buy, keep and replace on TCO or EAC with stated assumptions Each acquisition has a cost model and replacement year
Measure per unit of exposure Safety, fuel and cost per km, hour or trip, not raw counts KPI definitions name their denominators
Maintenance is planned Time-based inspections, linked to distance where useful PM compliance report; records per vehicle
Data serves a decision Each feed has a purpose, retention and access rule Data inventory; privacy assessment
Drivers are operators, not suspects Monitoring is proportionate, transparent, coaching first Coaching records outnumber disciplinary ones

Five building blocks appear in every fleet.

  1. The asset register. One record per vehicle: identity, class, mission, owner, ownership type, odometer and engine hours, planned replacement date and status (columns in the reference implementation).
  2. The driver register. Licences, categories and expiry dates, fitness requirements where they apply, training, and permitted vehicles. In the US, Driver Fitness is one of the safety categories carriers are measured on.[24]
  3. The work plan. Routes, schedules and bookings: where utilisation and working-time rules collide.
  4. Energy. Fuel cards, tanks, chargers and tariffs: often the largest variable cost, and where fraud and waste hide.
  5. Maintenance and inspection. Schedules, defects, work orders, parts, workshop capacity, and the records that prove it.

Telematics, fleet software and the cost model sit on top of these blocks; they do not replace them.

Titles vary with size (a 30-vehicle fleet may have one coordinator for all of this); the roles matter more.

Role Owns Typical skills
Fleet manager Policy, fleet size and mix, replacement plan, budget, suppliers Asset economics, contracts
Dispatcher / transport planner Daily allocation of vehicles and drivers, routes Routing, working-time rules
Maintenance planner / workshop manager PM schedule, work orders, defect close-out, parts Vehicle technology, regulation
Safety and compliance manager Safety programme, working-time compliance, investigations, audits Regulation, coaching
Driver Pre-use check, defect reports, safe and legal driving, duty records Licence category, vehicle checks
Finance partner Budgets, depreciation, lease accounting, cost assumptions Capital budgeting
Data or systems owner Fleet software, telematics integration, data access Integration, data protection

A RACI for recurring decisions (R = responsible, A = accountable, C = consulted, I = informed), proposed by this Atlas:

Decision or task Fleet manager Dispatcher Maintenance Safety and compliance Driver Finance
Vehicle specification and replacement A/R C C C C C
Daily allocation and routing I A/R I C I –
Pre-use check and defect report I I C I A/R –
Defect repair and return to service I I A/R C I –
Working-time compliance I R – A R –
Collision investigation C C C A/R C I
Driver coaching after safety events I – – A/R C –
Fuel and charging exceptions A C – C C R
Telematics data access and retention A C C C I –

The rule that matters most: whoever decides a defect is safe to drive with must not be measured on keeping the vehicle on the road.

Figure 2. The vehicle lifecycle and its main decision points
noyesNeed: mission and duty cycleSpecify: class, powertrain,upfitAcquire: buy, lease or rentCommission: register, upfit,telematicsOperate: assign, dispatch,fuel or chargeInspect and maintainReplacement review: pasteconomic life?Remarket or dispose: wipedata
Diagram source (Mermaid)
flowchart TB
  A["Need: mission and duty cycle"] --> B["Specify: class, powertrain, upfit"]
  B --> C["Acquire: buy, lease or rent"]
  C --> D["Commission: register, upfit, telematics"]
  D --> E["Operate: assign, dispatch, fuel or charge"]
  E --> F["Inspect and maintain"]
  F --> E
  E --> G{"Replacement review: past economic life?"}
  G -->|"no"| E
  G -->|"yes"| H["Remarket or dispose: wipe data"]
  H --> A
  classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
  classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
  class A,B,C,D,E,F,H core
  class G decision

Text equivalent: A need with a mission and duty cycle leads to a specification, then acquisition by purchase, lease or rental, then commissioning with registration, upfit and telematics. In operation the vehicle is assigned, dispatched and fuelled or charged, and loops through inspection and maintenance. A periodic replacement review asks whether the vehicle is past its economic life; if not, it stays in service, and if so it is remarketed or disposed of, with its data wiped, and the need is reassessed.

Easy to skip: commissioning telematics correctly (a device on the wrong ignition source gives wrong idle data for years); a scheduled replacement review; and disposal that removes the device, deletes paired phones and stored addresses, and closes fuel cards and toll tags.

Four cadences, proposed by this Atlas; regulated fleets may need some items more often.

Cadence Forum Inputs Outputs
Daily Dispatch stand-up (10 minutes) Vehicles off road, open defects, drivers available and their remaining hours, today’s work Allocation, swaps, escalations
Weekly Maintenance and safety review PM due and overdue, defects open more than 48 hours, safety events, roadside inspection results Workshop plan, coaching list
Monthly Fleet performance review KPI pack (see Metrics and KPIs), fuel and energy exceptions, cost per kilometre, utilisation Actions, policy changes, budget variance
Annual Fleet plan Replacement candidates by EAC, right-sizing study, EV readiness, budget Replacement list, fleet size target, capital request

Write down the escalations: safety-critical defect → off road until certified; a dispatch that would breach working time → back to the planner; injury collision → preserve data.

A logical architecture: small fleets run most boxes as features of one product; large ones integrate several.

Figure 3. Reference architecture: from vehicle signals to fleet decisions
DecisionsSystem of recordSourcesDash camerasELD or tachographVehicle gatewayFuel cards, tanksChargers (OCPP)RegistersTrips, events, dutyMaintenanceEnergy, costsDispatch, routingSafety coachingCompliance recordsReplace, right-size
Diagram source (Mermaid)
flowchart LR
  subgraph SRC["Sources"]
    direction TB
    K["Dash cameras"]
    E["ELD or tachograph"]
    V["Vehicle gateway"]
    F["Fuel cards, tanks"]
    C["Chargers (OCPP)"]
  end
  subgraph CORE["System of record"]
    direction TB
    R["Registers"]
    T["Trips, events, duty"]
    M["Maintenance"]
    N["Energy, costs"]
  end
  subgraph USE["Decisions"]
    direction TB
    D["Dispatch, routing"]
    S["Safety coaching"]
    A["Compliance records"]
    P["Replace, right-size"]
  end
  K --> T
  E --> T
  V --> T
  V --> M
  F --> N
  C --> N
  T --> N
  R --> D
  T --> D
  T --> S
  T --> A
  M --> A
  T --> P
  M --> P
  N --> P
  classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
  classDef neutral fill:#f1f4f6,stroke:#5b7a87,color:#122029
  class R,M,T,N core
  class V,E,K,F,C,D,S,P,A neutral

Text equivalent: Five sources feed the fleet system of record: the vehicle gateway (GPS plus the J1939 or OBD data bus), the ELD or tachograph, dash cameras, fuel cards and depot tanks, and chargers reporting through OCPP. The system of record holds the asset and driver registers; maintenance and work orders (fed by the gateway’s engine hours and fault codes); trips, events and duty status; and energy and costs, where fuel and charging records are matched to trips. Four decisions draw on it: dispatch and routing, safety coaching, replacement and right-sizing (from maintenance, trips and energy costs), and compliance records.

Component Job Design choice and trade-off
Vehicle gateway Position, speed, ignition, engine hours, fault codes OEM-embedded telematics avoids installs; aftermarket devices give one data model across brands. Heavy vehicles expose data through SAE J1939,[25] light vehicles through OBD-II[13]
ELD / tachograph Legal duty-status or driving-time record The legal record will disagree with telematics trip data at the edges
Dash cameras Video evidence, AI-detected events Highest privacy impact: driver-facing or not is a policy decision
Fuel and energy Transactions, tank levels, charging sessions Card odometers are unreliable; match transactions to telematics position
Chargers and CSMS Session control, load management OCPP is the open protocol between charging stations and charging management systems;[26] OCPP chargers let you change the software later
System of record Registers, work orders, trips, energy and costs Most data-quality problems are identity problems (a device moved between vans)
Integration APIs, file drops Under the EU Data Act, users of connected products such as cars can access and share the data their use generates[21]

Trust boundaries. Telematics and camera data are personal data about drivers: keep live location to dispatch and safety, give finance aggregates, and treat API tokens as credentials. Chargers and the CSMS are internet-connected controls that can stop tomorrow’s work: keep chargers on their own network segment, off the corporate LAN; give CSMS users named accounts; and require an OCPP security profile that uses TLS. Profile 3 adds client-side certificates for the chargers,[27] and a 2023 TU Wien study for Austria’s electricity association concluded that “OCPP 2.0.1, or OCPP-J 1.6 (JSON/Websocket) with security extensions when using OCPP security profile 3, are suitable for secure charging station control”.[28]

Happy path: check, drive a planned route within working-time limits, refuel or charge, return, data lands. The exception that matters most is a defect:

Figure 4. A defect found on the walkaround: the handoffs
WorkshopPlannerDispatchDriverAppBrake hose cracked1Defect, safety-critical2Van off road3Use spare van4Priority work order5Repaired, certified6Van back in service7
Diagram source (Mermaid)
sequenceDiagram
  autonumber
  participant A as App
  participant D as Driver
  participant X as Dispatch
  participant P as Planner
  participant W as Workshop
  D->>A: Brake hose cracked
  A->>P: Defect, safety-critical
  P->>X: Van off road
  X->>D: Use spare van
  P->>W: Priority work order
  W->>P: Repaired, certified
  P->>X: Van back in service

Text equivalent: The driver’s walkaround finds a cracked brake hose and records it in the driver app. The app sends a defect report flagged as safety-critical to the maintenance planner, who marks the vehicle off road and tells the dispatcher, who swaps the driver to a spare van. The planner raises a priority work order with the workshop; the workshop repairs and certifies the defect; the planner returns the vehicle to service and tells the dispatcher.

What the regulations ask of this flow, in two jurisdictions:

  • US (interstate commercial motor vehicles). Drivers report defects in specified parts (brakes, steering, lights, tyres, wheels, coupling devices and others) at the end of each day’s work; no report is needed if none is found. Before the vehicle runs again, the carrier repairs safety-affecting defects and certifies the repair, keeping both for three months.[29]
  • Great Britain (HGVs and PSVs). The DVSA guide states that “The driver is always legally responsible for the condition of the vehicle while in use”, requires at least one walkaround check every day, and expects drivers’ defect reports to be kept for at least 15 months.[30]

Other exceptions to design: a working-time limit reached mid-route (re-plan), a collision (preserve data), and a van that did not charge overnight (worked runbook).

Where fleet decisions are hardest and costliest: what a vehicle really costs, how many you need, how to maintain them, and when to replace them (including with an electric vehicle).

Total cost of ownership and equivalent annual cost

Link to section “Total cost of ownership and equivalent annual cost”

Total cost of ownership is “a financial estimate intended to help buyers and owners determine the direct and indirect costs of a product or service”; for a vehicle it includes depreciation, fuel, insurance, financing, repairs, fees and taxes, maintenance, and opportunity and downtime costs.[22] TCO on its own has a flaw: two options kept for different periods cannot be compared by their totals. The fix is the equivalent annual cost (EAC), described as “the cost per year of owning and operating an asset over its entire lifespan”: take the net present value of all costs (net of resale) and divide it by the annuity factor for the keep period.[23]

NPV(n)  = price + sum over years t = 1..n of  running_cost(t) / (1 + r)^t
                - resale(n) / (1 + r)^n
EAC(n)  = NPV(n) / A(n, r),   where A(n, r) = (1 - (1 + r)^-n) / r
Economic life = the n with the lowest EAC(n)

As the keep period grows, capital cost per year falls and running cost per year rises (maintenance, repairs and downtime grow with age). The sum is U-shaped; its bottom is the economic life. The chart shows Lab 1’s two illustrative vans.

Figure 5. Lab 1 output: equivalent annual cost by keep period for two illustrative vans
EAC per year (orange: diesel, teal: electric)345678910Keep period (years)16500160001550015000145001400013500130001250012000EAC per year
Diagram source (Mermaid)
%%{init: {"xyChart": {"width": 440, "height": 360}, "themeVariables": {"xyChart": {"plotColorPalette": "#c9800f, #16756f"}}}}%%
xychart-beta
  title "EAC per year (orange: diesel, teal: electric)"
  x-axis "Keep period (years)" [3, 4, 5, 6, 7, 8, 9, 10]
  y-axis "EAC per year" 12000 --> 16500
  line [13848, 13313, 13029, 12903, 12896, 12993, 13189, 13484]
  line [16165, 14803, 13957, 13402, 13041, 12828, 12737, 12758]

Text equivalent: Two lines of equivalent annual cost against keep periods of 3 to 10 years. The diesel van (orange) falls from 13,848 at 3 years to a minimum of 12,896 at 7 years, then rises to 13,484 at 10 years. The electric van (teal) starts higher, 16,165 at 3 years, falls below the diesel line between 7 and 8 years, and reaches its minimum of 12,737 at 9 years before edging up to 12,758 at 10. With these inputs the electric van is cheaper only if it is kept 8 years or more. The vertical axis starts at 12,000, not zero, so the gaps look larger than they are: from 6 years on the two vans differ by 1% to 6%.

Three lessons that hold beyond these numbers: the bottom is flat (6 to 8 years differ by under 1% for the diesel; three years late costs a lot); high-capital, low-running-cost vehicles need longer keep periods, so a blanket five-year policy penalises EVs; and downtime belongs in the model, or unreliable old vehicles are kept too long.

The replacement rule for a vehicle you already own asks what one more year costs: the resale value you give up (resale at n − 1 grown by a year’s interest, minus resale at n) plus year n’s running cost. Replace when that exceeds the best replacement’s EAC at its own economic life. With Lab 1’s inputs, keeping the diesel van through year 7 costs about 12,848 and through year 8 about 13,858, against 12,737 a year for a new electric van charged at the depot: replacing at the end of year 6 or 7 is close to a draw, and keeping it into year 8 costs about 1,100 more than replacing. (Illustrative; same inputs plus the marginal-cost formula.)

Measure utilisation by days for pool and service vehicles, hours for all-day vehicles, distance where cost follows kilometres; each misleads alone (30 km every day is high on days, low on distance).

Right-sizing asks whether each vehicle should exist and is the right type. US DOE guidance reviews mission and drive cycle, utilisation, class fit and age, solicits driver input through surveys or meetings, and evaluates each vehicle’s business case for reassigning, replacing, eliminating or using a more fuel-efficient vehicle. It lists alternatives to owning a vehicle, such as motor pools, sharing across offices, stipends, public transport and short-term rental, and notes that “a 10% reduction in vehicle weight can improve fuel economy by 6%–7%”.[10] US federal agencies must implement a structured vehicle allocation methodology, and GSA recommends repeating the study at least once every five years.[16]

Sizing the fleet from data asks how many vehicles are in use at the same time on a busy day. Lab 2’s method:

  1. From trip data, count the vehicles in use in each 15-minute slot of each day.
  2. Take each day’s peak.
  3. Choose a planning percentile of those daily peaks (the 90th, say: nine days in ten are covered).
  4. Add a spare allowance for maintenance and breakdowns, sized to your measured off-road rate.
  5. Cover the remaining peak days with rental, pool swaps or schedule changes, and price them.

In Lab 2’s data, eight of the ten vans (seven at the 90th percentile plus 10% spares) would cover nine days in ten. Low-use vans are candidates for review, not disposal: they may carry special equipment or already be the spares.

Maintenance strategy: reactive, preventive, condition-based

Link to section “Maintenance strategy: reactive, preventive, condition-based”
Strategy Trigger Strengths Weaknesses Fits
Reactive (run to failure) Breakdown No planning cost Roadside failures, safety risk, unpredictable downtime Non-safety items with cheap, quick failure (a courtesy light)
Preventive, time or distance based Calendar or odometer interval Predictable; easy to audit; regulators recognise it Some work is done before it is needed Safety inspections and legally required checks
Condition-based / predictive Measured condition: fault codes, oil analysis, brake wear, battery health Work done when needed; fewer surprises Needs reliable data and a model; harder to audit High-cost components with measurable wear

Time-based maintenance is criticised because equipment is “maintained whether it needs it or not”; predictive maintenance instead uses “the current condition of equipment” to time the work.[32] That is not a reason to drop time-based inspections. Safety inspections are a legal and evidential baseline in many places: US carriers “must systematically inspect, repair, and maintain” every vehicle under their control and keep records that include “A means to indicate the nature and due date of the various inspection and maintenance operations”.[33] The British DVSA guide says inspection frequency “would normally range between 4 to 13 weeks”, set by the deterioration expected for the vehicle’s age, load, terrain and use, and that inspections should follow a time-based pattern where practical, with mileage-based programmes “linked to time”.[30]

The practical answer is layered: time-based safety inspections as the floor, condition-based work where data is good, and reactive repair only where failure is cheap and harmless.

Tyres are both a large cost and a safety item. In the US, front tyres on buses, trucks and truck tractors need at least 4/32 inch of tread and other tyres 2/32 inch;[34] in Great Britain, since 1 February 2021 tyres over 10 years old may not be used on the front steered axles of HGVs, buses and coaches or on single wheels of minibuses.[35] Record tread depth, pressure and date code at each inspection, and set replacement thresholds above the legal minimum.

Figure 6. Choosing a maintenance strategy for a component
yesnonoyesyesnoFailure safety-critical orlegally inspected?Time-based inspection as thefloorFailure expensive or causesdowntime?Condition measurable andtrusted?Run to failure, fix on reportAdd condition-based triggersTime or distance interval
Diagram source (Mermaid)
flowchart TB
  Q1{"Failure safety-critical or legally inspected?"}
  Q1 -->|"yes"| PM["Time-based inspection as the floor"]
  Q1 -->|"no"| Q2{"Failure expensive or causes downtime?"}
  PM --> Q3{"Condition measurable and trusted?"}
  Q2 -->|"no"| RF["Run to failure, fix on report"]
  Q2 -->|"yes"| Q3
  Q3 -->|"yes"| CB["Add condition-based triggers"]
  Q3 -->|"no"| TB["Time or distance interval"]
  classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
  classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
  classDef risk fill:#fbeceb,stroke:#b4332b,color:#122029
  class Q1,Q2,Q3 decision
  class PM,CB,TB core
  class RF risk

Text equivalent: First ask whether a failure is safety-critical or legally inspected. If yes, a time-based inspection is the floor, and you then ask whether the component’s condition can be measured and trusted: if so, add condition-based triggers; if not, keep a time or distance interval. If the failure is not safety-critical, ask whether it is expensive or causes downtime: if not, run it to failure and fix on report; if so, go to the same measurability question.

Electrification changes the cost structure (more capital, less energy and maintenance), the operating model (charging constrains dispatch) and the risks (cold-weather range, grid lead times). It is a duty-cycle decision first.

What changes in the cost model. The US DOE notes “far fewer moving parts”, that “Brake wear is significantly reduced due to regenerative braking”, and common 8-year/100,000-mile battery warranties.[36] Energy cost depends on where you charge (depot off-peak, public rapid, reimbursed home); Lab 1’s “Try this” shows how far a public price moves the break-even.

Range is a distribution, not a number. fueleconomy.gov reports that at 20 °F (−7 °C), with cabin heating, an EV’s fuel economy can drop roughly 39% and its range 41% in mixed driving, citing a 2019 AAA study; conventional cars lose about 15% in city driving at that temperature.[37] Plan routes against winter range with a reserve, not against the brochure figure.

Charging is infrastructure. US DOE figures: Level 2 AC charging delivers 2.9 to 19.2 kW, about 25 miles (40 km) of range per hour; DC fast charging delivers up to 500 kW, roughly 100 to 200+ miles of range in 30 minutes, depending on the vehicle and state of charge.[38] Depot vans with long dwell times usually manage on Level 2; trucks and double-shifted vehicles may need DC. DOE advises engaging utilities “early in the infrastructure planning process” and lists demand charges among operating costs.[39] Managed (smart) charging spreads load to keep the site under its connection limit; OCPP supports smart charging with charge profiles and load balancing.[26] Connectors matter for mixed fleets: SAE published J3400 (the North American Charging System) as a recommended practice in September 2024, after a technical information report in December 2023, while CCS remains common.[20]

Policy is moving; date-stamp it. Example (as of 23 October 2026): a May 2025 settlement with 16 states required California’s CARB to propose repealing the high-priority and drayage parts of its Advanced Clean Fleets rule and to send an approved repeal to the Office of Administrative Law (OAL) by 31 August 2026.[40] On 25 September 2025 CARB’s board voted to repeal the parts that apply to federal and private fleets, drayage included, and gave state and local government fleets more time: the 50% zero-emission purchase requirement moves back three years and the 100% requirement to 2030.[41] Whether OAL approved the repeal could not be confirmed from an openable source (a trade report that it took effect on 10 September 2026 could not be fetched). Check current status before relying on any mandate or incentive.

Figure 7. Should this group of vehicles go electric now?
noyesnonoyesyesnoyesnoyesWinter daily distance within70% of usable range?Not yet: route redesign,PHEV or waitParked at a site you controlwith dwell time to charge?Reliable public or homecharging at a known price?Not yet: secure charging firstEAC lower at your keepperiod and charging price?Site power available in time?Start utility request; pilotelsewhereKeep current powertrain;revisit next yearPilot 5-10 vehicles, measure,then scale
Diagram source (Mermaid)
flowchart TB
  A{"Winter daily distance within 70% of usable range?"}
  A -->|"no"| N1["Not yet: route redesign, PHEV or wait"]
  A -->|"yes"| B{"Parked at a site you control with dwell time to charge?"}
  B -->|"no"| C{"Reliable public or home charging at a known price?"}
  C -->|"no"| N2["Not yet: secure charging first"]
  C -->|"yes"| D
  B -->|"yes"| E{"Site power available in time?"}
  E -->|"no"| N3["Start utility request; pilot elsewhere"]
  E -->|"yes"| D{"EAC lower at your keep period and charging price?"}
  D -->|"no"| N4["Keep current powertrain; revisit next year"]
  D -->|"yes"| P["Pilot 5-10 vehicles, measure, then scale"]
  classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
  classDef risk fill:#fbeceb,stroke:#b4332b,color:#122029
  classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
  class A,B,C,D,E decision
  class N1,N2,N3,N4 risk
  class P core

Text equivalent: Does winter daily distance fit within 70% of usable range? If not: not yet (re-cut routes, plug-in hybrids, or wait). If so: do vehicles park at a site you control with time to charge? If not, is reliable public or home charging available at a known price (if not, secure charging first)? If you control the site, is power available in time (if not, start the utility request and pilot elsewhere)? Once charging is solved: is EAC lower at your keep period and charging price? If not, keep the current powertrain and revisit next year; if so, pilot five to ten vehicles, measure, then scale. The 70% threshold is this Atlas’s planning margin, not a standard.

Practice Goal Owner Verification
Preventive maintenance No vehicle runs past an inspection or service due date Maintenance planner PM compliance (on time ÷ due)
Defect reporting and close-out No safety-critical defect is driven Driver, then maintenance Closed before next use; open-defect age
Fuel and energy management Pay only for energy fleet vehicles used, and use less Fleet manager with finance Exceptions investigated; litres or kWh per 100 km
Driver safety programme Fewer collisions and injuries Safety manager Collisions per million km; repeat events
Dispatch and routing Fewer kilometres, within working-time limits Dispatcher Planned versus actual km; hours breaches
Grey fleet control Workers’ own cars used for work are fit, insured and licensed Fleet manager with HR Share of business mileage with valid checks

Two playbooks deserve detail.

Fuel and energy reconciliation. Match each card transaction to the vehicle’s position at that time, and compare each vehicle’s litres (or kWh) per 100 km with its class median (rules in the reference implementation). US DOE estimates that US vehicles waste more than 6 billion gallons of fuel a year idling, about half of it by passenger vehicles, and says idling “can usually be reduced without compromising driver comfort or vehicle equipment operations”.[42] DOE also cites analysis that aggressive driving lowers fuel economy by 15% to 30% at highway speeds and 10% to 40% in stop-and-go traffic.[43] Smoother driving serves fuel and safety at once.

Driver safety programme. The UK HSE frames road risk as safe journey, safe driver or rider, and safe vehicle, and states that “Health and safety law applies to work activities on the road in the same way as it does on a fixed site”.[11]

  1. Safe driver: licence checks at hiring and at intervals; vehicle induction; fatigue and phone rules; coaching. US carriers must obtain each CMV driver’s motor vehicle record (MVR) at least once every 12 months and review it;[44] in Great Britain, DVLA’s online service shows a driver’s entitlements, penalty points and disqualifications when the driver gives a check code, which must be used within 21 days and only once.[45]
  2. Safe vehicle: specification (including driver assistance), inspection and defect close-out. In the EU, Article 6 of Regulation (EU) 2019/2144 requires Intelligent Speed Assistance on motor vehicles of categories M and N, so vans and trucks as well as cars;[46] the Commission’s summary gives July 2024 for all new cars and says “The driver is always in control and can easily override the ISA system”.[19] Check the Regulation’s Annex II for the dates of heavier categories.
  3. Safe journey: schedules drivable within limits; no calls to drivers at the wheel; weather plans.

On speed, the WHO states that “every 1% increase in mean speed produces a 4% increase in the fatal crash risk”.[9] ISO 39001 offers a road-safety management-system frame.[47] Collisions follow the checklist and feed the claims process in Cost, capacity and sustainability.

Working-time rules: US hours of service and EU drivers’ hours

Link to section “Working-time rules: US hours of service and EU drivers’ hours”

Two regimes as examples (as of October 2026; other countries and vehicle types differ):

Rule US, property-carrying CMV (49 CFR 395.3)[48] EU, Regulation (EC) 561/2006[14]
Rest before driving 10 consecutive hours off duty Daily rest at least 11 hours (may be cut to 9 hours up to three times a week)
Daily driving 11 hours within the 14-hour window 9 hours, extendable to 10 hours twice a week
Daily window No driving after 14 consecutive hours since coming on duty (Set by the daily rest rules)
Break 30 consecutive minutes (off duty, sleeper berth or on duty not driving) before driving beyond 8 hours At least 45 minutes (may be split 15 + 30) after 4½ hours of driving
Weekly 60 hours on duty in 7 days, or 70 in 8 days if operating every day; a 34-hour off-duty period restarts the count 56 hours of driving in a week, 90 hours in two weeks; weekly rest 45 hours (24 hours every second week)
Records ELD for most carriers since 18 December 2017[18] Tachograph records, checked at the roadside and at company premises

Exceptions change the picture. In the US, drivers who stay within a 150 air-mile radius of their work reporting location, are released within 14 consecutive hours and have at least 10 hours off between shifts are exempt from the record-of-duty-status and ELD requirements; and a driver who meets adverse driving conditions may drive up to two additional hours to complete the run or reach a place offering safety.[49] Paper logs may replace an ELD for drivers needing records on no more than 8 days in 30, some driveaway-towaway work and vehicles made before model year 2000.[18] In the EU, tachographs are mandatory in new goods vehicles over 3.5 tonnes and new passenger vehicles for more than nine people, and from 1 July 2026 also in vehicles of 2.5 to 3.5 tonnes engaged in international hire-or-reward transport; smart tachographs also record the vehicle’s GNSS position at certain times.[17]

Separate what is mandatory from what is merely useful.

Item Type What it gives a fleet
49 CFR Parts 395 and 396 (US)[48][33] Regulation (mandatory for covered carriers) Hours of service, ELDs, systematic maintenance, inspection reports, record retention
Regulation (EC) 561/2006 and (EU) 165/2014[14][17] Regulation (EU) Drivers’ hours and tachographs
DVSA Guide to maintaining roadworthiness (GB)[30] Regulator guidance, used in licensing decisions Inspection intervals, walkaround checks, records, brake testing
FMCSA safety categories (BASICs)[24] Regulator measurement system (US) Seven categories, from unsafe driving and hours of service to vehicle maintenance and crash indicator. A revised method approved in November 2024 renames them compliance categories, with the launch date to follow in a separate notice;[50] none was found by October 2026
UK ICO guidance on monitoring workers[51] Regulator guidance (UK data protection) When vehicle monitoring and cameras are lawful and proportionate
GSA vehicle allocation methodology (US federal)[16] Regulation for federal agencies; useful method for others Structured right-sizing study
ISO 39001[47] Voluntary management-system standard Road traffic safety management system
OCPP, SAE J3400[26][20] Industry standards Charger management, connectors
US EPA SmartWay[52] Voluntary public–private programme Freight emissions benchmarking for carriers and shippers

Named tools are examples whose descriptions were checked on 2026-10-23, not recommendations.

Category Job Examples (verified descriptions) Selection criteria
Telematics platform Position, trips, engine data, events, alerts Traccar (self-hostable, open source; trip reports, geofence and harsh-driving alerts);[53] commercial platforms such as Samsara (safety scores from gateway and camera events)[54] Device support for your mix; API and bulk export; data ownership on exit
Fleet management information system Registers, maintenance, work orders, costs Fleetbase Fleet-Ops (AGPL-3.0-or-later; dispatch, maintenance schedules, telematics integrations)[5] Workshop fit; integration with finance
ELD / tachograph tools Legal duty-status records, downloads, infringement reports No supplier named: US carriers may use only ELDs on FMCSA’s registered list,[55] so start from the regulator’s list Regulatory status in your jurisdiction; driver usability
Video telematics Event video, AI event detection, coaching Samsara’s front-facing and dual-facing AI dash cams, whose events feed its safety scores[54] Privacy controls (audio off, driver-facing optional, retention); false-positive rate
Fuel cards and depot fuel Transactions, controls No issuer named: card networks and controls differ by country Merchant restrictions, per-card limits, data feed
Charging management (CSMS) Session control, smart charging, billing OCPP-based systems[26] OCPP version support, load management, tariff integration
Routing and scheduling Plans routes under constraints Google OR-Tools solver library;[56] commercial routing products Constraints covered (time windows, capacities, breaks); map data

Lock-in. Leased devices mean a reinstall campaign to switch, and history may export only in summary: test a full export and put export format and device ownership in the contract (with ProcurementOps).

Automation helps where decisions are frequent, rules clear and data reliable; it harms where it hides safety judgement or punishes drivers for sensor noise.

  • Route optimisation is NP-hard (the vehicle routing problem generalises the travelling salesman problem).[12] OR-Tools’ documentation says “Vehicle routing problems are inherently intractable” and that its solver “sometimes returns solutions that are good, but not optimal”.[56] Heuristics (Lab 4) get much of the gain, and the objective matters as much as the algorithm: OR-Tools’ VRP example minimises the longest route, because minimising total distance alone can push all the work onto one vehicle.[57]
  • AI-detected driving events (phone use, close following) widen what can be coached and what is recorded about people; review each event before it reaches a score that affects pay or discipline.
  • Predictive maintenance needs failure history most small fleets lack; start with fault-code alerts. Language models can summarise workshop notes, but not decide fitness to drive.
  • Autonomous vehicles change who operates, not whether operations exist. Waymo describes “fleet response” agents who answer questions from the automated driver, which “is in control of the vehicle at all times” and “may come to a stop if it determines that is the safest course of action”; when needed, roadside assistance retrieves the vehicle manually.[58] Remote assistance, retrieval, cleaning, charging and maintenance remain fleet operations.

Reference implementation: operating artefacts

Link to section “Reference implementation: operating artefacts”

Illustrative fleet: 120 vans, 15 rigid trucks, two depots, telematics with an API, an in-house workshop. Adapt intervals to your regulator and the manufacturer.

1. Maintenance schedule as data, reviewed and auditable, so software can compute due dates.

Example status: YAML syntax-checked by the validator; not executed. Intervals are illustrative; the file is data for your maintenance software, which applies the earliest trigger.

# pm-schedule.yaml: whichever trigger comes first raises the work order
version: 3
owner: maintenance-planner
reviewed: 2026-10-01
classes:
  van-3.5t:
    safety_inspection: {every_weeks: 10, every_km: null}
    service_a: {every_months: 12, every_km: 30000}
    brake_check: {every_weeks: 10}
  rigid-18t:
    safety_inspection: {every_weeks: 6}       # general haulage band, DVSA guide
    service_a: {every_months: 6, every_km: 40000}
    brake_performance_test: {at: [safety_inspection]}
overrides:                                    # applied on top of the class rules
  - when: {age_years_gte: 12}                 # older vehicles inspected more often
    set: {safety_inspection: {every_weeks: 6}}
tolerances:
  overdue_grace_days: 0                       # safety inspections: no grace
  service_grace_km: 1000
escalation:
  overdue_safety_inspection: vehicle_off_road
  overdue_service: notify_fleet_manager

2. Fuel and energy exception rules, applied to every transaction.

Example status: YAML syntax-checked. The when expressions are illustrative pseudo-code for a rule engine, not the syntax of a named product; thresholds are starting points to tune on your own data.

# fuel-exceptions.yaml
rules:
  - id: location-mismatch
    when: distance_card_site_to_vehicle_m > 500
    action: hold_for_review
  - id: over-capacity
    when: litres > tank_capacity_l * 1.05
    action: hold_for_review
  - id: rapid-refill
    when: km_since_last_fill < 100 and litres > 20
    action: review
  - id: wrong-product
    when: product not in vehicle.allowed_fuels
    action: hold_for_review
  - id: consumption-drift
    when: l_per_100km_30d > class_median * 1.25
    action: coach_or_inspect
review:
  owner: fleet-manager
  sla_hours: 72
  evidence: [card_transaction, vehicle_position, odometer]

3. Vehicle register columns. The minimum fields, as a CSV header:

unit_id,vin,registration,class,mission,cost_centre,depot,ownership,acquired_on,
acquisition_cost,odometer_km,engine_hours,telematics_device_id,planned_replacement,
status,disposed_on

4. Pulling trips from a telematics API. Traccar’s API (version 6.16.0 of its OpenAPI description) returns trips from GET /reports/trips for a time window given in ISO 8601 and at least one device or group; each trip has a distance in metres, speeds in knots and a duration in seconds, and the API accepts HTTP Basic or a bearer token.[59] The script below writes trips in Lab 2’s format so the utilisation analysis can run on real data. Two details decide whether the numbers are right: Traccar returns times as ISO 8601 (its examples are UTC), so the script converts them to the fleet’s local time zone before cutting days and shift minutes; and Lab 2 counts working days, so the script numbers Monday-to-Friday dates only and reports how many there were.

Example status: executed on 2026-10-23 against a local mock server returning trips in the documented format, across the 25 October 2026 clock change (Python 3.8 with a test stand-in for zoneinfo; the script needs Python 3.9+). Not run against a real Traccar server. Use a read-only Traccar user limited to the group you analyse, and give its token an expiry date (POST /session/token accepts an expiration).[59]

"""Pull trips from a Traccar server into the Lab 2 CSV format (Python 3.9+).

Usage: traccar_trips.py GROUP_ID FROM TO TIMEZONE > trips.csv
FROM and TO are ISO 8601 times such as 2026-10-05T00:00:00Z; TIMEZONE is the
fleet's IANA zone such as Europe/London. Reads TRACCAR_URL (for example
https://tracking.example.com/api) and TRACCAR_TOKEN from the environment. Use a
read-only Traccar user limited to the group you analyse: the token grants
everything that user can see.

Days are numbered by local working day (Monday-Friday) because Lab 2 counts
working days; weekend trips are skipped. Remove public holidays by hand. The
number of working days is printed to stderr: pass it to lab2_utilisation.py.
"""
import csv
import json
import os
import sys
import urllib.parse
import urllib.request
from datetime import datetime, timedelta
from zoneinfo import ZoneInfo

BASE = os.environ["TRACCAR_URL"].rstrip("/")
TOKEN = os.environ["TRACCAR_TOKEN"]
GROUP_ID, FROM, TO, TZ = sys.argv[1], sys.argv[2], sys.argv[3], ZoneInfo(sys.argv[4])


def get(path, **params):
    url = f"{BASE}{path}?{urllib.parse.urlencode(params, doseq=True)}"
    req = urllib.request.Request(url, headers={"Authorization": f"Bearer {TOKEN}",
                                               "Accept": "application/json"})
    with urllib.request.urlopen(req, timeout=60) as resp:
        return json.load(resp)


def local(ts):
    """Traccar times are ISO 8601 (UTC 'Z' in its examples); convert to fleet time."""
    return datetime.fromisoformat(ts.replace("Z", "+00:00")).astimezone(TZ)


first, last = local(FROM).date(), local(TO).date()
dates = [first + timedelta(days=i) for i in range((last - first).days + 1)]
workday = {d: n + 1 for n, d in enumerate(d for d in dates if d.weekday() < 5)}

trips = get("/reports/trips", groupId=GROUP_ID, **{"from": FROM, "to": TO})
w = csv.writer(sys.stdout)
w.writerow(["vehicle", "day", "start_min", "end_min", "km", "idle_min"])
skipped = 0
for t in trips:
    s, e = local(t["startTime"]), local(t["endTime"])
    if s.date() not in workday or e <= s:
        skipped += 1
        continue
    same_day = e.date() == s.date()
    end_min = e.hour * 60 + e.minute if same_day else 24 * 60  # cut trips at midnight
    w.writerow([t["deviceName"], workday[s.date()], s.hour * 60 + s.minute, end_min,
                round(t["distance"] / 1000, 1),
                0])  # trips carry no idle time; see /reports/summary engineHours
print(f"working days: {len(workday)}; trips skipped (weekend or zero length): {skipped}",
      file=sys.stderr)

Run it with the URL and token in the environment, never on the command line where they end up in shell history:

export TRACCAR_URL="https://tracking.example.com/api"
read -rs TRACCAR_TOKEN && export TRACCAR_TOKEN
python3 traccar_trips.py 7 2026-10-05T00:00:00Z 2026-10-30T23:59:59Z \
  Europe/London > trips.csv
# stderr reports "working days: 20; ..." - pass that number to Lab 2
python3 lab2_utilisation.py trips.csv 20

The trips report has no idle field, so the script writes zero; Traccar’s summary report adds engine hours for the period, and engine hours minus trip time gives a rough idle estimate.[59] Trips that cross midnight are cut at 24:00, and public holidays must be removed by hand; Lab 2 stops with an error if a day number exceeds the working days you pass, so days% can never exceed 100.

Four labs, beginner to advanced, in Python’s standard library; no accounts, no cost.

Example status: all four labs verified by execution on 2026-10-23 (Python 3.8.10, Linux). All data is illustrative.

Lab 1 (beginner): TCO, equivalent annual cost and economic life

Link to section “Lab 1 (beginner): TCO, equivalent annual cost and economic life”

Objective. Compare a diesel van and an electric van on equivalent annual cost for keep periods of 1 to 10 years, find each one’s economic life, and find the annual distance at which the electric van breaks even. Prerequisites. Python 3.8 or later. Cost and risk. None.

Save the inputs as vans.json (one currency; energy price per litre or per kWh; consumption per 100 km).

{
  "discount_rate": 0.06,
  "km_per_year": 25000,
  "vehicles": {
    "diesel_van": {
      "price": 38000, "charger": 0,
      "use_per_100km": 8.5, "energy_price": 1.60,
      "maint_year1": 900, "maint_growth": 0.25,
      "downtime_days_year1": 2, "downtime_cost_per_day": 250,
      "insurance": 1400,
      "depr_year1": 0.25, "depr_after": 0.12
    },
    "electric_van": {
      "price": 52000, "charger": 3000,
      "use_per_100km": 24.0, "energy_price": 0.22,
      "maint_year1": 550, "maint_growth": 0.25,
      "downtime_days_year1": 2, "downtime_cost_per_day": 250,
      "insurance": 1600,
      "depr_year1": 0.30, "depr_after": 0.13
    }
  }
}

Save this as lab1_tco.py:

"""Lab 1: total cost of ownership and equivalent annual cost (Python 3.8+).

Compares a diesel van and a battery-electric van over keep periods of 1-10 years
and finds each one's economic life (the keep period with the lowest EAC).
All inputs are illustrative; replace them with your own quotes and data.
"""
import json
import sys

def eac(npv_cost, rate, years):
    """Equivalent annual cost: NPV of costs divided by the annuity factor."""
    annuity = (1 - (1 + rate) ** -years) / rate
    return npv_cost / annuity

def npv_of_keeping(v, years, rate, km_per_year):
    """NPV of buying now, running for `years`, selling at the end."""
    cost = v["price"] + v.get("charger", 0)
    for t in range(1, years + 1):
        energy = km_per_year / 100 * v["use_per_100km"] * v["energy_price"]
        maint = v["maint_year1"] * (1 + v["maint_growth"]) ** (t - 1)
        days_down = v["downtime_days_year1"] * (1 + v["maint_growth"]) ** (t - 1)
        down = days_down * v["downtime_cost_per_day"]
        yearly = energy + maint + down + v["insurance"]
        cost += yearly / (1 + rate) ** t
    resale = v["price"] * (1 - v["depr_year1"]) * (1 - v["depr_after"]) ** (years - 1)
    cost -= resale / (1 + rate) ** years
    return cost

def table(vehicles, rate, km):
    rows = {}
    for name, v in vehicles.items():
        rows[name] = [eac(npv_of_keeping(v, n, rate, km), rate, n) for n in range(1, 11)]
    return rows

def main():
    cfg = json.load(open(sys.argv[1] if len(sys.argv) > 1 else "vans.json"))
    rate, km = cfg["discount_rate"], cfg["km_per_year"]
    rows = table(cfg["vehicles"], rate, km)
    names = list(rows)
    print("keep_years " + " ".join(f"{n:>12}" for n in names))
    for i in range(10):
        print(f"{i + 1:>10} " + " ".join(f"{rows[n][i]:>12,.0f}" for n in names))
    for n in names:
        best = min(range(10), key=lambda i: rows[n][i])
        print(f"economic life {n}: {best + 1} years, EAC {rows[n][best]:,.0f} per year")
    # Break-even distance at a 7-year keep: smallest km/yr where EV EAC <= diesel EAC.
    ice, ev = names[0], names[1]
    for k in range(5000, 80001, 500):
        r = table(cfg["vehicles"], rate, k)
        if r[ev][6] <= r[ice][6]:
            print(f"break-even at 7-year keep: about {k:,} km per year")
            break
    else:
        print("no break-even below 80,000 km per year")

if __name__ == "__main__":
    main()

Steps: mkdir fleet-labs && cd fleet-labs, save both files, then run python3 lab1_tco.py vans.json.

Expected output.

keep_years   diesel_van electric_van
         1       17,980       25,870
         2       14,922       18,724
         3       13,848       16,165
         4       13,313       14,803
         5       13,029       13,957
         6       12,903       13,402
         7       12,896       13,041
         8       12,993       12,828
         9       13,189       12,737
        10       13,484       12,758
economic life diesel_van: 7 years, EAC 12,896 per year
economic life electric_van: 9 years, EAC 12,737 per year
break-even at 7-year keep: about 27,000 km per year

Validation. By hand, the diesel van kept one year: running cost = 25,000 km × 8.5 L/100 km × 1.60 = 3,400 fuel + 900 maintenance + 500 downtime + 1,400 insurance = 6,200; resale = 38,000 × 0.75 = 28,500. NPV = 38,000 + (6,200 − 28,500) / 1.06 = 16,962; the one-year annuity factor is 1/1.06, so EAC = 16,962 × 1.06 = 17,980, which matches the first row.

Try this. Set the electric van’s energy_price to 0.45 (a public rapid-charging price) and rerun: its best EAC rises to 14,117 and the 7-year break-even moves to about 79,500 km a year. Charging location can matter more than the vehicle. Changing km_per_year to 15,000 or 40,000 does not move the economic lives: the model ties maintenance to age, not distance, a limitation to fix before real use.

Troubleshooting. KeyError means a field is missing from vans.json; every vehicle needs every field. A ZeroDivisionError means a discount rate of 0: use a small positive rate. Teardown. Delete the fleet-labs folder when you finish all labs.

Lab 2 (beginner to intermediate): utilisation and a right-sizing estimate

Link to section “Lab 2 (beginner to intermediate): utilisation and a right-sizing estimate”

Objective. From a trip log, compute each van’s utilisation by days, distance, engine hours and idle share, then estimate the fleet size needed to cover nine days in ten. Prerequisites. Python 3.8+. Cost and risk. None.

Save this generator as make_trips.py (it writes a seeded, illustrative trip log for 10 vans over 20 working days):

"""Lab 2 data: write an illustrative trip log for 10 vans over 20 working days."""
import csv
import random
import sys

random.seed(42)
USE_PROB = [0.95, 0.9, 0.9, 0.85, 0.8, 0.75, 0.6, 0.35, 0.25, 0.15]
with open(sys.argv[1] if len(sys.argv) > 1 else "trips.csv", "w", newline="") as f:
    w = csv.writer(f)
    w.writerow(["vehicle", "day", "start_min", "end_min", "km", "idle_min"])
    for day in range(1, 21):
        for i, p in enumerate(USE_PROB):
            if random.random() > p:
                continue
            t = random.randint(7 * 60, 9 * 60)          # first departure 07:00-09:00
            for _ in range(random.randint(1, 4)):
                dur = random.randint(45, 180)
                end = min(t + dur, 18 * 60)
                if end - t < 20:
                    break
                km = round((end - t) / 60 * random.uniform(18, 35), 1)
                idle = round((end - t) * random.uniform(0.05, 0.30))
                w.writerow([f"V{i + 1:02d}", day, t, end, km, idle])
                t = end + random.randint(20, 90)        # time on site between trips
                if t >= 17 * 60:
                    break

Save the analysis as lab2_utilisation.py:

"""Lab 2: utilisation, idling and a right-sizing estimate (Python 3.8+)."""
import csv
import math
import sys
from collections import defaultdict

DAYS = int(sys.argv[2]) if len(sys.argv) > 2 else 20   # working days in the sample
SHIFT_MIN = 11 * 60       # 07:00-18:00 shift window
MIN_DAYS_PCT = 50         # policy threshold: review vans used on fewer days than this
SPARE_PCT = 10            # policy: spare vehicles on top of the planning peak

trips = list(csv.DictReader(open(sys.argv[1] if len(sys.argv) > 1 else "trips.csv")))
by_v = defaultdict(lambda: {"days": set(), "km": 0.0, "eng": 0, "idle": 0})
busy = defaultdict(set)   # (day, 15-minute slot) -> vehicles in use
for r in trips:
    v, d, s, e = r["vehicle"], int(r["day"]), int(r["start_min"]), int(r["end_min"])
    if not 1 <= d <= DAYS or not 0 <= s < e <= 24 * 60:
        sys.exit(f"bad row {r}: day must be 1..{DAYS} and start < end within the day")
    x = by_v[v]
    x["days"].add(d)
    x["km"] += float(r["km"])
    x["eng"] += e - s
    x["idle"] += int(r["idle_min"])
    for slot in range(s // 15, math.ceil(e / 15)):
        busy[(d, slot)].add(v)

print(f"{'van':4} {'days%':>6} {'km':>7} {'eng_h':>6} "
      f"{'use%shift':>11} {'idle%':>6}  flag")
for v in sorted(by_v):
    x = by_v[v]
    days_pct = 100 * len(x["days"]) / DAYS
    shift_pct = 100 * x["eng"] / (DAYS * SHIFT_MIN)
    idle_pct = 100 * x["idle"] / x["eng"]
    flag = "review" if days_pct < MIN_DAYS_PCT else ""
    print(f"{v:4} {days_pct:6.0f} {x['km']:7.0f} {x['eng'] / 60:6.1f} "
          f"{shift_pct:11.0f} {idle_pct:6.1f}  {flag}")

peaks = sorted(max((len(vs) for (d, _), vs in busy.items() if d == day), default=0)
               for day in range(1, DAYS + 1))
p90 = peaks[math.ceil(0.9 * len(peaks)) - 1]
need = math.ceil(p90 * (1 + SPARE_PCT / 100))
mid = peaks[len(peaks) // 2]
print(f"daily peak vans in use: min {peaks[0]}, median {mid}, max {peaks[-1]}")
print(f"90th percentile of daily peaks: {p90}; with {SPARE_PCT}% spares: {need} vans "
      f"(fleet today: {len(by_v)})")

Run python3 make_trips.py trips.csv and then python3 lab2_utilisation.py trips.csv (an optional second argument gives the number of working days; the default is 20). use%shift is engine-on trip time, idling included, as a share of the 07:00-18:00 shift window.

Expected output (the generator writes 326 trips plus a header):

van   days%      km  eng_h   use%shift  idle%  flag
V01      95    2275   84.5          38   19.6  
V02      80    2035   75.5          34   17.2  
V03      85    1804   69.6          32   16.3  
V04      95    2372   87.0          40   19.6  
V05      65    1447   51.7          24   19.6  
V06      85    2188   82.8          38   16.9  
V07      75    2034   73.4          33   18.3  
V08      30     718   26.5          12   19.9  review
V09      25     720   27.2          12   18.4  review
V10       5     185    7.0           3   13.0  review
daily peak vans in use: min 4, median 7, max 8
90th percentile of daily peaks: 7; with 10% spares: 8 vans (fleet today: 10)

Validation. V10 has a 15% daily chance of use, so one day (5%) is within random spread; the 90th percentile (7) lies between the median (7) and the maximum (8), as it must.

Interpretation. Ask what the three flagged vans carry and who uses them, then price eight vans plus peak rental.

Troubleshooting. bad row means a day number above the working days you passed, or a trip whose end is not after its start; fix the data rather than the check. With real data from the Traccar script, idle% is zero (no idle data). Teardown. Delete trips.csv.

Lab 3 (intermediate): checking a duty log against simplified US hours-of-service rules

Link to section “Lab 3 (intermediate): checking a duty log against simplified US hours-of-service rules”

Objective. Flag breaches of the 14-hour window, 11-hour driving limit, 30-minute break and 70-hour/8-day limit in a duty log (49 CFR 395.3).[48] Prerequisites. Python 3.8+. Cost and risk. None; a teaching tool that ignores sleeper-berth splits, adverse conditions, short-haul and the 34-hour restart.

Save the illustrative log as duty_log.csv (statuses: OFF off duty, SB sleeper berth, D driving, ON on duty not driving; the last row only marks the end of the log):

driver,time,status
D-017,2026-10-05T00:00,OFF
D-017,2026-10-05T06:00,ON
D-017,2026-10-05T06:30,D
D-017,2026-10-05T10:30,ON
D-017,2026-10-05T11:00,D
D-017,2026-10-05T15:00,ON
D-017,2026-10-05T15:30,D
D-017,2026-10-05T17:30,OFF
D-017,2026-10-06T05:00,ON
D-017,2026-10-06T05:15,D
D-017,2026-10-06T13:45,OFF
D-017,2026-10-06T14:15,D
D-017,2026-10-06T16:00,OFF
D-017,2026-10-07T04:00,ON
D-017,2026-10-07T04:30,D
D-017,2026-10-07T09:00,OFF
D-017,2026-10-07T09:30,D
D-017,2026-10-07T12:00,ON
D-017,2026-10-07T15:00,D
D-017,2026-10-07T18:00,ON
D-017,2026-10-07T18:30,D
D-017,2026-10-07T19:30,OFF
D-017,2026-10-08T12:00,OFF

Save the checker as lab3_hos.py:

"""Lab 3: a simplified US property-carrying hours-of-service checker (Python 3.8+).

Teaching tool only. It checks the 10-hour reset, the 14-hour window, the 11-hour
driving limit, the 30-minute break after 8 hours of driving and the 70-hour/8-day
limit. It ignores sleeper-berth splits, adverse driving conditions, the short-haul
exception and the 34-hour restart, so it must never be used for compliance.
"""
import csv
import sys
from datetime import datetime, timedelta

OFF = {"OFF", "SB"}

def minutes(events):
    """Expand status-change events into one status per minute."""
    out = []
    for (t0, s0), (t1, _) in zip(events, events[1:]):
        n = int((t1 - t0).total_seconds() // 60)
        out += [(t0 + timedelta(minutes=i), s0) for i in range(n)]
    return out

def check(timeline):
    found, off_run, shift_start = [], 10 * 60, None
    drive_shift = drive_since_break = nondrive_run = 0
    history = []                      # 1 if on duty (D or ON) for each minute, for 70/8
    for t, s in timeline:
        on = s not in OFF
        history.append(1 if on else 0)
        if not on:
            off_run += 1
            nondrive_run += 1
            if nondrive_run >= 30:
                drive_since_break = 0
            continue
        if off_run >= 10 * 60:        # on duty after 10 hours off: a new shift
            shift_start, drive_shift, drive_since_break = t, 0, 0
        off_run = 0
        if s != "D":
            nondrive_run += 1
            if nondrive_run >= 30:
                drive_since_break = 0
            continue
        nondrive_run = 0
        drive_shift += 1
        drive_since_break += 1
        rules = [
            ("14-hour window",
             shift_start is not None and t >= shift_start + timedelta(hours=14)),
            ("11-hour driving limit", drive_shift > 11 * 60),
            ("30-minute break required", drive_since_break > 8 * 60),
            ("70 hours in 8 days", sum(history[-8 * 1440:]) > 70 * 60),
        ]
        for name, broken in rules:
            new = (not found or found[-1][1] != name
                   or t - found[-1][2] > timedelta(minutes=1))
            if broken and new:
                found.append([t, name, t])
            elif broken:
                found[-1][2] = t
    return found

def main():
    path = sys.argv[1] if len(sys.argv) > 1 else "duty_log.csv"
    rows = list(csv.DictReader(open(path)))
    events = [(datetime.fromisoformat(r["time"]), r["status"]) for r in rows]
    for start, rule, last in check(minutes(events)):
        mins = int((last - start).total_seconds() // 60) + 1
        print(f"{start:%Y-%m-%d %H:%M}  {rule:26} {mins:4d} min of driving")
    print("done")

if __name__ == "__main__":
    main()

Run python3 lab3_hos.py duty_log.csv.

Expected output.

2026-10-06 13:15  30-minute break required     30 min of driving
2026-10-07 18:30  14-hour window               60 min of driving
done

Validation. 6 October: driving 05:15–13:45 is 8.5 hours without a 30-minute break, so the last 30 minutes are flagged. 7 October: on duty at 04:00, so the window closes at 18:00 and the hour from 18:30 is flagged. 5 October: the 30-minute on-duty periods count as breaks under the rule,[48] and 10 hours of driving is inside the limit.

Troubleshooting. ValueError: Invalid isoformat string means a timestamp is not in YYYY-MM-DDTHH:MM form. The checker treats the time before the first row as a full 10-hour rest, so a log that starts mid-shift opens its first shift at the first on-duty row and can miss a 14-hour breach; start logs at the beginning of a rest period. Teardown. Delete the files.

Lab 4 (advanced): capacitated routing with the savings method and 2-opt

Link to section “Lab 4 (advanced): capacitated routing with the savings method and 2-opt”

Objective. Route three 32-unit vans from one depot to 12 stops and compare a naive plan with a heuristic one. Prerequisites. Python 3.8+. Cost and risk. None.

Save the stops as stops.csv (coordinates in km from the depot, demand in units):

stop,x_km,y_km,demand
DEPOT,0,0,0
S01,4,9,8
S02,-6,7,6
S03,9,-3,10
S04,-8,-5,7
S05,2,14,5
S06,12,6,9
S07,-11,2,4
S08,5,-10,6
S09,-3,-12,8
S10,14,-8,5
S11,-13,11,7
S12,7,4,6

Save the planner as lab4_routes.py:

"""Lab 4: capacitated routing with Clarke-Wright savings and 2-opt (Python 3.8+).

Distances are straight lines times a road factor; real routing needs a road network
and usually a solver such as OR-Tools. The point is to compare a naive plan with a
heuristic one and to see why routing is a search problem, not a formula.
"""
import csv
import math
import sys

CAPACITY = 32       # units per van
ROAD_FACTOR = 1.3   # straight-line to road distance, illustrative

rows = list(csv.DictReader(open(sys.argv[1] if len(sys.argv) > 1 else "stops.csv")))
pts = {r["stop"]: (float(r["x_km"]), float(r["y_km"])) for r in rows}
dem = {r["stop"]: int(r["demand"]) for r in rows}
stops = [r["stop"] for r in rows if r["stop"] != "DEPOT"]

def d(a, b):
    (x1, y1), (x2, y2) = pts[a], pts[b]
    return ROAD_FACTOR * math.hypot(x1 - x2, y1 - y2)

def length(route):
    path = ["DEPOT"] + route + ["DEPOT"]
    return sum(d(a, b) for a, b in zip(path, path[1:]))

def naive():
    """Fill vans in stop-number order: what a spreadsheet plan often does."""
    routes, cur, load = [], [], 0
    for s in stops:
        if load + dem[s] > CAPACITY:
            routes.append(cur)
            cur, load = [], 0
        cur.append(s)
        load += dem[s]
    return routes + [cur]

def savings():
    routes = {s: [s] for s in stops}            # start: one route per stop
    owner = {s: s for s in stops}
    pairs = sorted(((d("DEPOT", i) + d("DEPOT", j) - d(i, j), i, j)
                    for i in stops for j in stops if i < j), reverse=True)
    for sav, i, j in pairs:
        ri, rj = owner[i], owner[j]
        if ri == rj or sav <= 0:
            continue
        a, b = routes[ri], routes[rj]
        if sum(dem[s] for s in a + b) > CAPACITY:
            continue
        # i and j must be route ends; orient so that i ends a and j starts b.
        if a[-1] != i:
            a = a[::-1]
        if b[0] != j:
            b = b[::-1]
        if a[-1] != i or b[0] != j:
            continue
        routes[ri] = a + b
        del routes[rj]
        for s in routes[ri]:
            owner[s] = ri
    return list(routes.values())

def two_opt(route):
    best, improved = route[:], True
    while improved:
        improved = False
        for i in range(len(best) - 1):
            for k in range(i + 1, len(best)):
                cand = best[:i] + best[i:k + 1][::-1] + best[k + 1:]
                if length(cand) < length(best) - 1e-9:
                    best, improved = cand, True
    return best

def show(name, routes):
    print(name)
    for r in routes:
        load = sum(dem[s] for s in r)
        print(f"  load {load:2d}  {length(r):6.1f} km  " + " > ".join(r))
    print(f"  total {sum(length(r) for r in routes):.1f} km with {len(routes)} vans")

show("naive (stop order)", naive())
show("savings + 2-opt", [two_opt(r) for r in savings()])

Run python3 lab4_routes.py stops.csv.

Expected output.

naive (stop order)
  load 31    84.0 km  S01 > S02 > S03 > S04
  load 32   118.2 km  S05 > S06 > S07 > S08 > S09
  load 18   101.9 km  S10 > S11 > S12
  total 304.1 km with 3 vans
savings + 2-opt
  load 28    53.9 km  S01 > S05 > S06 > S12
  load 24    56.6 km  S04 > S07 > S11 > S02
  load 29    60.3 km  S03 > S10 > S08 > S09
  total 170.9 km with 3 vans

Validation. Every stop appears once per plan; no load exceeds 32. Demand is 81 units, so at least three vans are needed (81 ÷ 32 = 2.53, rounded up). The heuristic plan is 133.2 km (44%) shorter because the naive one criss-crosses the area.

Extend it. Add time windows and the savings method needs repair steps; a solver such as OR-Tools, with capacities, time windows and dropped visits, earns its place there.[56] Troubleshooting. If a route exceeds capacity, check that CAPACITY is at least the largest single demand. Teardown. Delete the fleet-labs folder.

The first three are illustrative scenarios; the fourth is a real, sourced operating model.

Scenario Context Trade-offs Success measure
Municipal right-sizing (illustrative) 600 vehicles, each department keeping “its” own; a VAM-style study[16] Departments lose dedicated vehicles; booking friction Fewer vehicles without missed jobs
Last-mile van electrification (illustrative) 80 diesel vans on 90–140 km urban routes, one depot Capital; utility lead time; charging constrains dispatch Lower EAC; no routes missed for energy
Regional trucking safety and hours (illustrative) 60 US interstate tractors with hours breaches at roadside; planner reviews ELD data, re-cuts routes, adds outward cameras with reviewed events Some loads need relay drivers; cameras need driver trust Hours breaches per 1,000 driver-hours and collisions per million km down
Autonomous ride-hail fleet (sourced) Waymo’s automated driver asks remote “fleet response” agents questions, stays in control and can stop; roadside assistance retrieves vehicles[58] Remote assistance must scale with fleet and edge cases Not published; an operator would track assistance requests and retrievals per 1,000 trips

Municipal right-sizing, step by step. (1) Put every vehicle in the register with its department and mission. (2) Pull twelve months of trips so that seasonal work shows. (3) Run Lab 2’s peak-percentile method per vehicle class, not per department. (4) Ask drivers and supervisors about each low-use vehicle before deciding. (5) Move survivors into a bookable pool, price short-term rental for peaks, and dispose of the rest. Owner: the fleet manager, with each department head signing off its list. Pitfall: snow ploughs and emergency reserves look idle by design; tag them as mission-reserved before the study.

Last-mile electrification, step by step. (1) Screen each route’s winter distance against usable range with a reserve. (2) Price energy at the depot tariff and model EAC (Lab 1). (3) Ask the utility for the connection capacity the overnight load needs; the answer sets the timetable. (4) Configure managed charging so that the site stays under its limit. (5) Pilot with the routes that have the most margin, through one winter. Owner: the fleet manager, with dispatch and facilities. Pitfall: a summer-only pilot proves nothing about January.

Other pitfalls: cameras before policy and coaching; routing that optimises kilometres while the business measures jobs done.

Every fleet metric needs a denominator that reflects exposure. Formulas are this page’s definitions unless sourced; write yours down, because the same name means different things in different fleets.

KPI Definition / formula Pitfall Cadence
Cost per km (or hour) Operating cost (depreciation or lease, energy, maintenance, insurance, tax, downtime) ÷ km Excluding depreciation flatters old vehicles Monthly, by class
Equivalent annual cost NPV of costs ÷ annuity factor (economics) Untested resale values Annual
Utilisation (days) Days used ÷ days available Assigned vehicles look idle by design Monthly
Availability (Scheduled vehicle-days − off-road days) ÷ scheduled vehicle-days Counting a vehicle waiting for parts as available Weekly
PM compliance PMs done by due date ÷ PMs due Moving the due date to “comply” Weekly
Defect close-out time Median hours from report to certified repair (safety-critical) Averages hide the long tail Weekly
Energy intensity Litres or kWh per 100 km, by class Mixing classes; ignoring winter Monthly
Idle share Idle engine-on time ÷ engine hours Equipment idling (cranes, refrigeration) counted as waste Monthly
Collision rate Collisions ÷ million km (also: preventable only) Small numbers (worked example) Quarterly, rolling 12 months
Safety events per 1,000 km Reviewed events ÷ km × 1,000 Unreviewed AI events; calibration changes Weekly, monthly trend
Hours breaches Infringements ÷ 1,000 driver-hours Counting only roadside finds Weekly
Emissions Fuel × factor (Scope 1); purchased electricity × factor (Scope 2)[60] Mixing location- and market-based factors Quarterly

Leading and lagging. Collisions and prohibitions lag; PM compliance, defect close-out, hours breaches and reviewed safety events lead, and you can act on them this week.

Worked calculation (illustrative fleet of 135 vehicles, one year).

Input Value
Depreciation and lease 1,215,000
Fuel and energy 620,000
Maintenance and repairs 310,000
Insurance 205,000
Tax, registration, other 50,000
Distance 3,750,000 km
Collisions 9 (fleet), of which 2 at depot B (800,000 km)
PMs due / done on time (quarter) 412 / 389
Scheduled vehicle-days / off-road days (month) 2,700 / 94
  • Cost per km = (1,215,000 + 620,000 + 310,000 + 205,000 + 50,000) ÷ 3,750,000 = 2,400,000 ÷ 3,750,000 = 0.64 per km.
  • Collision rate = 9 ÷ 3.75 = 2.4 per million km. Depot B: 2 ÷ 0.8 = 2.5 per million km, which looks the same as the fleet. But with only two events, the exact 95% Poisson interval for the count is 0.24 to 7.2, so depot B’s rate could be anywhere from about 0.3 to 9.0 per million km. A league table of depots on one year’s collisions ranks noise.
  • PM compliance = 389 ÷ 412 = 94.4%; list the 23 late ones and check for safety inspections.
  • Availability = (2,700 − 94) ÷ 2,700 = 96.5%: the 3.5% off road sizes the spare allowance.

Safety and compliance obligations are covered under the practices above. Retention is part of compliance: US carriers keep inspection reports three months, maintenance records one year (plus six months after disposal) and duty-status records six months;[29][33][18] the DVSA guide asks for 15 months.[30] Deleting too early fails as surely as keeping everything forever.

Privacy. Telematics and cameras make the vehicle a monitored workplace. The UK Information Commissioner’s Office is specific (as of October 2026; it says this guidance is under review after the Data (Use and Access) Act):[51]

  • “Telematics data which records the activities of drivers is personal information and is subject to data protection law.”
  • On vehicles also used privately, “you will rarely be able to justify monitoring during private use”; a company car can have tracking the driver can disable outside work.
  • “You must inform workers and passengers of any vehicle monitoring.”
  • Where tachographs are legally required, an employer can rely on the lawful basis of legal obligation.
  • Driver monitoring, “such as monitoring driver behaviour and driving style, or using cameras or audio”, is harder to justify, and the ICO says you must carry out a DPIA for it, as for any tool that “uses analytics to make inferences, predictions, or decisions about drivers”. Tracking work vehicles is not on that list, but it still needs a lawful basis, transparency and proportionality; this page recommends a DPIA for it as well.
  • Inward-facing cameras capture driver and passengers; audio is higher risk, so switch it off by default and trigger it only in exceptional circumstances.

In the EU, GDPR Article 35 requires a DPIA where processing “is likely to result in a high risk”, and each supervisory authority publishes a list of operations that need one:[61] check your national list rather than the ICO’s. Elsewhere the law differs, but a defensible camera default recurs: outward-facing, event-triggered clips, audio off, driver-facing only for a documented risk, short retention unless linked to an incident, access limited to safety staff.

Security. Telematics accounts can locate every vehicle and sometimes immobilise it: named least-privilege accounts, MFA for administrators, read-only analytics users with expiring tokens, prompt removal of leavers. Treat the CSMS the same way (see trust boundaries); device security belongs to IoTOps.

Cost drivers. Capital (depreciation or lease), energy, maintenance, insurance and downtime are the largest lines; NAFA’s certification material calls fuel “the second largest fleet vehicle expense”.[3] The levers, roughly in order of size: fewer vehicles, the right class and replacement age, energy (consumption, idling, tariff), then maintenance efficiency. Whether a lease sits on the balance sheet is an accounting question: involve finance before choosing lease over buy.

Claims and insurance. NAFA’s risk-management discipline covers insurance, subrogation, training, safety and crash management, and notes that not every loss can be insured.[3] In practice: report every collision the same day, recover costs from at-fault third parties (subrogation), record repair cost and downtime per claim, and feed causes into coaching and vehicle specification. How much loss to retain (a higher excess) is a finance decision that the fleet’s collision rates should inform.

Chargeback and funding. A fleet can be funded from a central budget, or charge user departments a monthly rate that also builds a replacement fund. For such a fund, Government Fleet’s guidance advises building salvage values into the rate, returning sale proceeds to the fund, using the vehicle’s actual cost, and keeping the rate for the vehicle’s life instead of resetting it each budget cycle.[62] A full-cost rate gives departments a reason to return under-used vehicles; a centrally funded fleet gives them none (this page’s view).

Capacity is vehicle-hours in the right place: drivers, vehicles, workshop bays and, for EVs, charging power after 18:00.

Sustainability. Fuel burned in owned or controlled vehicles is a direct (Scope 1) emission; purchased electricity is indirect (Scope 2).[60] For electricity the organisation buys, for example at its depots, electrification moves emissions from Scope 1 to Scope 2, resized by the grid mix; classify reimbursed home and public charging by your inventory’s boundary rules. US carriers and shippers can benchmark freight emissions through EPA’s SmartWay.[52] The carbon method itself is in GreenOps.

  • Record audits. Each quarter, trace one inspection and one defect for ten sampled vehicles from schedule to certification.
  • External signals. Roadside results and regulator scores (such as FMCSA’s safety categories)[24] are the regulator’s view of your fleet; treat every prohibition as an incident.
  • Data-quality checks. Silent devices, odometer jumps, driverless trips, unmatched fuel: control failures, not just bad data.
  • Driver feedback. Drivers know which vehicles are unreliable and which routes cannot be driven legally.
  • Model back-testing. Yearly, compare cost-model forecasts (maintenance by age, resale) with actuals.
Symptom Likely cause Diagnosis Remediation Prevention
Overdue PMs rising Workshop capacity, vehicles never released, schedule not linked to time Overdue list by depot and reason Book releases with dispatch; temporary outsourcing PM slots in the dispatch plan; weekly review
Vehicle shows low utilisation but is always busy Device not reporting, wired to wrong ignition, or mapped to the wrong unit Compare device ID with register; check last report time Fix mapping or wiring Commissioning checklist; daily silent-device report
Fuel use per 100 km drifts up on one vehicle Card misuse, mechanical fault, route change, tyre pressure Match transactions to positions; compare with route and class Investigate card; inspect vehicle Exception rules on every transaction
Safety events jump fleet-wide overnight Device firmware or threshold change Event rate by firmware version and date Roll back or recalibrate; void affected scores Change control for telematics settings
Hours breaches cluster on one route The route cannot be driven within limits Planned versus actual durations for the route Re-cut the route; relay driver Plan with realistic durations and breaks
EV range complaints every winter Planning on brochure range Energy per km by month Re-plan winter routes; preheat while plugged in Plan against winter range with margin[37]
Roadside prohibition for a defect the driver reported Defect not closed before dispatch Defect record and dispatch log Ground vehicle; review sign-off Separate maintenance sign-off from dispatch targets
Figure 8. Runbook: overnight charging shortfall
yesnoCSMS or networksite load limitcharger or vehicle fault05:30 shortfall found: 11 vanslowTriage: energy needed vs onboard, per routeEnough energy with routeswaps?Swap routes: long routes tofull vansRapid charge, spare vehicles,defer jobsDiagnose: CSMS, chargers,site limitCause found?Restore link; check chargeprofilesRebalance profiles; checktariff windowsWork order; tag unitsPost-incident review andprevention
Diagram source (Mermaid)
flowchart TB
  A["05:30 shortfall found: 11 vans low"] --> B["Triage: energy needed vs on board, per route"]
  B --> C{"Enough energy with route swaps?"}
  C -->|"yes"| D["Swap routes: long routes to full vans"]
  C -->|"no"| E["Rapid charge, spare vehicles, defer jobs"]
  D --> F["Diagnose: CSMS, chargers, site limit"]
  E --> F
  F --> G{"Cause found?"}
  G -->|"CSMS or network"| H["Restore link; check charge profiles"]
  G -->|"site load limit"| I["Rebalance profiles; check tariff windows"]
  G -->|"charger or vehicle fault"| J["Work order; tag units"]
  H --> K["Post-incident review and prevention"]
  I --> K
  J --> K
  classDef risk fill:#fbeceb,stroke:#b4332b,color:#122029
  classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
  classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
  class A risk
  class C,G decision
  class B,D,E,F,H,I,J,K core

Text equivalent: At 05:30, 11 vans are found low. Triage compares each route’s energy need with the energy on board. If route swaps cover the gap, long routes go to full vans; if not, use rapid charging, spares and deferred jobs. Then diagnose the CSMS, chargers and site limit: restore the link and check charge profiles, rebalance profiles and tariff windows, or raise work orders and tag faulty units. All paths end in a post-incident review.

1. Protect today’s work (05:30–06:15).

  1. Export each van’s state of charge and each route’s distance; convert to energy with the class’s seasonal kWh per 100 km plus a reserve (this page suggests 20%).
  2. Give the longest routes to the fullest vans; short routes often fit vans at 50–60%.
  3. For the remaining gap: top up on the fastest chargers, plan a mid-route rapid charge, use spares or rentals, or defer low-priority jobs. Record the cost.

2. Diagnose (from 06:15).

  1. Every charger or a subset? All points to the CSMS, network link or site supply; a subset to a circuit, charger or vehicles.
  2. Did sessions start? None: check the CSMS link and expired credentials. Started but delivered little: check charge profiles.
  3. Was the site limit binding? Smart charging caps total power under the connection limit through charge profiles;[26] a new building load, profile change or tariff-window change cuts every van’s share.
  4. Vehicle side? A scheduled-charging setting or charge-port fault shows on one van only.

3. Fix and prevent.

  • Alert at 01:00 on projected shortfall (energy so far plus power × hours left, versus tomorrow’s need).
  • Keep a fallback: rapid chargers on the routes and two spare vans charged first.
  • Put charge-profile and tariff changes under change control, with a test night.
  • Review: a new cause (fix it) or an accepted risk (record the decision and its cost)?
Anti-pattern or myth Why it fails What to do instead
“Buy telematics first, decide what to do with it later” Data with no decision attached becomes cost and privacy risk Name the decisions (sizing, coaching, maintenance) and buy the data they need
Ranking drivers or depots on raw event or collision counts Ignores exposure; small numbers are noise Rates per km with minimum exposure; review events; coach first
“Electrify X% by year Y” without duty-cycle data Vehicles that cannot do the job get bought anyway Screen duty cycles; pilot; scale on evidence
The dispatcher signs off defects Dispatch targets beat safety judgement under pressure Maintenance signs off; dispatch is informed
Cutting maintenance to hit a budget Cost moves to breakdowns, downtime and risk Hold the PM floor; cut through right-sizing instead
Cameras before the policy Drivers resist, data is collected without a lawful basis Policy, DPIA where required, consultation, then cameras
Myth: “An electric van needs no maintenance” Inspections, tyres, brakes, suspension, lights and safety checks remain; only some service items go away[36] Keep time-based safety inspections; adjust service items
Myth: “The grey fleet is the employee’s problem” Employer duties cover workers’ own vehicles used for work[11] Checks, declarations and a policy

A deliberate fleet function is worth it when vehicle cost is material or vehicle failure stops the service; people drive for work regularly; regulations apply (commercial vehicles, passenger transport, dangerous goods); or vehicle decisions are made without data.

When not to build it, or not yet:

  • A handful of cars. A policy, a lease with maintenance and licence checks usually suffice. Before buying telematics, compare its yearly cost (subscription × units, plus the time to use it) with the fuel, time or claims it must save; at small scale it often fails that test (this Atlas’s rule of thumb, not a measured threshold).
  • Transport is better bought than run. If carriers can do the work at a known price, outsource (with SupplyChainOps) and keep oversight of safety requirements, service levels and data.
  • Mostly grey fleet. Then the job is a grey-fleet policy and checks, perhaps with a pool, not a fleet department.
  • No decision depends on it. Collecting telematics with no plan to act on it adds privacy risk without benefit.

Hidden responsibilities: records retention, data protection assessments, telematics change control, driver consultation, and a replacement budget that survives a bad year.

Going electric is in the EV decision tree; here, how to source vehicles and maintenance.

Acquisition model by vehicle group.

Situation Usually fits Why Watch for
Stable mission, long keep period, in-house workshop Buy Lowest EAC when kept to economic life; full control Capital budget; resale risk
Standard vehicles, no workshop, predictable mileage Lease with maintenance Predictable cost; supplier carries resale risk Excess-mileage and damage charges; lock-in to the lease term
Seasonal or project peaks Short-term rental Pay only for the peak Availability in peak season; price
Occasional business trips Pool vehicles or reimbursed own cars Avoids idle assets Grey-fleet checks; booking discipline

In-house versus outsourced maintenance. Illustrative weights; set yours before scoring each option 1 (poor) to 5 (good).

Criterion Weight In-house Outsourced Notes
Vehicle downtime (turnaround) 30% 4 3 In-house controls priorities; outsourced depends on the contract
Cost per job at your volume 25% 3 4 Workshops need volume to pay for bays and technicians
Compliance records quality 20% 4 3 Contracts must specify records, or you inherit gaps
Access to specialist skills (EV, emissions systems) 15% 2 4 Specialist training and tools are expensive for small fleets
Flexibility to scale 10% 2 4 Fixed workshop capacity versus contract
Weighted score 100% 3.25 3.50 Close scores mean the assumptions decide; test them

Arithmetic: in-house 0.30 × 4 + 0.25 × 3 + 0.20 × 4 + 0.15 × 2 + 0.10 × 2 = 3.25; outsourced 0.30 × 3 + 0.25 × 4 + 0.20 × 3 + 0.15 × 4 + 0.10 × 4 = 3.50. Moving 10 points of weight from flexibility to downtime flips it (3.45 against 3.40): when a decision is this sensitive, run a trial (outsource one depot for six months) and compare measured downtime and cost.

This maturity model is this Atlas’s proposal, not an industry standard; move up one level at a time.

Figure 9. Fleet operations maturity: five levels
1 Reactive: spreadsheets, fixon failure2 Recorded: register, PMschedule, defects3 Measured: KPIs per km,coaching4 Optimised: EAC,right-sizing, routing5 Adaptive: condition-based,energy-managed
Diagram source (Mermaid)
flowchart TB
  L1["1 Reactive: spreadsheets, fix on failure"] --> L2["2 Recorded: register, PM schedule, defects"]
  L2 --> L3["3 Measured: KPIs per km, coaching"]
  L3 --> L4["4 Optimised: EAC, right-sizing, routing"]
  L4 --> L5["5 Adaptive: condition-based, energy-managed"]
  classDef neutral fill:#f1f4f6,stroke:#5b7a87,color:#122029
  classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
  class L1,L2 neutral
  class L3,L4,L5 core

Text equivalent: Five levels in sequence: 1 reactive (spreadsheets, fix on failure); 2 recorded (register, PM schedule, defect records); 3 measured (KPIs per km, coaching); 4 optimised (replacement by EAC, right-sizing, routing); 5 adaptive (condition-based maintenance, managed energy).

Level Observable behaviour Exit criteria (evidence to move up) Typical constraint
1 Reactive Vehicles bought on price, fixed when broken, no single list Complete register; every vehicle has an owner and mission No time; data scattered
2 Recorded Register, PM schedule, defect reports, licence checks PM compliance measured for 3 months; defects closed before reuse Workshop capacity; paper records
3 Measured Monthly KPI pack per km; reviewed safety events; fuel exceptions worked KPIs stable for two quarters; coaching records; data-quality checks pass Telematics coverage; privacy groundwork
4 Optimised Replacement by EAC; right-sizing study; routing tools; EV pilots on evidence Fleet size and replacement plan approved from studies; pilot results published internally Capital approvals; organisational resistance to pooling
5 Adaptive Condition-based maintenance for major components; managed charging; continuous right-sizing Model forecasts back-tested; energy cost per km tracked by tariff window Data history; integration effort

Most fleets gain more from levels 1 to 3 than from anything at level 5.

For a fleet manager starting at level 1 or 2.

Window Actions Milestone Metric started
Days 1–30 Build the vehicle and driver registers; collect every lease, insurance and inspection document; list overdue inspections and open defects; fix anything safety-critical now; write the defect sign-off rule Every vehicle known, nothing unsafe in service Open safety-critical defects; overdue inspections
Days 31–60 Put the PM schedule in a system; start the weekly maintenance and safety review; set fuel-card controls and exception rules; decide the telematics purpose, write the monitoring policy and DPIA where required; consult drivers PM compliance reported weekly; monitoring policy published PM compliance; fuel exceptions; availability
Days 61–90 First monthly KPI pack (cost per km, utilisation, collisions per million km); first right-sizing pass on the lowest-utilisation vehicles; cost model (Lab 1) for the next replacement round; EV duty-cycle screen Fleet plan draft with a replacement list and size target Cost per km; utilisation; collision rate

Dependencies: finance (cost data), HR (driver records, consultation), procurement (contracts), IT or IoT (telematics). Quick wins: closing old defects, cancelling unused fuel cards, returning clearly redundant vehicles.

Commissioning a new vehicle

  • Registered, insured, taxed; documents in the register
  • Telematics installed, mapped to the unit, ignition and odometer verified on a test drive
  • Upfit (racking, lighting, equipment) inspected and recorded
  • PM schedule created from the class template
  • Driver induction on the vehicle done and recorded

Operating readiness for electric vehicles

  • Routes screened against winter range with a reserve
  • Charging capacity confirmed for the overnight window, with managed charging configured
  • Chargers OCPP-compliant; CSMS alerts on failed sessions and projected shortfall
  • Fallback plan (rapid chargers on route, spare vehicles) documented
  • Workshop staff trained for high-voltage safety; tools available

Monthly governance review

  • KPI pack reviewed, with actions and owners
  • Overdue PMs and defects open more than 48 hours explained
  • Fuel and energy exceptions closed or escalated
  • Safety events reviewed; coaching done; repeat events escalated
  • Data-quality report clean (silent devices, unassigned trips)

Privacy and data audit (annual)

  • Each data feed has a purpose, lawful basis, retention and access list
  • Monitoring policy shared with drivers and current
  • DPIA reviewed where required
  • Audio recording off by default; driver-facing cameras justified where used
  • Data removed from disposed vehicles; leavers’ accounts removed

After a collision

  • People cared for; emergency services called where needed
  • Telematics and camera data preserved before routine deletion
  • Report, photos, statements, duty-status record collected
  • Preventability decided against the written definition
  • Actions (coaching, route, vehicle) recorded and tracked to close

One-page fleet policy (outline).

FLEET POLICY                                   Owner: Fleet manager   Review: annual
1. Scope: vehicles owned, leased, rented, and own vehicles used for work
2. Eligibility: who may have an assigned vehicle; pool use for others
3. Drivers: licence checks (on hire, every 6 months), training, fitness to drive
4. Vehicle use: business use, private use rules, passengers, phone use, alcohol
5. Checks: daily walkaround; defect reporting; who signs off repairs
6. Working time: limits that apply; planner and driver responsibilities
7. Fuel and charging: cards, limits, home charging reimbursement, idling
8. Monitoring: data collected, purpose, retention, who sees it, drivers' rights
9. Collisions: what to do, reporting deadline, investigation
10. Replacement: review cycle, criteria (EAC, condition, mission)

Defect report and close-out (fields).

DEFECT REPORT
Vehicle (unit, registration):        Odometer:        Date/time:
Reported by:                         Found during: walkaround / trip / inspection
Item:  brakes | steering | lights | tyres | wheels | mirrors | wipers | coupling
       | horn | emergency equipment | other: __________
Description:
Safety-critical?  yes / no           Vehicle off road?  yes / no
REPAIR (workshop)
Work order:        Action taken:                     Parts:
Repaired by:       Certified safe by:                Date/time:
Driver review of repair (next driver):  signature / app confirmation

Replacement review record (one per vehicle group).

REPLACEMENT REVIEW                           Group: ______   Date: ______
Units in group: __   Average age: __   Average km: ______
Current EAC curve (attach model): economic life = __ years
Condition: open defects __, repeat defects __, downtime days (12 mo) __
Mission change expected? ______   Utilisation (days %) __
Options considered: like-for-like / different class / EV / lease / remove
Decision: ______   Rationale: ______   Budget year: ____
Approved by: ______ (fleet)   ______ (finance)

Telematics data decision record.

DATA DECISION RECORD                        ID: TEL-___   Date: ______
Feed: location / driving events / video / audio / fuel / engine data
Decision it supports: ______________________________
Lawful basis or legal requirement: ______   DPIA needed? yes / no
Who can see it: ______   Retention: ______   Private-use handling: ______
Drivers informed how: ______   Review date: ______
Option Strength Weakness Choose when
Own fleet operated in-house Control of service, safety and cost Capital, management effort, compliance burden Transport is core to the service and volumes are steady
Outsourced transport (carriers, couriers) No vehicles or drivers to manage Less control of service; price at peak Transport is not a differentiator (SupplyChainOps)
Grey fleet with mileage allowance No assets Weak control over vehicle safety and emissions; employer duty remains[11] Occasional business travel
Telematics-led programme Data for coaching, maintenance and sizing Privacy, cost, false positives Defined decisions depend on the data

Is FleetOps a recognised discipline? The practice is, as fleet management or fleet operations, with an association and certification (NAFA, CAFM)[3] and regulations that define much of the work. The one-word “FleetOps” is mainly a product name (see Term status).

How is this different from logistics or supply chain management? Supply chain decides what moves where, by which mode and carrier; fleet operations runs the organisation’s own vehicles and drivers. A field-service or utility fleet can be large and move few goods.

Do we need telematics? Only if a decision depends on it: sizing the fleet, scheduling maintenance by engine hours, coaching drivers, reconciling fuel, or proving working time. Write those decisions down first, then apply the rules in Safety, privacy and compliance.

When should we replace a vehicle? When one more year costs more than the best replacement’s EAC (the replacement rule). Bring it forward for a mission change or repeated serious defects; push it back only with evidence of lower running costs.

Are electric vans cheaper? It depends on duty cycle, charging price and keep period: in Lab 1 the same van wins with depot charging and loses on public charging. Run the model with your own numbers and test winter range.[37]

Do hours-of-service rules apply to our vans? It depends on jurisdiction, weight, use and exceptions such as the US short-haul radius;[49] in the EU, tachographs now reach some 2.5–3.5 t vans on international hire-or-reward work.[17] Check with your regulator; this is not legal advice.

  • Established now: telematics with engine data; electronic duty-status records; outward and AI-assisted dash cameras; managed depot charging over OCPP;[26] route optimisation solvers.[56]
  • Spreading, with conditions: condition-based maintenance from fault codes; dispatch that plans around state of charge; Plug & Charge and bidirectional charging under ISO 15118,[63] where vehicle and charger support it.
  • Regulatory change to watch: data access rights for connected vehicles in the EU (the Data Act has applied since 12 September 2025);[21] tachograph scope extending to light vehicles in international transport;[17] shifting zero-emission fleet mandates, such as the partial repeal of California’s Advanced Clean Fleets rule.[41]
  • Automation: remote assistance for automated vehicles[58] moves fleet work towards exceptions, recovery and depots.
  • Speculative or vendor-driven: predictive maintenance for small fleets; vehicle-to-grid revenue in an EV business case. Treat these as hypotheses to test.
Stage What to do Output
Prerequisites Spreadsheets; discounting (NPV); your jurisdiction’s working-time and roadworthiness rules Notes on the rules that apply
1-day primer The first two parts and the economics part; Lab 1 A first EAC curve
1-week practice Labs 2 to 4; a vehicle register; a defect sign-off rule Register, KPI definitions, one SOP
30-day progression KPI pack; right-sizing pass; monitoring policy with a DPIA outline; EV screen of one group A fleet plan draft
Specialisation Maintenance, safety and compliance, energy, or routing; NAFA’s CAFM disciplines map the field[3] A deeper project
Portfolio ideas Replacement model with sensitivity analysis; EV duty-cycle screen; privacy-by-design telematics policy Work samples
Area Remember
Core decisions How many; which and for how long; how each vehicle-hour is used; how safe and legal it is
Economics Compare options by EAC; replace when one more year of the old vehicle costs more than the replacement’s EAC
Sizing Size to a high percentile of daily peak use plus a measured spare allowance; price rentals for the rest
Maintenance Time-based safety inspections as the floor; condition-based where data is trusted; defects closed before reuse
Working time Plan routes that can be driven legally; the ELD or tachograph is the legal record, not your planning tool
Safety Safe driver, vehicle, journey; rates per km with minimum exposure; coach first
EVs Duty cycle, winter range, charging location and power, keep period. Pilot, then scale
Privacy Purpose, proportionality, transparency, retention; private use rarely monitored; audio off by default (UK ICO)
Metrics Cost per km, availability, PM compliance, defect close-out time, energy per 100 km, collisions per million km, hours breaches
Next actions Register, overdue list, sign-off rule; then PM system and policy; then KPI pack and fleet plan

A judgement call: electrify now or keep the diesels one more year?

Link to section “A judgement call: electrify now or keep the diesels one more year?”

Option A: replace all 40 now with electric vans; five charge on the depot’s spare capacity and 35 at public rapid chargers until the depot upgrade is done. Option B: keep the diesels one more year, order the depot upgrade now, run a five-van electric pilot on the depot’s existing spare capacity, and replace the rest at the end of year 7.

Assumptions (from the replacement rule and Lab 1): a diesel’s seventh year costs about 12,848 and its eighth about 13,858; a depot-charged electric van’s EAC is about 12,737; public charging at 0.45 instead of 0.22 per kWh adds about 1,380 a year per van (6,000 kWh × 0.23).

Reasoning.

  1. Option A meets the target now, but the electric van is cheaper only with depot charging. Over the 12 to 15 months of the upgrade, 35 vans would pay about 1,380 more each per year for energy (about 48,000 to 60,000 in total), plus driver time at public chargers that the model does not count.
  2. Option B’s extra diesel year (12,848) costs almost the same as a depot-charged electric van (12,737). Waiting one year is cheap; waiting two (13,858) is not.
  3. The pilot measures what the model lacks: winter energy use, charging behaviour, driver feedback.
  4. Uncertainty: faster diesel resale decline or a slipping utility date hurt B; rising public-charging prices hurt A.

Decision. Option B, with a trigger: if the upgrade slips past month 15, replace the oldest diesels with electric vans on managed charging that fits existing capacity rather than running all diesels into year 8. The attractive choice is wrong because charging infrastructure, not the vehicle, sets the cost.

After this page you should be able to: explain fleet operations and its handoffs; calculate EAC and an economic life; estimate fleet size from trip data; design a layered maintenance strategy and defect close-out; plan within working-time rules; design a safety and monitoring programme defensible on privacy; and decide whether a vehicle group is ready to electrify.

1. Two vans: van P has EAC 12,900 over 7 years; van Q has EAC 12,700 over 9 years. Your policy replaces every van at 5 years. Which is cheaper?

Neither figure answers it: the policy keeps both for five years. In Lab 1’s case the five-year EACs are 13,029 (diesel) and 13,957 (electric), so the diesel wins under this policy although the electric van wins at its own economic life. The policy decided the outcome; consider class-specific replacement ages.

2. A depot had 1 collision last year in 400,000 km; another had 4 in 1.6 million km. Which depot is safer?

Both rates are 2.5 per million km, and with so few events the intervals are wide (for one event the 95% Poisson interval for the count is roughly 0.03 to 5.6). Neither is shown safer: use leading measures and pool several years.

3. A driver reports a soft brake pedal at 16:00. The dispatcher needs the truck at 06:00. Who decides whether it goes out, and on what basis?

The maintenance function decides, after inspection, and certifies the repair or that no repair was needed; dispatch is informed. In the US the carrier must repair defects likely to affect safety and certify before further operation;[29] in Great Britain the driver remains legally responsible for the vehicle’s condition while in use.[30] If it is not certified by 06:00, dispatch uses a spare.

4. Your planning tool says a route is legal under US hours of service. At roadside the driver is cited for exceeding the 14-hour window. What went wrong?

Probably on-duty time before the first trip was not counted, or durations were too short: the window runs from coming on duty, not from starting to drive.[48] Compare ELD records with the plan and re-cut the route.

5. HR wants driver-facing cameras with continuous audio in all company cars, which staff also use privately. What do you advise in the UK?

Advise against the design as proposed. The ICO says monitoring during private use will rarely be justified, that audio should be off by default and used only in exceptional circumstances, that workers and passengers must be informed, and that a DPIA is required for driver monitoring with cameras or audio.[51] Start from the safety problem to solve; outward-facing, event-triggered cameras with private-use disablement may meet it.

6. A group of vans drives 180 km a day in winter. Usable range is 260 km in summer. Should they go electric now?

Not on these numbers. Range can fall by around 40% in freezing conditions with heating,[37] bringing 260 km to about 155 km, below the route. Re-cut routes, add mid-route charging, choose a larger battery, or wait; test with a winter pilot.

Fleet operations is not glamorous and not new, and that is its strength: the problems are understood, the rules written down, and the economics fit in a spreadsheet. Its failures are failures of discipline: vehicles nobody owns, inspections that slip, defects that get driven, rules planners cannot see, and buying on price.

The newer pressures (telematics, cameras, electrification, automation) do not change this. They make the data richer, the privacy questions sharper and the cost model more sensitive to where and when energy is bought. A fleet that already knows its utilisation, its economic lives and its defect close-out times can absorb those changes with evidence. A fleet that does not will find that the new technology mostly measures its old problems more precisely.

Changelog

  • 2026-10-23: First version. Research, ledger (research/fleetops-ledger.md), four labs executed, nine diagrams. Not yet independently reviewed.
  • 2026-10-23 (review round 1): ICO DPIA scope corrected and EU rule added; Class8 quotation made verbatim; Traccar script now converts to local time and numbers working days, Lab 2 takes the day count and rejects bad rows; CARB status from CARB’s own release; ISA vehicle categories; OCPP security, licence checks, tyres, claims and chargeback added; glossary extended; sequence and chart diagrams revised; repetition cut (reviews/fleetops-r1-response.md).
  • 2026-10-23, post-score polish: AFLEET footnote dated December 2023 (DOE/EE-2798); TU Wien conclusion quoted verbatim from the abstract; reference architecture gains an energy and cost record (fuel cards, tanks and chargers feed it; the gateway feeds maintenance); EAC chart narrowed to fit a phone; repeated public-charging result in the EV section replaced by a link to Lab 1 (reviews/fleetops-polish.md).

  1. Fleet management — Wikipedia, live page. Checked 2026-10-23. ↩︎

  2. NAFA Fleet Management Association — NAFA, live page. Checked 2026-10-23. ↩︎

  3. CAFM Certification Disciplines — NAFA, live page. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  4. Division Manager, Fleet Operations (class specification) — Pinellas County, Florida, last updated 09/2023. Checked 2026-10-23. ↩︎

  5. fleetbase/fleetops — Fleetbase, GitHub repository, live. Checked 2026-10-23. ↩︎ ↩︎

  6. FleetOps (iOS app) — Hypernym LTD, Apple App Store listing, live. Checked 2026-10-23. ↩︎

  7. FleetOps is now Class8 — Class8, live page. Checked 2026-10-23. ↩︎

  8. Motor Vehicle Safety at Work — CDC NIOSH, 2024-05-16. Checked 2026-10-23. ↩︎

  9. Road traffic injuries (fact sheet) — World Health Organization, 2026-07-20. Checked 2026-10-23. ↩︎ ↩︎

  10. Fleet Rightsizing — US DOE Alternative Fuels Data Center, undated. Checked 2026-10-23. ↩︎ ↩︎

  11. Employers – driving and riding safely for work — UK Health and Safety Executive, updated 2025-02-21. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎

  12. Vehicle routing problem — Wikipedia, live page. Checked 2026-10-23. ↩︎ ↩︎

  13. On-board diagnostics — Wikipedia, live page. Checked 2026-10-23. ↩︎ ↩︎

  14. Driving time and rest periods — European Commission, DG Mobility and Transport, undated. Checked 2026-10-23. ↩︎ ↩︎ ↩︎

  15. GSA offers tool to optimize federal fleet — Government Fleet, 2011-09-12. Checked 2026-10-23. ↩︎

  16. Federal Fleet Requirements Resource Center: General Services Administration Vehicle Allocation Methodology — US Department of Energy, Federal Energy Management Program, summary dated 2020-06-02. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎

  17. Tachograph — European Commission, DG Mobility and Transport, undated. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  18. 49 CFR § 395.8 — Driver’s record of duty status — US Code of Federal Regulations via Cornell LII. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎

  19. Intelligent speed assistance (ISA) set to become mandatory across Europe — European Commission, European Road Safety Charter, undated. Checked 2026-10-23. ↩︎ ↩︎

  20. North American Charging System — Wikipedia, live page. Checked 2026-10-23. ↩︎ ↩︎ ↩︎

  21. Data Act — European Commission, Shaping Europe’s digital future, live. Checked 2026-10-23. ↩︎ ↩︎ ↩︎

  22. Total cost of ownership — Wikipedia, live page. Checked 2026-10-23. ↩︎ ↩︎

  23. Equivalent annual cost — Wikipedia, live page. Checked 2026-10-23. ↩︎ ↩︎

  24. Behavior Analysis and Safety Improvement Categories (BASICs) — Motive, vendor summary of FMCSA’s categories (FMCSA’s CSA site could not be fetched automatically), live. Checked 2026-10-23. ↩︎ ↩︎ ↩︎

  25. SAE J1939 — Wikipedia, live page. Checked 2026-10-23. ↩︎

  26. Open Charge Point Protocol — Open Charge Alliance, live page. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  27. OCPP Security: security profiles — WinCC OA product documentation, live (summarises the profiles of the OCPP security specification). Checked 2026-10-23. ↩︎

  28. Sicherheitsstudie Ladeinfrastrukturanbindung — J. Fabini, A. Hartl, F. Meghdouri, T. Zseby, TU Wien, for Oesterreichs Energie, 2023-06-06 (German; quotation from the English abstract). Checked 2026-10-23. ↩︎

  29. 49 CFR § 396.11 — Driver vehicle inspection report(s) — US Code of Federal Regulations via Cornell LII. Checked 2026-10-23. ↩︎ ↩︎ ↩︎

  30. Guide to maintaining roadworthiness: commercial goods and passenger carrying vehicles — Driver and Vehicle Standards Agency, GOV.UK, updated 2025-04-28. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  31. AFLEET fact sheet — US DOE Clean Cities / Argonne National Laboratory, December 2023 (DOE/EE-2798). Checked 2026-10-23. ↩︎

  32. Predictive maintenance — Wikipedia, live page. Checked 2026-10-23. ↩︎

  33. 49 CFR § 396.3 — Inspection, repair, and maintenance — US Code of Federal Regulations via Cornell LII. Checked 2026-10-23. ↩︎ ↩︎ ↩︎

  34. 49 CFR § 393.75 — Tires — US Code of Federal Regulations via Cornell LII. Checked 2026-10-23. ↩︎

  35. Ban on tyres over 10 years old for heavy vehicles and some minibuses — DVSA, Moving On (GOV.UK blog), 2020-12-09. Checked 2026-10-23. ↩︎

  36. Maintenance and Safety of Electric Vehicles — US DOE Alternative Fuels Data Center, undated. Checked 2026-10-23. ↩︎ ↩︎

  37. Fuel Economy in Cold Weather — fueleconomy.gov (US DOE and EPA), undated. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎

  38. Developing Infrastructure to Charge Electric Vehicles — US DOE Alternative Fuels Data Center, undated. Checked 2026-10-23. ↩︎

  39. Electric Vehicle Charging Infrastructure Development — US DOE Alternative Fuels Data Center, undated. Checked 2026-10-23. ↩︎

  40. California deal with 16 states would end key parts of Advanced Clean Fleets rule — FreightWaves, 2025-05-08. Checked 2026-10-23. ↩︎

  41. CARB adds flexibility to truck fleet requirements with amendments to help owners continue zero-emission progress — California Air Resources Board, release 25-34, 2025-09-25. Checked 2026-10-23. ↩︎ ↩︎

  42. Idle Reduction — US DOE Alternative Fuels Data Center, undated. Checked 2026-10-23. ↩︎

  43. Driving More Efficiently — US DOE Alternative Fuels Data Center, undated. Checked 2026-10-23. ↩︎

  44. 49 CFR § 391.25 — Annual inquiry and review of driving record — US Code of Federal Regulations via Cornell LII. Checked 2026-10-23. ↩︎

  45. Check someone’s driving licence information — DVLA, GOV.UK, live. Checked 2026-10-23. ↩︎

  46. Commission Delegated Regulation (EU) 2021/1958, recital 1, on Article 6 of Regulation (EU) 2019/2144 — unofficial copy of OJ L 409, 17.11.2021 (EUR-Lex could not be fetched automatically). Checked 2026-10-23. ↩︎

  47. ISO 39001 — Wikipedia, live page (iso.org could not be fetched automatically). Checked 2026-10-23. ↩︎ ↩︎

  48. 49 CFR § 395.3 — Maximum driving time for property-carrying vehicles — US Code of Federal Regulations via Cornell LII, last amended 2020. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  49. 49 CFR § 395.1 — Scope of rules in this part — US Code of Federal Regulations via Cornell LII. Checked 2026-10-23. ↩︎ ↩︎

  50. Enhanced Carrier Safety Measurement System (SMS), 89 FR 91874 — Federal Motor Carrier Safety Administration, Federal Register notice, 2024-11-20. Checked 2026-10-23. ↩︎

  51. Monitoring workers: specific data protection considerations for different ways or methods of monitoring — UK Information Commissioner’s Office, undated (marked under review). Checked 2026-10-23. ↩︎ ↩︎ ↩︎

  52. Learn About SmartWay — US EPA, updated 2026-07-14. Checked 2026-10-23. ↩︎ ↩︎

  53. Traccar — Traccar, live page. Checked 2026-10-23. ↩︎

  54. Driver Behavior guide — Samsara developer documentation, live. Checked 2026-10-23. ↩︎ ↩︎ ↩︎

  55. 49 CFR § 395.22 — Motor carrier responsibilities: in general — US Code of Federal Regulations via Cornell LII. Checked 2026-10-23. ↩︎

  56. Routing — Google OR-Tools documentation, updated 2025-01-22. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎

  57. Vehicle Routing Problem — Google OR-Tools documentation, updated 2026-03-18. Checked 2026-10-23. ↩︎

  58. Fleet response: Lending a helpful hand to Waymo’s autonomously driven vehicles — Waymo, 2024-05-21. Checked 2026-10-23. ↩︎ ↩︎ ↩︎

  59. Traccar OpenAPI description (openapi.yaml), version 6.16.0 — Traccar, GitHub, as of 2026-10-23. Checked 2026-10-23. ↩︎ ↩︎ ↩︎

  60. Scope 1 and Scope 2 Inventory Guidance — US EPA, updated 2026-04-02. Checked 2026-10-23. ↩︎ ↩︎

  61. Art. 35 GDPR: Data protection impact assessment — Regulation (EU) 2016/679 text via gdpr-info.eu. Checked 2026-10-23. ↩︎

  62. Vehicle replacement policy: the lifeline of government fleet management — D. Weichman, Government Fleet, 2004-03-01. Checked 2026-10-23. ↩︎

  63. ISO 15118 — Wikipedia, live page. Checked 2026-10-23. ↩︎

Related Ops

SupplyChainOps

SupplyChainOps (supply chain operations) plans and runs the flow of goods, information and cash from suppliers to customers so that promised service levels are met with the least inventory, cost and disruption the business can afford.

IoTOps

IoTOps is the work of running fleets of networked devices with little or no user interface: giving each an identity, updating firmware without bricking it, watching health within battery and bandwidth limits, and retiring it cleanly. The label is niche; the practice is IoT device management.

RoboOps

RoboOps (more often spelled RobOps) is the practice of running fleets of autonomous robots in production: resolving autonomy exceptions, monitoring, managing configuration and updates, and keeping people safe when a software fault can move a machine.

ProcurementOps

ProcurementOps (procurement operations) runs how an organisation buys, from a request to the supplier's payment, as a fast, measured operation whose controls (approvals, segregation of duties, matching) stop error and fraud.

GreenOps

GreenOps is the practice of measuring and reducing the greenhouse-gas emissions of IT and cloud operations: energy used, the carbon intensity of that energy, and the hardware it needs, reported per unit of work and weighed against cost, latency and reliability.

EdgeOps

EdgeOps is this Atlas's name for operating compute at many remote sites, such as stores, plants and cell sites: onboarding nodes without experts, changing software in staged waves, keeping sites working through network outages and recovering them remotely.

RiskOps

RiskOps, as this Atlas uses it, is the day-to-day operation of risk decisions: appetite and tolerances, a live risk register, quantification where it pays, and acceptance, treatment or transfer by the owner with the authority, with an expiry. The label has no standard meaning.

PeopleOps

PeopleOps (people operations) runs an organisation's employee lifecycle (hiring, onboarding, moves, pay, performance and exits) as a reliable, measured operation built on one trusted system of record, clear owners and service levels.

Practise and get certified

From xOps School

Practise FleetOps and get certified

The FleetOps track on xOps School (part of the Coffee Pass) has study notes, a 25-question practice quiz with explanations, and a verifiable certificate when you score 70% or more. Sign in with Google to start.

For teams

Instructor-led training

Live batches for your team, with completion certificates and reports for L&D/HR.

Source: master.md (the editorial source of this page) · built 2026-10-23 · diagrams rendered with @mermaid-js/mermaid-cli 11.17.0 (mermaid 11.17.2)