Skip to main content
Which Sales Channels Are Secretly Costing Your Bakery: A Capacity‑Aware Channel Profitability Framework

Which Sales Channels Are Secretly Costing Your Bakery: A Capacity‑Aware Channel Profitability Framework

Why your best-selling channel might be quietly eating your margin — and how to run the math that proves it

Most bakery owners can tell you which channel brings in the most revenue. Almost none can tell you which channel actually makes them money once you account for the oven time it consumed, the labor it pulled off other work, and the trays that went stale because the schedule got jammed.

That gap is where profit disappears. And it doesn't show up in your P&L, because accounting lumps everything together at the top line. Wholesale, cafe walk-ins, online pickup, delivery apps, subscriptions, catering — they all feed into one revenue number, and costs get smeared across the whole operation. So you end up chasing the channel with the biggest number, not the channel with the best return on your scarcest resource.

That scarce resource is almost never money. It's capacity. Oven hours, proofing space, decorator time, the two-hour window before the display case has to be full. A bakery channel profitability framework that ignores capacity is basically a lie with good formatting.

The problem with "revenue per channel" thinking

The trap looks like this: you pull a report, wholesale did $18k last month, the cafe did $22k, and so the cafe looks stronger. Maybe. But that comparison is meaningless until you ask what each channel actually consumed to produce that revenue.

Wholesale might run on batch production during off-peak hours, using oven time that would otherwise sit idle. The cafe might rely on the exact same morning window as your online pickup orders and your Saturday catering builds — all competing for the same three people and two ovens between 4am and 8am.

When two channels fight for the same constrained hour, that hour has a real cost. In a bakery it looks like this: the tray of croissants you baked for a delivery app order is a tray you didn't bake for the display case, where the same product sells at nearly double the margin.

Revenue-per-channel can't see that. It treats every dollar as if it came free of tradeoffs. The dollars that come during your bottleneck hours are far more expensive to produce than the dollars that come when the kitchen is half-idle.

Three costs that channels hide from you

Before any framework works, you have to be honest about the three costs that channels quietly shift onto the rest of the operation.

Marginal capacity cost. This is what a channel consumes of your binding constraint. If your oven is the bottleneck between 5am and 9am, any channel demanding product in that window is burning your most valuable inventory: oven-minutes. A channel that only needs product baked at 1pm, when the oven is cold and idle, is essentially getting capacity for free.

Marginal labor cost. Not average labor — marginal. The question isn't "what's my hourly wage bill." It's "did this channel force me to add a shift, keep someone on overtime, or pull a decorator off custom cake work?" Subscription boxes are notorious for this. They look efficient on paper, then you realize someone spends 90 minutes every Thursday assembling and labeling them during the exact window you needed for weekend prep.

Marginal spoilage. Every channel has a different waste profile. Walk-in display sales carry high spoilage risk because you're guessing demand. Pre-paid online orders carry almost none — the product is sold before it's made. Delivery apps sit somewhere in between and often add a hidden layer: remakes for damaged or wrong orders that rarely get counted anywhere.

The mistake nearly everyone makes is attributing these costs to the bakery instead of the channel that caused them. Spoilage gets written off as a general loss. Overtime gets blamed on "a busy week." The connection between a specific channel and the cost it dragged in never gets drawn.

What breaks as you add channels

A single-channel bakery — just a cafe, say — doesn't need any of this. Demand and capacity live in the same place, and you feel the friction directly.

The trouble starts around the third channel. A cafe adds wholesale, then online pickup, then someone convinces them to try a delivery app or a subscription. Each one made sense on its own. Together they create invisible contention for the same morning hours, and nobody's watching the collision.

  1. The morning window overloads. Every channel wants fresh product ready by open. Bottleneck hours get triple-booked and something slips — usually the highest-margin item, because pre-paid orders are locked in and the display case is the flexible one that gets shorted.
  2. Labor stops matching demand shape. You staffed for a cafe rhythm, but Thursdays and Fridays now spike because of subscription assembly and wholesale deliveries, and your rota doesn't reflect it.
  3. Spoilage migrates. As you push more capacity toward locked-in channels, you have less flexibility to respond to walk-in demand, so you either overproduce for the display (waste) or underproduce (lost sales). Both are channel-driven, but they read as general inefficiency.

