Predicted, planned and promised must never share a field
In short
A predicted ETA is the system's live estimate of arrival, recomputed from position, road speeds and the work still ahead. It is not the planned time, which came from the route the optimiser built, and not the promised window, which came from what was sold. Three sources, three owners, three columns — because a system with one arrival field cannot say whether it was late.
Key takeaways
- Planned comes from the route plan, predicted from live state, promised from the commercial agreement. 3 owners, 3 update rules.
- Predicted minus promised is customer-visible lateness. Predicted minus planned is execution variance. Planned minus promised is slack, and it can be negative at 06:00.
- Store 4 things with every arrival time: the value, its source, when it was computed, and how long it may be shown.
- A prediction may change itself. A promise may only be changed by someone who can be named, with a reason attached.
- Arrival is an event with a source, not a 4th number. Derive lateness from the event, never from a field a pipeline can overwrite.
A predicted ETA is the system's current best estimate of when a vehicle will reach a stop, computed from where it is now, how the roads ahead are behaving, and how much work remains before it gets there. It changes without anyone touching it. That single property makes it a different kind of value from the other 2 arrival times most operations carry, and it is why all 3 need their own column.
The planned arrival is an output of the route plan: the optimiser fixed a sequence, added travel and service time, and produced a time the vehicle was expected at each stop. It is frozen when the plan is published. The promised window is a commercial artefact — 2 clock times, say 08:00 to 12:00, that somebody sold or agreed. It moves when a person moves it, not when traffic does. Keeping the 3 apart is the foundation of ETA prediction and shipment visibility.
Where each of the 3 numbers comes from
| Value | Produced by | Changes when | It is evidence of |
|---|---|---|---|
| Planned arrival | The route plan — sequence, travel-time matrix, service times | The plan is republished, and only then | What the operation intended to do |
| Predicted arrival | Live position, current road speeds, remaining stops and their service times | New telemetry lands, typically every 15 to 60 seconds | What the operation is currently going to do |
| Promised window | A quote, a contract, a slot the customer chose, a service level | A named person or a written policy changes it | What the customer is entitled to expect |
3 values give 3 subtractions, and each answers a question the others cannot. Predicted minus promised is the lateness a customer feels, and it is the only one worth an alert. Predicted minus planned is execution variance: it says whether the day is running as the plan assumed, which is a signal about service times rather than about a driver. Planned minus promised is slack, and almost nobody computes it. If it is minus 25 minutes at 06:00, that promise was never going to be kept and no amount of live tracking will rescue it.
A prediction is allowed to change itself. A promise may only be changed by someone who can be named.
Who is allowed to see which number
- The customer. The promise always, with the prediction shown inside it rather than instead of it. A page showing a bare live estimate has replaced a commitment with a guess, and the customer will hold you to the guess.
- The driver. The plan as a sequence, plus their own predicted arrival at the next 1 or 2 stops. A promised window for a stop 3 hours out is an invitation to resequence, and that trade-off belongs to selling a slot versus showing a live ETA.
- Goods-in at the receiving site. The prediction only. A team staffing a dock needs to know when a vehicle turns up; the commercial window is another company's contract and the planned time went stale at 07:00.
- The exception desk. All 3 side by side, each stamped with when it was last computed. This is the 1 screen where the 3-column model visibly earns its keep.
What it costs to store them in one column
Collapse the 3 and the write path becomes ambiguous. A traffic feed overwrites a commitment; a replan overwrites a slot the customer chose. Nobody notices, because the field always holds a plausible time. 6 weeks later somebody asks what share of deliveries hit their window, and there is no honest answer: the column holds whatever was written last, which for an on-time delivery is close to the actual arrival and for a late one is a prediction made 20 minutes before the door opened. The measured hit rate comes out flattering and wrong.
The clean version keeps the 3 as separate fields and treats arrival itself as an event rather than a 4th number — the discipline in the milestone vocabulary a shipment moves through. Fields hold expectations, events hold facts, and only the event is immutable.
The record shape that can answer "was it late"
- Give the shipment 4 named fields, not 1: planned_arrival, predicted_arrival, promised_from, promised_to. No job writes to more than 1 of them.
- Attach provenance to each: plan_version for the planned time; model_version and computed_at for the prediction; changed_by and change_reason for any movement of the promise. A promise with no changed_by is an unaudited commitment.
- Append every material change of the prediction to a history table. Without it you can only score the last estimate before arrival — the estimate the customer never saw, and the one that flatters a model most.
- Record arrival as an event carrying its own source: geofence crossing, driver confirmation, or a scan at the door. Derive lateness from that event against the promise.
- Keep the width of the window, and the share of arrivals it is meant to catch, as properties of the promise itself. That is a separate claim with its own arithmetic, in the interval around an ETA.
Most of the work in keeping the 3 apart is plumbing. A customer emails "any chance after 2?", and something has to turn that into a promise change with a name on it rather than a note in a thread. A job recomputes predictions every 60 seconds and must touch nothing else. That is ordinary operations automation under the constraints any automated step carries in a live system — narrow scope, a human on anything that alters a commitment, 1 audit line per change — the argument in running AI agents in production. It is also what separates a logistics and mobility platform whose on-time figure can be audited from one whose figure can only be believed.
Frequently asked questions
Short answers to the follow-ups this page tends to raise.
What is a predicted ETA in logistics?
It is the system's live estimate of when a vehicle will reach a stop, recomputed as new position and road-speed data arrives. Unlike the planned time, which is frozen when the route plan is published, a predicted arrival has no author and no approval step. That is exactly why it must not be written into the same field as the window a customer was promised.
What is the difference between a planned and an estimated arrival time?
The planned time is what the route plan said should happen; the estimated, or predicted, time is what current conditions say will happen. Subtracting one from the other gives execution variance, a signal about your service times and travel-time inputs. Treating that gap as lateness is a category error: lateness is measured against the promise.
Can a promised delivery window be updated automatically?
Only under a written policy, and every change still carries a reason and an authority. A window a traffic feed can quietly widen is not a promise, it is a prediction wearing a promise's name, and the customer discovers the difference at the worst moment. Automating the mechanics of a change is fine; automating the decision to change a commitment is not.
Which arrival time should a customer tracking page show?
The promised window as the commitment, with the live prediction shown inside it and stamped with its own freshness. Showing the prediction alone trains people to treat an estimate as a guarantee; showing the promise alone leaves them refreshing a page that never moves. The commitment says what they are owed, the prediction says what to expect today.
- ETA
- shipment visibility
- data modelling
- delivery promises
The work behind this page
Builds from our portfolio that this page draws on.
ShipSight
A supply-chain control tower that tracks every shipment across ocean, air and ground, predicts each ETA with a confidence score, and flags at-risk shipments before they slip.
LogisticsAxlebound
Real-time fleet tracking and dispatching platform with full visibility over every vehicle, driver, and route.
LogisticsRead next
- Arrival fired twice at the gate, and forty minutes late at the next stopDuplicate arrivals and late arrivals look like one flaky feature and are 3 unrelated faults. Replaying the raw pings for one bad arrival against the polygon tells you which one you have in about ten minutes.diagnostic
- Breadcrumb trail: the line driven, not the line plannedThe trail is what the vehicle reported. The route line is what someone intended. Quoting one when you mean the other is how a mileage or detention dispute gets lost.definition
- Eleven vehicles have not moved since morning, and the fleet is fineA subset of stale vehicles is almost never a platform outage. Bucketing every vehicle by the age of its newest position, then looking for what the stale set has in common, names the fault in about ten minutes.diagnostic
- Geofence: a zone, 3 triggers, and the hysteresis that stops it lyingA zone on a map is not a geofence. It becomes one when a trigger rule and a hysteresis policy are attached, and without the second it fires whenever a parked vehicle's fix wanders.definition
- Ignition on and off: 1 true signal and its 4 false versionsEvery telematics feed carries an ignition flag. Whether it means the engine is running depends on how it was obtained, and the field itself almost never says.definition
- Map matching: snapping a scatter of fixes onto the right roadMap matching converts a scatter of position fixes into a path along real road segments. The distance that comes out is not the distance you get by joining the fixes.definition
Working on something in this space?
Tell us where you are in a sentence or two. We'll tell you honestly whether we're the right team, and what a sensible first slice of the work looks like.
Start the conversation