Free AuditEnterprise AIShelfSense
Back to Blog
ShelfSense by ShelfLifeProOct 28, 20267 min read

Safety Stock Formula for a Small Store: Use Your Lead Times

Size safety stock from your own sell-through and supplier lead times. A plain formula, a worked example, and why perishables need a smaller buffer.

SE

ShelfLifePro Editorial Team

Inventory management insights for retail and pharmacy

Why the shelf runs empty when the order went in on time

You placed the order on the usual day. The supplier said "Thursday." Thursday came and went, the truck showed up Saturday afternoon, and in between you had two days of an empty facing and customers asking when it'd be back.

Nobody did anything wrong, exactly. Your reorder point was built for the usual week: usual sales, usual delivery. The problem is that weeks aren't usual. A busy weekend lands right when a delivery slips, and the cushion you were counting on turns out not to be there.

That cushion is safety stock. You don't need a statistics degree to size it. What you need is your own sales history and an honest look at how late your suppliers actually run.

What safety stock actually covers

Safety stock is the extra you keep on the shelf so you can get through the gap between "what I expected" and "what happened." It covers two kinds of surprise:

  • Demand surprise: a run of busier days than average while you wait for the delivery.
  • Lead-time surprise: the delivery turning up later than it normally does.

It isn't your regular order quantity, and it isn't your reorder point. The reorder point is the stock level that triggers an order. It's what you expect to sell while you wait for the delivery, plus safety stock. If you haven't set reorder points yet, start with the sell-through method for reorder points and come back here to size the buffer on top.

The three numbers you need from your own records

You can pull all of this out of a sales export and a stack of past purchase orders. No forecasting software required.

  • Average daily sell-through: units sold over the last several weeks, divided by the days the store was open.
  • Busy-day sell-through: what you sell on a genuinely busy day. Not the one freak day of the year, just the busy end of normal. Look at your top few days from a recent stretch and pick a typical one from that group.
  • Lead time, typical and usual-worst: for each supplier, list the days between placing an order and stock hitting the shelf, for the last ten or so orders. The typical one is your normal wait. The usual-worst is the second- or third-longest. Ignore the single disaster unless it keeps happening.

The lead-time list matters more than people expect. Two suppliers can both "deliver in four days" while one is always on time and the other swings all over the place. The second one needs a much bigger buffer, and you only find that out by writing the dates down.

The max-minus-average method

Here's the version that works on the back of an envelope:

Safety stock = (busy-day sales × usual-worst lead time) − (average daily sales × typical lead time)

The first half is what you'd sell in a bad stretch: busy days and a slow truck. The second half is what you'd sell in a normal stretch. The difference is what you need on hand so the bad stretch doesn't empty the shelf.

Then:

Reorder point = (average daily sales × typical lead time) + safety stock

Expect this method to run a bit cautious, because it assumes the busy days and the late truck show up at the same time. On shelf-stable goods that's fine, since extra cans don't go off. On perishables it's a problem, and we'll get to why below.

Free Tool

Not sure how much you're losing to expiry?

Run a free inventory waste audit, find your bleeding SKUs in 60 seconds. No sign-up required.

Run free audit

Worked example: canned tomatoes and yogurt

Worked example, all figures illustrative. Picture a neighborhood grocery store looking at two lines from different suppliers.

Canned tomatoes (shelf-stable, dry-goods distributor):

For example, here's what the store pulls from its records:

  • Average sell-through: 6 units a day
  • Busy-day sell-through: 9 units
  • Last ten lead times: 3, 4, 4, 4, 5, 4, 3, 6, 4, 9 days. Typical is 4. Usual-worst is 6 (the 9 was a one-off holiday delay).

Worked example, continued: safety stock = (9 × 6) − (6 × 4) = 54 − 24 = 30 units. Reorder point = 24 + 30 = 54 units. When the shelf plus backroom count drops to 54, the order goes in. Thirty cans of buffer is about five days of normal sales, which is a lot. But they won't spoil, and a can sitting in the back for a few extra days costs very little.

Plain yogurt (perishable, dairy route delivery):

