Skip to main content
Mixed-fleet distribution heuristics and assignment templates for breweries

Mixed-fleet distribution heuristics and assignment templates for breweries

How to decide what your own trucks haul versus what goes to carriers — before the decision gets made by whoever's standing near the dock

Most breweries don't actually decide how loads get split between their own vans and outside carriers. It just kind of happens. The distributor rep calls, someone eyeballs the delivery board, and the closest open driver takes it. Meanwhile a full pallet of IPA that needs to be 200 miles out by Thursday sits waiting because nobody wants to send a truck that far and there's no rule about whether it should go LTL, go with a regional carrier, or wait for the next batch heading that direction.

That informal system works fine at 400 barrels a year. At 3,000+ it quietly starts costing real money — in fuel, in spoiled product, in missed delivery windows that torch a chain account. And the reason it breaks isn't that anyone's bad at their job. It breaks because a decision that used to fit in one person's head now has too many moving parts: cost per case, distance, cold-chain exposure, whether the account is a keg account or bottles, whether your driver's already halfway there anyway.

This is the part of mixed fleet distribution for a brewery that nobody writes SOPs for, and it's exactly where a simple decision matrix plus a couple of assignment templates saves you from making the same expensive judgment call forty times a week.

Why the "closest available truck" instinct falls apart

The gut-feel model has one core assumption baked in: that the person allocating the load can see all the tradeoffs at once. Early on they can. Two vans, maybe one regional carrier you trust, and a delivery map you basically have memorized. Load assignment is muscle memory.

What changes as you grow isn't the number of trucks — it's the number of dimensions in the decision. A run that used to be "is a driver free?" becomes:

  1. Is this account inside our profitable in-house radius?
  2. Does the product have cold-chain risk that a dry LTL carrier can't handle?
  3. Is the drop size big enough to justify our own driver's day?
  4. Are there penalty clauses if we're late (chain accounts, distributor windows)?
  5. Is a truck already going 80% of that direction tomorrow?

When those five questions live only in someone's head, two things happen. Decision qualitydepends entirely on who's making it — your ops lead makes good calls, the weekend fill-in doesn't. And nobody can audit whether the calls are actually right, because there's no recorded reasoning. You just see the fuel bill and the spoilage credits at month end and wonder where the margin went.

A pattern that comes up pretty regularly: a brewery running its own two trucks insists on self-delivering everything within "about two hours" because it feels cheaper than paying a carrier. But when you actually load the numbers, trips past 90 minutes with drops under a couple of pallets are running somewhere north of $2.10–$2.40 a case in fully-loaded delivery cost, while a regional carrier would've done the same lane at around $1.30–$1.60. They're paying a premium to feel in control.

The decision matrix: turn judgment into scoring

The fix isn't complicated software. It's making the tradeoffs explicit enough that the answer falls out of the numbers instead of the mood in the room. You build a scoring matrix with three or four weighted factors, score each load, and set thresholds for in-house versus carrier versus hold-and-consolidate.

Here's the skeleton most small breweries can run in a spreadsheet:

FactorWhat you're measuringIn-house favored whenCarrier favored when
Cost-to-serve per caseFully-loaded delivery cost (driver time, fuel, vehicle) vs carrier quoteYour cost ≤ carrier quoteCarrier meaningfully cheaper
Distance / route fitOne-way miles + fit with existing routesUnder your radius OR on an existing laneIsolated, out-of-radius drop
Cold-chain riskProduct sensitivity × transit time × seasonLow risk / short transitHigh risk needs a reefer carrier
Account sensitivityPenalty windows, relationship value, drop precisionHigh-touch account, tight windowFlexible receiving

The important move here is that cold-chain risk doesn't average out with cost — it's a veto factor. This is the mistake that quietly kills margin: treating spoilage exposure as just one more number to blend into the total. It isn't. A cheap carrier lane means nothing if the product arrives warm in July. Any load scoring high on cold-chain risk should be forced into either your own reefer-capable van or a temperature-controlled carrier, regardless of what the cost column says. Cost decides between the qualified options. It doesn't get to override the temperature requirement.

Make cold-chain risk a binary veto in your scoring matrix so it never gets averaged into cost.

If you've already built out your cold-chain thinking, this matrix plugs directly into the logic in your production cadence and cold-chain delivery framework — the matrix is basically the load-level execution layer for those broader delivery rules.

Assignment templates so the decision only gets made once

A matrix tells you what to do. Templates make sure the same load type always gets handled the same way without re-litigating it every morning. This is where most of the daily time savings actually come from.

Think of a template as a pre-scored bucket. Instead of scoring every individual load, you define lanes and account types once, and 80% of your volume drops straight into a rule.

  1. In-house standard — Accounts inside your radius, mixed pack, routine window. Always your driver, batched onto existing routes.
  2. Carrier-default LTL — Out-of-radius dry loads (kegs, cans that tolerate ambient short-haul), flexible receiving. Goes to your default carrier at contract rate.
  3. Reefer-required — Anything flagged cold-chain-critical. Routes to reefer-capable van first, temperature-controlled carrier second. Never LTL dry.
  4. Consolidation hold — Small out-of-radius drops that don't justify a dedicated trip. Held within freshness limits until a load or carrier LTL builds up in that direction.
  5. White-glove / chain — High-penalty or high-relationship accounts. Your best driver or a named premium carrier, with delivery confirmation required.

The point of templating isn't rigidity. It's that the exceptions become visible. When 85% of loads fall cleanly into a template, the 15% that don't are the ones actually worth thinking hard about. Without templates, every load gets the same shallow five seconds of attention — so the genuinely tricky ones get the same treatment as the routine ones, which is how expensive misfires slip through.

