On-time is green, yet dwell and demurrage keep rising
Question
Carrier schedules improved and our on-time delivery KPI is green. But containers keep rolling at the transshipment hub, yard dwell is creeping up at two ports, and demurrage/detention charges are climbing. Weekend arrivals spill into Monday, last-mile misses bunch after cutoffs, and customer calls are up. If we’re “on time,” why does the network feel so costly and brittle?
Answer ✅
Headline on-time can hide flow instability. When arrivals bunch, customs clears unevenly, drayage slots fill late, or chassis supply wobbles, you hit the ETA while costs and stress rise. SSM-Audit adds a stability band beside the logistics KPIs you already track, revealing whether movement is calm and repeatable or spiky and rollover-prone—before it shows up as charges and escalations.
What the bands would have shown 📊
• Port/yard dwell stability sliding from A+ to A0 / A- at the two congested gateways
• Transshipment rollover rate degrading to A- / A– despite better schedule reliability
• Customs clearance time variance worsening to A- (documents complete but timing uneven)
• Drayage appointment fill discipline tilting A0 → A- (late bookings, queueing at gates)
• Chassis availability stability slipping to A- on peak days
• Last-mile capacity match weakening (A0 → A-), causing post-weekend spillovers
• Demurrage/detention cost share rising (A-), concentrated on two lanes
What to do now 🛠️
- Band by lane and node: dwell, rollover, clearance variance, drayage discipline, chassis stability, last-mile match.
- Smooth arrivals: prefer services that land Tue–Thu; split big arrivals across two windows when bands drop.
- Pre-clear documents: lock docs 48–72 hours earlier for lanes with A- clearance bands.
- Guard drayage & chassis: pre-book gate slots; implement a shared chassis pool where the availability band < A0.
- Buffer DC receiving: add Sunday night crew when last-mile bands soften; cross-dock fast movers first.
- Report “on-time without rollover” and “dwell under X days” as paired KPIs to prevent green masking.
How SSM-Audit helps (practicalities) 🌟
- No additional infrastructure: runs beside your TMS/WMS, carrier EDI, and BI exports.
- Numbers unchanged: your ETA/OTD metrics stay the same; stability is a read-only overlay.
- Easy to use: spreadsheet/BI friendly; one weekly band panel per lane and hub.
- Universal language: A++ / A+ / A0 / A- / A– aligns logistics, planning, and finance quickly.
CLI 💻 — try our mini Calculator to identify the drift
(Mini CLI Download Page)
Feed your CSVs and see bands and drift at a glance (numbers unchanged).
# Port/yard dwell stability (days vs target)
ssm_audit_mini_calc logistics.csv --kpi "Port/Yard Dwell" \
--out bands_dwell.csv --plot_kpi "Port/Yard Dwell" --build_id ship
# Transshipment rollover rate (pct rolled at hub)
ssm_audit_mini_calc logistics.csv --kpi "Transshipment Rollover Rate" \
--out bands_rollover.csv --plot_kpi "Transshipment Rollover Rate" --build_id ship
# Customs clearance time variance (hours)
ssm_audit_mini_calc logistics.csv --kpi "Customs Clearance Variance" \
--out bands_clearance.csv --plot_kpi "Customs Clearance Variance" --build_id ship
# Drayage appointment fill discipline (booked on time)
ssm_audit_mini_calc logistics.csv --kpi "Drayage Appointment Discipline" \
--out bands_drayage.csv --plot_kpi "Drayage Appointment Discipline" --build_id ship
# Chassis availability stability (ratio vs need)
ssm_audit_mini_calc logistics.csv --kpi "Chassis Availability Index" \
--out bands_chassis.csv --plot_kpi "Chassis Availability Index" --build_id ship
# Demurrage/Detention cost share (% of freight)
ssm_audit_mini_calc logistics.csv --kpi "Demurrage/Detention Share" \
--out bands_demdet.csv --plot_kpi "Demurrage/Detention Share" --build_id ship
Outputs you will get:
- CSVs with stability bands for each timestamp (e.g.,
bands_dwell.csv). - Drift charts per KPI (
--plot_kpi) showing where flow becomes spiky. - Optional alerts if you enable thresholds in your setup.
Technical notes
Representation: x = (m, a) with a in (-1, +1)
Collapse parity: phi((m,a)) = m
Order-invariant pooling:
U = sum(w_i * atanh(a_i))
W = sum(w_i)
a_out = tanh( U / max(W, eps_w) )
Typical bands (example):
A++: a >= 0.75
A+: 0.50 - 0.75
A0: 0.25 - 0.50
A-: 0.10 - 0.25
A--: a < 0.10
Navigation
Back: SSM-Audit Q&A Series – Healthcare & Life Sciences (Question 23)
Next: SSM-Audit Q&A Series – Board & Governance (Question 25)
Page disclaimer
Illustrative scenario for research and education. Observation-only; do not use for critical decisions without independent validation.