For example, here's the dairy line:

  • Average sell-through: 8 units a day
  • Busy-day sell-through: 12 units
  • Lead time: typically 1 day, usual-worst 2 days
  • Arrives with about 5 days of code left

Worked example, continued: the raw formula says (12 × 2) − (8 × 1) = 24 − 8 = 16 units of safety stock. Now check that against shelf life. Say the store orders every two days, so the cycle stock is 16 units. Add the 16-unit buffer and you've got 32 units on hand right after a delivery. With 5 days of code at 8 a day, the most the store can expect to clear is 40. So 32 technically fits, but only if every day is average. One slow day and the buffer units are the ones that age out.

Why perishables get a smaller buffer

A missing can and an expired yogurt don't cost the same. When you're out of stock you lose the margin on that sale, and sometimes the customer buys something else from you anyway. When something expires you lose the whole cost of the unit, plus the time it takes to pull it and write it off.

Suppose the yogurt costs the store $2 and earns $1 of margin. Every unit that expires costs twice what a missed sale does. So on that line it's actually cheaper to run out now and then than to throw stock away now and then. The buffer should come down.

For example, here are practical ways to shrink a perishable buffer:

  • Use typical lead time on both sides for daily-delivery lines, and only size for demand surprise. On the yogurt that gives (12 × 1) − (8 × 1) = 4 units.
  • Cap total stock at what clears in about two-thirds of remaining shelf life, so slow days have some room.
  • Order more often in smaller drops where the route allows it. A shorter cycle shrinks the gap you need to cover.
  • Lean on a substitute. If plain yogurt runs out, vanilla is right next to it. A gap on a line with a good substitute hurts less.

The overstock side of this trade-off is covered in more depth in the hidden cost of empty shelves vs. overstocked perishables. The short version: on short-life lines, waste is the bigger leak.

Keeping the buffer honest over time

A buffer you set once and never look at again drifts out of date. Sales shift with the seasons, suppliers change routes, and a distributor that used to be reliable starts slipping. Some habits that keep it current:

  • Log the actual arrival date on every delivery, not just the order date. Without that, your lead-time list is a guess.
  • Recalculate the busy lines monthly and the rest quarterly. In a store with a few hundred SKUs, start with your top sellers and anything perishable. The 500-SKU store guide shows how to split the catalog so this stays manageable.
  • Watch what happens to the buffer. If a line's safety stock never gets touched, it's too big. If you're still running out, check whether the problem is demand or delivery before you add more.
  • Track buffer units on perishables by expiry date, not just by count. A spreadsheet with a batch and expiry column works. The expiry-tracking spreadsheet template is set up for exactly that.

A notebook and a spreadsheet will get you to sensible numbers for your top lines. Where it breaks down is keeping hundreds of lines current every week, especially when lead times are shifting and the perishable buffer needs checking against expiry dates every time stock arrives.

Doing this alongside your current system

This is the work ShelfSense by ShelfLifePro was built for. Once a day it reads your stock, batch, cost and expiry records and sizes reorders from sell-through and cost basis, with a safety buffer and a lead time it learns from your store's own orders. It shows the arithmetic behind every call, and nothing gets ordered until a person approves it. You can start with a CSV export of your stock and expiry dates. If you run Tally, Shopify or WooCommerce, export to CSV today; a direct connection is available on request.

ShelfSense's free audit reads one CSV export, no account needed. If you'd like to see how your current buffers hold up, start free here.

SE

ShelfLifePro Editorial Team

The ShelfLifePro editorial team covers inventory management, expiry tracking, and waste reduction for pharmacies, supermarkets, and retail businesses worldwide.

See what batch-level tracking actually looks like

ShelfLifePro tracks expiry by batch, automates FEFO rotation, and sends markdown alerts before stock expires. 14-day free trial, no credit card required.

Prefer to talk it through? Book a 30-min call

Newsletter

The monthly expiry-tracking brief

One short email a month, only when there is something worth reading. FEFO tactics, markdown math, and real-world waste-reduction wins. Unsubscribe anytime.

No spam. Unsubscribe in one click.