The workflow, start to finish

Here's how this runs on a normal morning once it's set up:

Orders land from your distributor and DTC channels. Each one carries a product type, drop size, destination, and required delivery date. The first pass sorts them into templates — radius and product flags do most of the work. In-house standard and carrier-default loads get assigned right there; nobody touches them. Reefer-required loads get checked against van availability. Anything that lands in "consolidation hold" gets parked with a freshness deadline attached so it can't silently rot in the queue.

Visual overview of the template assignment and exception scoring workflow.

Process diagram

What's left — the genuine exceptions, maybe a dozen loads — get scored on the matrix by your ops lead, and the score suggests the answer. Total human decision time drops from "all morning" to twenty minutes on the hard stuff.

Escalation rules: what happens when the plan breaks

Templates handle the normal day. Escalation rules handle the day a driver calls in sick, a carrier no-shows, or a chain account moves its receiving window with two hours' notice. Without written escalation, these become panic decisions — and panic decisions default to the most expensive option available, usually an emergency dedicated run.

Set escalation as a tiered ladder tied to lead time:

  1. 48+ hours notice

    Re-run the load through the matrix. Treat it like a normal reassignment. No premium.

  2. 24–48 hours

    Reassign within existing routes or default carrier if capacity exists; only escalate to premium if a penalty-window account is involved.

  3. Under 24 hours, non-critical account

    Consolidate into the next scheduled trip or push delivery a day if freshness allows. Do not burn an emergency run for a flexible account.

  4. Under 24 hours, penalty or chain account

    Approved premium spend — dedicated run or expedited carrier — because the late-delivery cost exceeds the freight cost.

The insight buried in that ladder: the right answer to a disruption depends far more on which account than how urgent it feels. A stressed dispatcher will treat every fire as equally urgent. The escalation rule forces the actual question — "what does being late here actually cost us?" — and stops you from spending $180 on a rush run to protect a $95 order from an account that would've been fine waiting a day.

When mixed-fleet self-delivery actually makes sense

Owning trucks isn't automatically smart, and neither is outsourcing everything. The math turns on route density.

In-house wins when you have enough clustered accounts to fill a driver's day within your radius. Density is everything — a driver making eight drops in a tight loop is cheap per case; the same driver making three spread-out drops is a money pit. If your local accounts are dense enough to keep a van 70%+ full on regular routes, in-house is genuinely cheaper and gives you delivery control carriers can't match.

Carriers win when loads are isolated, long-haul, or lumpy. Out-of-radius chain accounts, seasonal spikes you can't staff for, any lane where you'd send a half-empty truck — those belong with a carrier every time.

This is a bad idea when you buy a truck to serve one big account "because it feels more professional." One-account fleets are the classic small-brewery trap. The moment that account renegotiates or churns, you're stuck with a depreciating asset and a driver salary against nothing.

Who should probably not build a fleet at all: breweries under roughly 1,500 barrels with scattered accounts. At that scale your volume can't support the fixed cost, and a solid regional carrier relationship plus tight consolidation rules will beat owning trucks on nearly every lane.

A real scenario

A roughly 2,800-barrel brewery in a mid-size metro was self-delivering almost everything with two vans, plus grabbing emergency carrier runs whenever a driver got slammed. No allocation rules — the taproom manager and the ops lead split the calls by whoever happened to be free.

The problems showed up in three places. Fuel and labor on long thin routes were eating margin. Spoilage credits kept appearing because ambient loads sat too long in summer heat. And they were paying premium expedited rates two or three times a month for last-minute reassignments that better planning would've absorbed.

They built the matrix and five templates in a shared spreadsheet over a weekend. The escalation ladder went on a laminated card by the dispatch board. Nothing fancy.

Over the next quarter: out-of-radius thin routes moved to a regional carrier, dropping delivery cost on those lanes from roughly $2.20 to about $1.50 a case. Consolidation holds cut the number of half-empty long-haul trips by more than half. Spoilage credits fell noticeably because cold-chain loads stopped landing on dry LTL. Emergency premium runs dropped from a few a month to maybe one, because the escalation rules only triggered premium spend for accounts that actually justified it. The estimated annual pickup landed somewhere in the low five figures — not dramatic, but it was margin they'd been quietly bleeding.

Where this connects to the rest of your operation

Load allocation doesn't live in isolation. The matrix depends on knowing your true cost-to-serve per lane, which means your delivery costing has to be real, not guessed. It depends on knowing which containers are where — a mis-scored keg run that assumes you have empties waiting is worse than no plan at all, which is why your allocation logic should ride on top of solid keg tracking and routing. And it feeds back into production scheduling, because consolidation holds only work if you know what's brewing and when it'll be ready to fill out a lane.

As volume grows, the spreadsheet version starts creaking — someone has to maintain the templates, re-score exceptions, and keep freshness deadlines honest across dozens of held loads. That's usually when breweries fold this logic into their operational platform, so the templating and scoring run against live order and inventory data instead of a file somebody forgets to update on Fridays. The system doesn't change; it just stops depending on one person remembering to run it.

The core idea holds at any size: stop making the same allocation judgment forty times a week by hand. Write the tradeoffs down, let the routine loads sort themselves, and save your actual attention for the decisions that genuinely need it.

Built for Breweries Tailored to craft brewery production and sales workflows
Save Time Automate scheduling, inventory, and quality control tasks
Optimize Quality Maintain consistent brews with streamlined quality checks
Grow Sales Track and expand distribution channels effectively