This is the same tension behind the problem of wholesale orders cannibalizing cafe freshness — two channels fighting over one production plan, with the more flexible one always losing.

The framework: attribute costs to the channel that caused them

The core idea is simple to state and annoying to actually do: stop measuring channels by revenue, start measuring them by contribution margin per unit of your binding constraint.

  1. Find your binding constraint. For most bakeries it's oven capacity during a specific window, or decorator hours, or the pre-open production block. Watch a normal week and find the resource that runs out first. That's what every channel is really competing for.
  2. Measure each channel's consumption of that constraint. How many bottleneck oven-minutes does a typical order in each channel require? Estimate it — you don't need precision, you need honesty.
  3. Attribute marginal labor. For each channel, ask what labor only exists because of that channel. Subscription assembly time. Delivery packing. Wholesale invoicing and loading. If the channel disappeared tomorrow, what labor cost would disappear with it?
  4. Attribute marginal spoilage. Track waste by channel for a few weeks. Display-case waste is a cafe cost. Remakes are a delivery-app cost. Failed subscription boxes are a subscription cost.
  5. Compute contribution margin per constraint-unit. Revenue minus ingredient cost minus attributed marginal labor minus attributed spoilage, divided by the bottleneck minutes consumed. Now you're comparing channels on the thing that actually limits your growth.

That last number is what matters. A channel can have a lower total margin but a higher margin per bottleneck-minute — meaning it's a better use of your constraint even though it looks smaller on the revenue report.

Process diagram

Here's a quick visual of that workflow.

A worked example

Say a bakery has one binding constraint: oven capacity from 4am–8am, roughly 240 bottleneck minutes per day. Four channels want a piece of it.

ChannelMonthly revenueIngredient costMarginal laborMarginal spoilageContribution marginBottleneck min/mo usedMargin per bottleneck min
Cafe display$22,000$6,600$2,000$2,400$11,0002,200$5.00
Online pickup$9,000$2,700$600$150$5,550900$6.17
Wholesale$18,000$6,300$1,800$500$9,4001,900$4.95
Delivery app$7,500$2,250$900$1,100$3,2501,000$3.25

Look at what this reveals. The cafe has the biggest contribution margin ($11k) and feels like the star. But online pickup — a third of its size — actually earns more per bottleneck minute ($6.17 vs $5.00). Pre-paid, low-spoilage, tight labor. Every constrained oven-minute you feed it returns more than the same minute fed to the display case.

Meanwhile the delivery app is the quiet loser. It generates $7,500 in revenue, which feels fine, but after app-driven remakes and packing labor, it returns only $3.25 per bottleneck minute — the worst of the four. During your constrained window, every tray you bake for delivery is costing you the gap between that and what online pickup or the cafe would have returned.

The strategic move isn't "kill delivery." It's shift delivery production out of the bottleneck window if the app allows later fulfillment, and reallocate those freed-up minutes toward online pickup and cafe. Same ovens, same staff, meaningfully better return.

The quarterly review template

Channel economics drift — a delivery app raises its commission, a wholesale account grows, a subscription program scales. You need a rhythm for this. Once a quarter, run through:

  1. Pull revenue and ingredient cost by channel for the last 90 days.
  2. Re-estimate each channel's bottleneck consumption (constraints shift as your mix changes).
  3. Update marginal labor

    did any channel force added shifts or overtime this quarter?

  4. Update marginal spoilage by channel from your waste log.
  5. Recompute margin per bottleneck-minute and rank the channels.
  6. Flag any channel whose ranking dropped, and ask why.
  7. Decide three things

    which channel to grow, which to reprice, and which to shift out of the bottleneck window.

Pro-tip: Keep the review pragmatic — use rough, honest numbers that lead to clear actions rather than perfect allocations.

That last step is where most reviews fall apart. People do the analysis and then don't act on it. If a channel consistently returns poorly per bottleneck-minute, you have three real levers: raise its price, move its production off-peak, or cap its volume. Doing nothing is a choice too — usually the wrong one.

