case 3 of 3 · unit economics
Why did you pick the expensive courier? An honest answer, zone by zone
sev3Harvestline Groceryopened May 4, 11:05 AM ETdetected via: Customer finance lead flagged provider mix on the monthly invoice
01Symptom
Priya Raman, Harvestline Grocery’s finance lead, flagged one line on the monthly invoice: 37.9% of orders route to FleetX, the priciest provider on the account. Fair question — and this case answers it with arithmetic, not defense. Nothing is broken; a customer is asking us to justify our own routing with their money.
The honest answer splits. In part of the city the premium is buying something the invoice cannot see; in the rest it is a config decision nobody re-checked. The case keeps those two separate, because blending them would flatter us and cost the customer money.
| provider | deliveries | share | on-time | cost / delivery |
|---|---|---|---|---|
| FleetX | 5,445 | 37.9% | 95.8% | $16.62 |
| Parcelet | 4,474 | 31.1% | 91.6% | $12.16 |
| DashNow | 3,765 | 26.2% | 91.8% | $10.73 |
| CourierCo | 697 | 4.8% | 93.5% | $12.96 |
Trailing 30 days, 14,381 deliveries. The FleetX row is the eyebrow-raiser: highest share, highest on-time, highest cost.
02Evidence trail
Before any arithmetic, the router’s receipts — one order per zone, every quote it saw at dispatch time. The router’s score is quote price plus an expected-lateness cost built from each provider’s trailing on-time in that zone (A4). Cheap and unreliable loses to expensive and reliable downtown. And in the third panel, watch the quote that clears the reliability floor at a lower price and still loses. That is not a score. That is a pin.
| provider | price | eta | on-time | |
|---|---|---|---|---|
| DashNow | $8.22 | 45 min | 77.0% | |
| Parcelet | $9.54 | 35 min | 86.5% | |
| CourierCo | $11.46 | 38 min | 87.6% | |
| FleetX | $14.52 | 34 min | 97.0% | ← dispatched |
| provider | price | eta | on-time | |
|---|---|---|---|---|
| DashNow | $8.06 | 40 min | 77.5% | |
| Parcelet | $9.60 | 40 min | 87.2% | ← dispatched |
| CourierCo | $11.14 | 39 min | 87.8% | |
| FleetX | $14.99 | 40 min | 97.6% |
| provider | price | eta | on-time | |
|---|---|---|---|---|
| DashNow | $8.60 | 41 min | 95.5% | |
| Parcelet | $10.66 | 47 min | 96.9% | |
| CourierCo | $12.21 | 42 min | 96.2% | |
| FleetX | $14.26 | 43 min | 97.8% | ← dispatched |
| provider | price | eta | on-time | |
|---|---|---|---|---|
| DashNow | $10.50 | 48 min | 95.9% | |
| CourierCo | $12.74 | 53 min | 94.3% | |
| Parcelet | $12.81 | 58 min | 97.9% | |
| FleetX | $16.05 | 45 min | 97.1% | ← dispatched |
On-time is each provider’s trailing rate in that ZIP at quote time (A4).
The arithmetic, zone by zone. For each zone: what FleetX costs, what each alternative would save on the invoice, and what that saving costs back in refunds, support contacts, and SLA credits. The economics are illustrative (A7/A14) and every constant is printed below the tables:
| alternative | avg quote | on-time | spend saved | lates added | refunds | support | sla credit | net / mo | call |
|---|---|---|---|---|---|---|---|---|---|
| Parcelet | $11.82 | 85.3% | $4,983 | 132 | $1,795 | $799 | $2,155 | $235 | below materiality |
| DashNow | $10.31 | 74.3% | $6,709 | 258 | $3,509 | $1,561 | $2,155 | -$515 | keep FleetX |
| CourierCo | $12.91 | 86.0% | $3,738 | 124 | $1,686 | $750 | $2,155 | -$854 | keep FleetX |
| alternative | avg quote | on-time | spend saved | lates added | refunds | support | sla credit | net / mo | call |
|---|---|---|---|---|---|---|---|---|---|
| Parcelet | $12.06 | 86.5% | $5,179 | 131 | $1,782 | $793 | $2,806 | -$202 | keep FleetX |
| DashNow | $10.47 | 75.3% | $7,357 | 284 | $3,862 | $1,718 | $2,806 | -$1,030 | keep FleetX |
| CourierCo | $12.91 | 86.2% | $4,014 | 135 | $1,836 | $817 | $2,806 | -$1,445 | keep FleetX |
| alternative | avg quote | on-time | spend saved | lates added | refunds | support | sla credit | net / mo | call |
|---|---|---|---|---|---|---|---|---|---|
| Parcelet | $12.29 | 95.7% | $6,152 | 4 | $54 | $24 | $0 | $6,073 | switch |
| DashNow | $10.67 | 92.3% | $8,644 | 56 | $762 | $339 | $2,509 | $5,035 | switch |
| CourierCo | $13.35 | 94.8% | $4,522 | 18 | $245 | $109 | $2,509 | $1,659 | switch |
| alternative | avg quote | on-time | spend saved | lates added | refunds | support | sla credit | net / mo | call |
|---|---|---|---|---|---|---|---|---|---|
| DashNow | $12.44 | 91.8% | $7,998 | 39 | $530 | $236 | $2,497 | $4,735 | switch |
| Parcelet | $14.06 | 96.1% | $5,745 | 0 | $0 | $0 | $2,497 | $3,248 | switch |
| CourierCo | $14.81 | 93.7% | $4,702 | 12 | $163 | $73 | $2,497 | $1,968 | switch |
Illustrative economics (A7/A14): 40% of added lates refund at $34 each; 55% raise a $11 support contact; when the projected zone on-time falls below the 95% floor, an SLA credit of 10% of zone spend applies; a switch only counts as savings above $250/mo materiality. All table figures are per month.
-- Realized share, on-time, and cost by provider and zone, trailing 30 days.
-- On-time per the A6 definition: delivered within 15 minutes of promise.
SELECT
zip,
provider_id,
COUNT(*) AS deliveries,
ROUND(100.0 * COUNT(*) / SUM(COUNT(*)) OVER (PARTITION BY zip), 1)
AS zone_share_pct,
ROUND(AVG((delivered_at <= promised_at + INTERVAL '15 minutes')::int), 3)
AS on_time_rate,
ROUND(AVG(cost_cents)) AS avg_cost_cents
FROM deliveries
WHERE account_id = 'acct_harvestline'
AND created_at > now() - INTERVAL '30 days'
AND delivered_at IS NOT NULL
GROUP BY zip, provider_id
ORDER BY zip, deliveries DESC;03Diagnosis
Two mechanisms produce the 37.9%, and they deserve opposite treatment.
Merit. In 78701 and 78704, scored routing picks FleetX because every cheaper provider’s trailing on-time in those ZIPs sits far below it — the cheapest quotes downtown come from a provider running 74.3% on-time against FleetX’s 96.8%. Even the best alternative projects those zones to 85.6% and 86.1% — both through the 95% SLA floor. The router is doing its job.
Config debt. In 78757 and 78759, FleetX is not winning a score — it is pinned. The pin dates to a February decision after a bad DashNow week, and nobody revisited it. Today Parcelet runs 95.7% and 96.1% trailing on-time in those ZIPs, and the pin just burns money — $10,808 a month of premium that is not justified.
what the operator did not do
- Defend the router wholesale — the job is honest accounting, not advocacy for your own routing.
- Blend the four zones into one average — a blended number would show a modest premium and hide both truths.
- Recommend switching the dense core to look responsive — those paper savings reappear as refunds and SLA credits.
04Resolution & prevention
where the customer is right
$10,808 /month buying nothing
In 78757 (Crestview) and 78759 (Great Hills), the FleetX premium was not purchasing reliability those zones needed: net overspend of $6,073 and $4,735 per month respectively, after charging the switch for every added late, refund, support contact, and SLA credit. Roughly this much of the premium was buying nothing, and the finance team was right to flag it.
Recommended change: Remove the February FleetX pin in 78757 and 78759 and let scored routing pick per zone (Parcelet in 78757, DashNow in 78759); keep FleetX for baskets over $120 or sub-45-minute windows. Projected savings: $10,808/mo.
Prevention is a calendar rule, not a dashboard: routing pins now carry a quarterly review and expire unless re-justified with current numbers. A pin is a bet that the router is wrong; the February bet was right for a week and wrong for a quarter. The query below is the standing check — zones where we dispatch above the cheapest quote even though the cheapest provider is clearing the reliability floor.
-- Stale-pin detector: orders dispatched above the cheapest quote even though
-- the cheapest provider is clearing the 95% on-time floor in that zone (A4).
WITH ranked AS (
SELECT
order_ref,
zip,
provider_id,
price_cents,
chosen,
MIN(price_cents) OVER (PARTITION BY order_ref) AS cheapest_cents,
FIRST_VALUE(trailing_on_time) OVER (
PARTITION BY order_ref ORDER BY price_cents
) AS cheapest_on_time
FROM quotes
WHERE account_id = 'acct_harvestline'
AND ts > now() - INTERVAL '30 days'
)
SELECT
zip,
COUNT(*) AS orders,
ROUND(AVG(price_cents - cheapest_cents)) AS avg_overpay_cents,
SUM(price_cents - cheapest_cents) AS overpay_cents_30d
FROM ranked
WHERE chosen
AND price_cents > cheapest_cents
AND cheapest_on_time >= 0.95
GROUP BY zip
ORDER BY overpay_cents_30d DESC;the outreach — same facts, two altitudes
To: Tom Delgado (Eng, Harvestline)
Subject: Routing analysis behind the provider-mix answer for finance