- Most AI programs fail on the data, not the algorithm: wrong grain, late events, and fields with three writers.
- Name one system of record per stop clock. Yard polygons and dock scans outrank radius geofences and EDI 214s.
- Budget ELD event age in writing. Over a 3 minute p95, live recommendations stop.
- Score six readiness dimensions on a read replica. One red cell holds the project.
- Pilot one workflow a person still commits. Pricing and autonomous dispatch wait until the clocks are green.
This page is an independent educational framework, a feasibility audit, an architectural specification, and an advisory roadmap for carriers and 3PLs that are evaluating or adopting AI.
Strong Tower Consulting, LLC is the Minnesota freight systems consulting firm founded in 2008 by Scott Elliott (strongtoweronline.com). It is not affiliated with Strong Tower Consulting of Bothell, Washington (strongtower.consulting or strongtower.ai).
Why carrier AI programs fail before a model is trained
Most failed programs never reach a bad algorithm. They train on a file that cannot support the decision. Three defects show up in the first workshop.
Wrong grain
ETA, dwell, and detention are stop decisions. Margin is an order decision, and only after the invoice matches rated revenue. One row per order with a single arrival hides the stop that made a multi-stop, a relay, or a stop-off late. Join yard and status events on a stable stop id. Sequence is a display field. Mixing stop grain and order grain in one training table teaches a blended error, and the dispatcher still cannot see which appointment to fix.
Late events
An EDI 214 posted the next morning is a customer message, not a live arrival. A geofence row that lands after the driver was already sent to the next shipper cannot undo that empty mile. If the event was not on the board when the person decided, the label is hindsight. Historical scoring may use it after skew checks. A live recommendation may not.
Unowned fields
Detention reason, late reason, and OS&D codes often have three writers: the driver app, the dispatch board, and billing. The last write wins, and without change history the prior value is gone. The model learns whoever closed the load, not the dock. Name one writer. Everyone else proposes a change through that owner.
Audit sequence before any model is purchased
Run the sequence in order. A vendor demo is not a step. The carrier signs the gate before a license is discussed.
- Discovery workshops. Dispatch plus the ELD administrator, then billing plus the EDI map owner. One lane family and one workflow. The decision record names the decision, the human actor, the grain, the system of record, and the red conditions that stop the work. No vendor signs that page.
- Instrumentation inventory. Every clock that can stamp a stop: system, payload, poll or webhook, typical age, TMS table, writer account, timezone. Include a yard barcode or guard-shack sheet when that is the real dock clock.
- Schema mapping. Order, stop, commodity line, accessorial, invoice, settlement. Grain, join keys, and non-null columns. Flag recycled PROs and sequences that renumber when a stop is inserted.
- Latency budget. Written p50 and p95 ceilings. If a vendor needs fresher data than the carrier has, stop or fix the feed. The model gets no exception.
- ROI gate. Price the leak on the carrier's own counts. A red rubric on the clocks that workflow needs means do not buy a model.
Stop timestamp integrity and the system of record
Five clocks compete for the same stop. They are not interchangeable. Geofence enter is the first position that satisfies the yard rule. Geofence exit leaves that rule. Dwell stays open until exit, or until a yard scan shows the trailer is still there after the tractor left. The driver ELD tap, usually a move to on duty not driving, happens when the driver remembers: at the fuel island, or after walking inside. The tap corroborates. It is not the detention clock. A dock barcode (lumper, yard jockey, or customer WMS) outranks a radius geofence wherever the site actually scans. An EDI 214, often an AT7 keyed later by a clerk, tells the shipper what you already know. Do not use it as live arrival, and do not train on-time labels from it when a better clock exists.
Store the system of record on the stop so a later project cannot invent a different one.
| Use | System of record | Corroborates only | Reject for this use |
|---|---|---|---|
| Dwell | Yard polygon enter to exit after the site minimum dwell. Drop lots use trailer telematics or a yard scan. | ELD tap and dock barcode | A radius ping on the frontage road, or a tractor exit that abandons a dropped trailer |
| Detention | Contractual free-time start stored on the stop, then the dwell arrival | Geofence and barcode | An EDI 214 posted after free time has already run |
| On-time | Appointment window compared with the dwell arrival | 214 as a customer message only | A backdated clerk edit inside a closed stop |
Store event time and ingest time apart. A live rule may read the row only when ingest minus event is inside the latency budget. Historical detention may use event time after three replica tests. Future stamp: event time more than two minutes after ingest (device clock or timezone cast). Disagreement: the ELD fix nearest geofence enter differs from stop arrival by more than the p95 ceiling. Backdated edit: CDC shows arrival moving earlier, or a person writing arrival after departure. Completeness that ignores backdated edits is not green.
Do not infer arrival from on duty not driving. That status also covers fuel, a scale, and the wrong gate. Do not infer duty status from a geofence. Keep the hours clock and the yard clock in separate tables. Join them only by driver id or power unit id plus a time window, and label the join approximate.
Geofence accuracy, false arrival, and trailer dwell
A circle is not a yard. A half-mile radius on a geocoded office covers the frontage road and often the interstate, so a passing truck is stamped arrived. Minimum dwell still misses a slow roll inside the circle. Retire any radius that overlaps a highway or frontage road. Draw the polygon to the property, not the billing address. Pin error is the quiet form: the geocoder returns the office or the street centroid, the dock sits behind the building, the polygon never hits, and a typed arrival becomes the label. Treat a manual arrival with no polygon hit and no barcode as amber, not truth. Review pins for the top customers by stop count before any distance feature is trusted.
One GPS fix inside a polygon is not arrival. Urban multipath throws a point across the block. Require two consecutive fixes inside, or dwell at the site minimum. A spike that enters and leaves on one breadcrumb is a false arrival and a false departure. A common live-dock minimum is 8 to 12 minutes. A staffed gate that already scans uses the scan as the clock. About 200 meters of cluster radius is a review flag, not an auto-merge. A trailer pool and a live dock keep separate stop ids. ELD GPS is usually the tractor. When the driver bobtails out, that exit is power departure, not trailer dwell. Trailer telematics or a yard scan is the dwell clock. If neither exists, drop-and-hook dwell is red. Do not impute it from the tractor, and list the gap as a known defect.
ELD latency: poll, webhook, GPS age, and duty-status lag
Event age is ingest time minus GPS fix time, or minus the duty-status time on the device. A screen that refreshes every 60 seconds can repaint a 14 minute old point. The budget is on event age, not refresh. A poll every 1, 3, or 5 minutes puts p95 near that interval plus vendor queue time. A duty webhook can land in under a minute when the device is online and still leaves breadcrumbs on the poll. Score the two ages separately. A green duty status does not make the GPS green. A steel building queues events and flushes them on the way out. Ingest time is the flush. Event time is the device. Reading only event time pretends the board knew it live. Reading only ingest time places the arrival at the exit. The dictionary names which column each use case may read.
At 60 miles per hour, a 3 minute p95 is about 3 miles and a 15 minute p95 is about 15 miles, before routing error. That can consume a 30 minute pickup window. A driver who just went to sleeper can still show driving, so available hours are overstated. A driver who just started driving can still show off duty, so hours used are understated. Do not fire a recommendation or write a tender while the feed sits in that 3 to 15 minute band.
| Signal | p50 target | p95 ceiling | If the ceiling is missed |
|---|---|---|---|
| GPS breadcrumb age (fix time to ingest) | 60 seconds | 180 seconds | Do not compute a live ETA |
| Duty-status age | 30 seconds | 180 seconds | Do not compute remaining hours |
| Geofence enter ingest delay | 60 seconds | 300 seconds | Do not close on-time from that event |
| EDI 214 | Not a live signal | Same calendar day is only a message SLA | Never treat a 214 as arrival for dispatch |
| Poll interval when no webhook exists | 60 seconds | 180 seconds | A faster screen refresh does not make the fix fresh |
| Replica lag, if a live reader uses the replica | Under 5 seconds | 60 seconds | Historical audit may continue. Live scoring stops. |
Assignment history sits beside the feed. Join hours to the driver and GPS to the power unit assigned during that interval. A relay swaps the tractor. Do not attach a breadcrumb after the swap. The required columns are power unit, driver, start, and end, tied to the order or the stop. Gaps make ETA features red for those intervals. Feed design itself is covered in the ELD, HOS, and telematics API integration architecture. This page only sets the age budget that feed must meet.
Order-to-cash schema readiness
Predictive use reads six entities: order, stop, commodity line, accessorial, invoice, and settlement. A wrong join bills the wrong load and pays the wrong trip. Trust keys in this order: order id, stable stop id, stop sequence, PRO, then BOL. Order id joins the invoice. Stop id joins events. Sequence renumbers when a planner inserts a stop, so it is not a key. PRO is a key only when the 90-day sample proves it unique. Recycled PRO numbers attach an older invoice to this week's load. BOL joins only from a normalized column.
These fields must be non-null or the row is excluded. Do not fill a guess. Order: order id, equipment type, practical miles or stop-to-stop distance, rate basis, ship date. Stop: stop id, sequence, stop type, appointment start, appointment end, latitude, longitude, location id. Commodity line: weight, handling unit count, and a commodity code when rating or claims need it. Accessorial: code, amount, unit quantity, stop id, and source (contract rule or manual). Invoice: invoice id, order id, invoice date, total, match status to rated revenue. Settlement: settlement id, order id, payee, amount. A trip lump covering two orders is the wrong grain until an owner stores the split. A null latitude drops the stop from ETA and geofence features. A city centroid is a defect, same as a pin at 0,0. A null accessorial source is a billing queue, not a training row.
Time zones, appointment windows, and practical miles
Store events in UTC. Appointments are local to the stop. A UTC arrival minus a naive local appointment is wrong by the offset, and wrong again when the terminal leaves daylight time. Name the zone of every clock. ELD events are typically UTC. A 214 map that drops the local time-zone code is a defect. Display in terminal local time. Compute in UTC.
Practical miles sit on the leg, not in header billed miles. Billed miles include a minimum and sometimes an out-of-route deal, so they miss relays and stop-offs. The prediction distance is planned practical miles from sequence n to n+1, or a routing result on the stop from the reviewed pin. Header miles stay for rating. They are not the ETA feature.
Scored readiness rubric
Score the last 90 days on the replica. Red stops the workflow. Amber blocks automation and allows only a shadow display that shows event age and does not write an assignment. Green allows a pilot in which a person still commits the action. Publish the thresholds in the decision record so a vendor cannot swap them in a demo. A workflow inherits the worst dimension it uses. Detention needs timestamp completeness, geofence hit rate, and accessorial capture. A shadow ETA needs ELD event age and master data. Pricing needs invoice match. Do not average the six scores. One red cell holds the project.
| Dimension | Evidence query | Red | Amber | Green |
|---|---|---|---|---|
| Timestamp completeness | Share of completed stops with both actuals non-null and departure on or after arrival, plus the CDC backdated-edit share | Under 85 percent, or backdated edits over 5 percent | 85 percent up to 97 percent, and backdated edits from 2 to 5 percent | 97 percent or better, and backdated edits under 2 percent |
| Geofence hit rate | Among stops with a yard polygon, share with enter, exit, and dwell at or above the site minimum. Highway or frontage-road radius fences are defects, not hits. | Under 70 percent, or top sites still use a highway-overlapping radius | 70 percent up to 90 percent | 90 percent or better, and the top 50 sites by stop count use a yard polygon |
| ELD event age | Business-hours p95 of ingest minus GPS fix time, and p95 of duty-status age | Either p95 over 15 minutes | Either p95 from 3 minutes through 15 minutes | Both p95 values under 3 minutes |
| Accessorial capture | Share of stops past contractual free time that have code, amount, stop id, and source | Under 60 percent | 60 percent up to 90 percent | 90 percent or better, and one writer owns the detention code |
| Invoice match rate | Delivered orders whose invoice total matches rated revenue within dictionary tolerance, joined on order id | Under 90 percent, or PRO is the only join | 90 percent up to 98 percent on order id | 98 percent or better on order id, PRO unique or unused as the join |
| Master data (shipper/consignee lat-long) | Share of stops whose location id has latitude and longitude, not 0,0, and not a city-centroid flag | Under 80 percent of stops | 80 percent up to 98 percent | 98 percent or better, pins reviewed for top customers by stop count |
ROI gate, and what not to automate first
The gate uses the carrier's own stop counts, contract rate, and empty-mile cost. The figures in this section are illustrative audit calculations, not a measured result from any named carrier, and they are not a savings promise. Substitute real counts or do not use the illustration.
Detention leak: 1,000 eligible stops, 0.75 hours excess dwell, 50 dollars per hour, 60 percent missing a usable clock.
1,000 x 0.75 x 50 x 0.60 = 22,500 dollars that month
Empty miles: 40 declined reloads, GPS age about 12 minutes, a false geofence exit, then 80 miles at 1.80 dollars.
40 x 80 x 1.80 = 5,760 dollars
If capture is red, fix the clock and the writer. Do not train on the 40 percent that was keyed. The pilot is a next-load suggestion a person accepts or rejects. The system does not send the tender.
Pilot first
- Detention capture with a named clock
- Shadow ETA that shows event age
- Next-load suggestions a dispatcher accepts
Automate later
- Pricing trained on unmatched invoices
- Auto-tender on an amber duty clock
- Anything that writes without a person
Do not automate pricing first. Invoice totals that miss detention teach the next quote the same hole. Invoice match must be green before freight rate and margin guardrails work starts. Do not automate dispatch first. Auto-assign, auto-tender, or auto-decline on an amber or red duty clock can send a driver to a pickup that is illegal or impossible. Timestamp completeness, geofence hit rate, and ELD event age must be green before a person-committed pilot. Pricing and autonomous dispatch wait longer.
Pilot one workflow. Baseline 6 to 8 weeks of the manual process on the replica. During the pilot a person still commits the action. Success is a change in that workflow with the rubric still green. If clock quality drops, stop. The model is fitting the outage. Score vendor claims later against the handoff package, using the carrier AI vendor due diligence checklist. A demo is not the gate.
Read replica, audit log, and change-data capture
The audit reads a replica or a nightly extract. It never scans the database behind the live dispatch board. The login is SELECT only, with a statement timeout around 30 seconds so a bad join fails instead of stalling the morning board. Land the extract in a warehouse schema or a dated file and record the row counts. Replica lag counts in the latency budget. Over the ceiling, historical scoring may continue and live scoring stops.
Change-data capture is the audit log. Capture insert and update of actual arrival, actual departure, both appointment fields, geofence id, and status, with before and after images and the writer (user id, ELD poller, EDI translator, or mobile app). Keep at least the same 90 days as the sample. A backdated edit is an arrival that moves earlier, or a person writing arrival after departure. Without CDC, completeness counts that row as filled and the defect disappears. A demo gets the extract or a read-only replica role with a timeout. It does not get production credentials. Decline a request to connect to the live board.
Handoff package before an AI vendor demo
The carrier builds this package. The vendor does not author it. If it cannot be built, the operation is not ready for a demo.
- Data dictionary. Table, column, grain, owner, null rule, and timezone. Name event time, ingest time, and the system of record for dwell, detention, and on-time. State whether PRO is unique.
- 90-day event sample. Orders, stops, duty status, GPS age or breadcrumbs, geofence transitions, 214s, accessorials, invoices, and assignment history. De-identify if it leaves the building. Same 90-day window as CDC. Print row counts.
- Known defect list. Frontage-road radius fences, pins at 0,0 or city centroids, reused PROs, backdated arrivals, poll interval, no trailer telematics on drop lots, and 214 maps that drop the time zone. Describe a site by geometry, such as a dock on a frontage road parallel to the interstate.
- Latency histogram. p50, p95, and p99 of GPS age, duty-status age, and geofence ingest delay, by hour of day. An average hides the morning peak.
With that package, ask the vendor to score the sample against the rubric. Without it, the demo is a slide. Related references, still behind this gate, include the BOL and POD document architecture, the predictive dispatch constraint guide, and the EDI 204, 990, 214, and 210 lifecycle. Vision models, constraint solvers, and rate models stay out of scope until the clocks on this page are green for the workflow that would use them.
Frequently asked questions
Why do carrier AI programs fail before a model is trained?
They fail on wrong grain, late events, and unowned fields. An order-level row hides which stop was late. An EDI 214 that posts the next morning cannot steer the board that already moved. A detention code that three systems overwrite teaches the model the last writer, not the dock.
Which stop timestamp is the system of record for dwell, detention, and on-time?
Dwell is yard-polygon enter to exit after the site minimum dwell. Detention starts from the contractual free-time clock stored on the stop, then uses that same arrival. On-time compares the appointment window to that arrival. The EDI 214 is a customer message. The ELD tap corroborates. Neither one outranks a sound polygon or a dock barcode.
What does a 3 to 15 minute ELD delay do to a dispatch recommendation?
At highway speed, 3 minutes is about 3 miles of position error and 15 minutes is about 15 miles. A duty status that stale can overstate or understate remaining hours. Do not assign a driver or promise a pickup from a recommendation inside that window.
What should a carrier refuse to automate until clocks are clean?
Refuse pricing and autonomous dispatch. A rate model trained on invoices that do not match orders learns the billing defect. Autonomous assignment on a stale duty clock can recommend a pickup the driver cannot legally or physically make. Clean stop timestamps and duty clocks, then pilot one workflow a person still commits.
What belongs in the handoff package before an AI vendor demo?
A data dictionary, a 90-day event sample, a known defect list, and a latency histogram. The carrier produces this package from its own read replica before any demo. A demo without it cannot be scored against a clock the carrier has defined.
Find out if your data is ready before you buy a model.
Strong Tower Consulting provides independent systems architecture, feasibility audits, and engineering roadmaps for motor carriers and freight brokers. Contact our advisory team or call 763-244-1373 to discuss your operational data and evaluate practical implementation paths for your fleet.
Published October 23, 2026 by Strong Tower Consulting, LLC. Founded 2008 in Minnesota by Scott Elliott.