When this framework actually makes sense

Worth doing once you're running three or more channels that compete for the same production window. Below that, the friction is small enough to manage by feel.

It's especially useful if you've added a channel recently and can't tell whether it's helping or quietly dragging. Subscriptions and delivery apps are the two that most often look profitable and aren't — subscriptions because of hidden assembly labor, delivery because of commission plus remakes. If either is a meaningful slice of your volume, run the math.

It also matters a lot when you're near capacity. When ovens sit half-idle most of the day, channel choice barely matters — there's slack everywhere. The moment you're turning away orders or shorting your display, every channel decision becomes a tradeoff, and this is how you make those tradeoffs deliberately instead of by accident.

When it's a bad idea

Don't build this if you're single-channel or if you have significant spare capacity. You'll spend hours attributing costs that don't change any decision. The whole point is to allocate a scarce resource — if the resource isn't scarce, the analysis is theater.

And don't over-engineer the attribution. Some owners get obsessed with allocating every penny of overhead perfectly. That's not the goal. You want marginal costs — what actually changes when a channel grows or shrinks — not a full activity-based costing project. Rough, honest numbers that drive a decision beat precise numbers that sit in a spreadsheet.

A real scenario

A mid-sized bakery running a cafe, wholesale, online pickup, and a weekly subscription box kept posting solid revenue — somewhere in the $58k–$62k range per month — but the owner couldn't understand why cash stayed tight and mornings felt permanently on fire.

When they attributed costs by channel, the subscription program was the surprise. On revenue it looked healthy, around $6k a month. But it consumed a large chunk of Thursday and Friday morning labor for assembly and labeling — right in the bottleneck window — and had a quietly high failure rate from address errors and missed cutoffs. On a per-bottleneck-minute basis it ranked dead last, well behind even the delivery orders.

They didn't kill it. They moved assembly to Wednesday afternoons when the kitchen was cold and idle, tightened the order cutoff to reduce failed boxes, and nudged the price up slightly. Nothing dramatic. But it freed up roughly a person-morning of bottleneck labor each week, which got redirected toward the display case and pickup orders — the two channels earning the most per constrained minute. Over the next couple of quarters the morning chaos eased and the margin gap they couldn't explain started to close. Same channels, same ovens. They just stopped feeding their best time to their weakest channel.

The subscription rework leaned heavily on getting cutoffs and capacity allocation right — worth reading up on if subscriptions are dragging your production, because the fix is usually structural rather than promotional.

Where spoilage and pricing tie back in

Channel profitability and perishable pricing are two views of the same problem. When you know a channel is a spoilage magnet during the bottleneck window, you can either fix the channel or fix the pricing — often both. The capacity-aware pricing approach for perishable SKUs is the natural partner to this framework: channel analysis tells you where your constrained capacity is being wasted, and pricing tells you how to recover margin on the units that are at risk anyway.

Together they answer the two questions every multi-channel bakery eventually has to face: which channels deserve my best hours, and how do I stop the rest from quietly bleeding me.

The takeaway

Revenue tells you which channel is loud. Contribution margin per unit of your binding constraint tells you which channel is worth it.

Run the attribution once, honestly, even with rough numbers. Rank your channels by what they return on your scarcest hour, not on their top line. Then move production off the bottleneck where you can, reprice what you can't move, and cap what refuses to earn its keep. You'll likely find you don't need more revenue at all — you need to stop feeding your best time to your worst channel.

Revenue tells you which channel is loud. Contribution margin per unit of your binding constraint tells you which channel is worth it. Those are usually not the same answer, and the gap between them is where a busy bakery can run flat out and still feel broke.

Run the attribution once, honestly, even with rough numbers. Rank your channels by what they return on your scarcest hour, not on their top line. Then move production off the bottleneck where you can, reprice what you can't move, and cap what refuses to earn its keep. You'll likely find you don't need more revenue at all — you need to stop feeding your best time to your worst channel.

Built for Bakeries Tailored for bakery-specific workflows and inventory needs
Save Time Simplify order processing, inventory, and staff scheduling
Delight Customers Faster order fulfillment and personalized service
Grow Revenue Boost repeat orders and optimize production capacity