Executive summary
Inventory optimization starts from one fact: inventory is cash held in a form that is hard to spend. Every day of days inventory outstanding (DIO) is worth one day of cost of goods sold (COGS). A company with $24M of annual COGS has about $65,800 of cash in each day of DIO, so cutting five days releases roughly $329,000.
The mistake is to chase that number with a blanket cut. Inventory exists because demand and supply are uncertain, so the right level is set by forecast error, lead time, lead-time variability, and the service level you promise. This guide sizes the prize with turns and DIO, splits SKUs by value and predictability, sets safety stock and reorder points by formula, finds excess and obsolete stock, and prices the liquidation decision. Start by segmenting SKUs, not by cutting.
When to use this
Use this guide when:
- Inventory has grown faster than COGS for two or more quarters.
- The business has stockouts and a warehouse of slow movers at the same time.
- A lender, sponsor, or buyer is asking about working capital or an inventory peg.
- Purchasing runs on min/max values nobody has updated since they were entered.
Do not use this as a first step if the perpetual inventory record does not match the shelf. Run cycle counts and reconcile to the general ledger first, because every calculation below inherits the errors in on-hand quantity. This guide assumes you stock product; make-to-order businesses should focus on raw materials and work in process.
Inventory turns, DIO, and safety stock formulas
1. Inventory turns and DIO
Inventory turns = COGS (annual) ÷ Average inventory (at cost)
DIO = 365 ÷ Inventory turns = (Average inventory ÷ COGS) × 365
Use COGS, not sales, so the numerator and denominator are both at cost. Use average inventory over the period (for example, the average of twelve month-end balances) rather than a single month-end, which can be distorted by a large receipt or a quarter-end push. State the period each time. Turns on trailing twelve months and turns on the last quarter annualized can differ for a seasonal business.
Turns and DIO measure the same thing in two units. DIO translates directly to cash.
2. Safety stock
Safety stock covers variation in demand and in lead time during the replenishment window. The standard formula, when demand and lead time vary independently, is:
Safety stock = z × √( LT × σd² + d² × σLT² )
Where:
- z is the service-level factor (the number of standard deviations of cover).
- d is average demand per period (for example, units per day).
- σd is the standard deviation of demand per period, in the same unit.
- LT is average lead time, in the same periods.
- σLT is the standard deviation of lead time, in the same periods.
When lead time is fixed (σLT = 0), this reduces to z × σd × √LT. When demand is fixed, it reduces to z × d × σLT.
3. Service level and z-values
The z-value comes from the normal distribution. Common cycle service levels (the probability of not stocking out during a replenishment cycle) map to these values:
| Cycle service level |
z |
| 84% |
1.00 |
| 90% |
1.28 |
| 95% |
1.645 |
| 97.5% |
1.96 |
| 99% |
2.326 |
| 99.9% |
3.09 |
The relationship is not linear. Going from 95% to 99% raises z from 1.645 to 2.326, which is about 41% more safety stock for four points of service level. That is why service level should be chosen by SKU segment, not set at one number for the catalog.
Two cautions. The normal distribution fits steady, high-volume items and fits intermittent demand badly, so for slow movers use the empirical distribution of demand over lead time or a simple min/max. And cycle service level (the probability of no stockout in a replenishment cycle) is not fill rate (the share of units or lines filled from stock). Name the one you use.
4. Reorder point
Reorder point (ROP) = d × LT + Safety stock
When on-hand plus on-order falls to the ROP, place an order. The first term covers expected demand during the lead time. The second covers variation. If you review stock only periodically (for example, weekly), replace LT with LT plus the review period in both terms.
5. Carrying cost
Annual carrying cost = Average inventory value × Carrying cost rate
The rate is the sum of cost of capital, storage and handling, insurance and tax, shrink, and obsolescence or markdown risk. Build it from your own accounts.
Worked example (illustrative)
The numbers below are made up to show the method. They are not benchmarks.
Turns, DIO, and the cost of holding
A distributor has $24.0M of annual COGS and $4.0M of average inventory.
| Measure |
Calculation |
Result |
| Inventory turns |
24.0 ÷ 4.0 |
6.0 |
| DIO |
365 ÷ 6.0 |
60.8 days |
| Cash per day of DIO |
$24.0M ÷ 365 |
$65,753 |
| Cash released by 5 fewer days |
5 × $65,753 |
$328,767 |
| Carrying cost at an assumed 20% rate |
$4.0M × 20% |
$800,000 per year |
The 20% rate is an assumption for this example. In a real analysis it comes from your own capital cost, warehouse cost, insurance, shrink, and write-down history.
Safety stock and reorder point for one SKU
One fast-moving item has these inputs, measured in days:
| Input |
Value |
| Average daily demand (d) |
40 units |
| Standard deviation of daily demand (σd) |
12 units |
| Average lead time (LT) |
9 days |
| Standard deviation of lead time (σLT) |
2 days |
| Service level |
95% (z = 1.645) |
Inside the root: LT × σd² = 9 × 144 = 1,296. d² × σLT² = 1,600 × 4 = 6,400. The sum is 7,696 and its square root is about 87.7. Safety stock = 1.645 × 87.7 = 144 units (rounded). Reorder point = 40 × 9 + 144 = 504 units (rounded).
To see what drives it: demand variation alone gives 1.645 × 12 × √9 = 59 units. Lead-time variability alone gives 1.645 × 40 × 2 = 132 units. Most of the buffer exists because the supplier is erratic, not because customers are. That points to a supplier conversation, not a forecasting project.
What each lever does
| Scenario |
Safety stock (units) |
Reorder point (units) |
| Base: z = 1.645, σLT = 2 days |
144 |
504 |
| Lower service level, z = 1.28 |
112 |
472 |
| Raise service level, z = 2.326 |
204 |
564 |
| Supplier gets worse: σLT = 4 days, z = 1.645 |
270 |
630 |
| Better supplier: LT = 5 days, σLT = 1 day |
79 |
279 |
Dropping service from 95% to 90% saves 32 units of safety stock. Fixing the supplier saves 65 units and cuts the reorder point by 225 while service stays at 95%. Reducing uncertainty beats accepting more stockout risk.
Segmentation example
Ten SKUs ranked by annual usage value ($K, units sold × unit cost), with cumulative share in brackets: 1,800 (39.1%), 1,100 (63.0%), 700 (78.3%), 400 (87.0%), 250 (92.4%), 150 (95.7%), 100 (97.8%), 60 (99.1%), 30 (99.8%), 10 (100.0%).
Total: $4,600K. If A is roughly the first 80% of value, the top three SKUs are 78.3% and the fourth takes the cumulative share to 87.0%, so a practical A cutoff here is the first four. Cutoffs are a choice. Write yours down and keep them fixed between reviews.
Excess stock decision
One SKU has 1,200 units on hand at a $50 unit cost ($60,000), and expected demand of 600 units a year (50 a month). On hand is therefore 24 months of supply. Policy for this item is six months of cover (300 units).
- Excess units: 1,200 − 300 = 900 units, worth $45,000 at cost.
- Those 900 units take 18 months to consume at current demand.
Option A: hold. The excess declines linearly from $45,000 to zero over 18 months, so its average value is $22,500. Carrying cost at 20% for 1.5 years: $22,500 × 20% × 1.5 = $6,750. If all of the stock eventually sells at cost, the hold path returns $45,000 less $6,750, or $38,250.
Option B: liquidate now to a broker at an assumed 40% of cost: 900 × $50 × 40% = $18,000 of cash. The book loss is $45,000 − $18,000 = $27,000.
Breakeven. Holding is better only if the share of excess that is eventually sold at cost is high enough. Let p be the probability the 900 units become unsaleable. Hold value = (1 − p) × $45,000 − $6,750. Setting it equal to $18,000 gives p = $20,250 ÷ $45,000 = 45%. If you believe more than a 45% chance that the remaining units become obsolete (a design change, a customer leaving, a short shelf life), liquidate. If not, hold and stop reordering. This test ignores warehouse space value and any resale above 40%, so adjust where they matter.
Diagnostic questions
Answer these from the ERP and inventory records. Most take under an hour each.
- Does the perpetual inventory reconcile to the general ledger and to cycle counts?
- What are turns and DIO for the last twelve months, by product family or warehouse?
- What share of SKUs has had no usage in 12 months, and what is its value at cost?
- How much inventory exceeds 12 months of forward demand, by SKU and value?
- What is forecast error by SKU class, measured at the lead-time horizon rather than one month out?
- For the top 20 suppliers, what are quoted lead time, actual average lead time, and its standard deviation over 12 months?
- What service level do you promise by customer segment, and did anyone choose it deliberately?
- When were min/max or reorder points last recalculated, and by what method?
- How much did expediting cost last year, and how many A items stocked out last quarter?
- Who can approve a purchase outside the reorder rules, and is the reason recorded?
The framework: segment, set, and sweep
Three parts, in this order:
| Part |
Question |
Output |
| Segment |
Which SKUs deserve which policy? |
ABC and XYZ classes, with a service level for each |
| Set |
How much buffer does each policy need? |
Safety stock, reorder point, and order quantity per SKU |
| Sweep |
What do we already hold that we should not? |
Excess and obsolete list, with a decision per line |
ABC ranks SKUs by annual usage value: A is the few that make up most of the value, C the long tail. XYZ ranks them by demand predictability using the coefficient of variation (CV = σd ÷ d). In the example SKU, CV = 12 ÷ 40 = 0.30. X is steady, Y variable, Z erratic or intermittent. Choose cutoffs (for example 0.5 and 1.0) and keep them fixed each cycle.
Combining the two gives nine cells and a policy for each:
|
X (steady) |
Y (variable) |
Z (erratic) |
| A (high value) |
High service, frequent review, small buffer because forecast is good |
Higher buffer justified, work on lead time, weekly review |
Do not buffer blindly: consider make-to-order or supplier-held stock |
| B |
Automated reorder points |
Reorder points, periodic review |
Min/max, monthly review |
| C |
Bulk orders, simple min/max |
Min/max |
Stock only if a miss is costly, otherwise buy to order |
Safety stock should not be spread evenly. A high-value, erratic item needs a different decision from a cheap, steady one, and the policy can be "do not stock."
Step-by-step: a 90-day inventory plan
Weeks 1-2: Baseline and data
- Reconcile inventory to the GL and cycle-count A items. Owner: Controller with Warehouse lead.
- Compute turns, DIO, value per day, and a carrying cost rate built from your accounts. Owner: FP&A.
- Pull 24 months of demand by SKU and receipt dates against order dates. Owner: Supply chain.
- Segment by ABC (usage value) and XYZ (CV), with the cutoffs written down. Owner: FP&A with Supply chain.
Weeks 3-4: Stop the leak and find excess
- Freeze purchasing on any SKU above your cover threshold unless a named approver signs. Owner: Purchasing lead.
- Build the excess and obsolete list: no usage in 12 months, above the cover threshold, end-of-life, stock for lost customers. Owner: Supply chain.
- Check returns to vendor, transfers, rework, and kit use before any markdown. Owner: Purchasing and Operations.
Weeks 5-8: Set the policy
- Choose a service level by segment with Sales. Owner: COO or CFO.
- Calculate safety stock and reorder points for A and B SKUs using measured lead-time variability. Use an empirical method or make-to-order for Z items. Owner: Supply chain.
- Load parameters into the ERP in waves, a few families at a time. Owner: Supply chain with IT.
- Open supplier conversations where lead-time variability drives safety stock: shorter or steadier lead time, consignment, smaller and more frequent orders. Owner: Purchasing.
Weeks 9-12: Decide on excess and lock the cadence
- Decide each excess line (hold and stop buying, sell down, return, rework, broker, donate, scrap) using the breakeven method above. Owner: CFO with Sales.
- Run a monthly review of turns, A-item stockouts, new excess, forecast error, and supplier lead-time actuals. Owner: COO.
- Recalculate parameters quarterly for A and B, semiannually for C, and when lead time or demand moves. Feed purchases and receipts into the 13-week cash flow forecast.
Why cutting inventory without fixing forecasting and lead time backfires
A top-down instruction such as "reduce inventory 15%" treats a symptom. The causes are forecast error, lead-time variability, large minimum order quantities, and long supply chains. Leave them in place and:
- Buffers shrink, uncertainty does not. In the example, 95% service needs 144 units of safety stock. If lead-time variability doubles from 2 to 4 days and nobody notices, 270 units are needed. A trimmed buffer leaves that SKU exposed for much of every cycle.
- Stockouts get paid for elsewhere. Premium freight, split shipments, and lost orders can cost more than the carrying cost saved. Count them.
- The cut lands on the wrong SKUs. A flat percentage trims fast movers, which are easy to see, while slow and obsolete stock stays on the shelf.
- The rebound. After a few stockouts, planners pad orders to protect themselves, and inventory rises past its starting point with new excess in it.
- The metric gets gamed. Month-end receipt timing or consignment shifts lower reported DIO without releasing cash. Measure average inventory.
The order that works is the reverse: stop buying excess, reduce lead time and its variability, improve forecast accuracy at the lead-time horizon, then lower the buffers the math supports. The inventory reduction is the result, not the instruction.
Templates
SKU policy sheet (copy into a spreadsheet)
| SKU |
Class (ABC/XYZ) |
Annual usage value |
Avg daily demand (d) |
σd |
Avg lead time (LT) |
σLT |
Service level |
z |
Safety stock |
Reorder point |
Months of supply on hand |
Owner |
Excess and obsolete decision log
| SKU |
On hand |
Value at cost |
Months of supply |
Recoverable via |
Estimated recovery |
Carrying cost to hold |
Decision |
Approver |
Metrics and KPIs
| Metric |
Definition |
Use |
| Inventory turns and DIO |
Annual COGS ÷ average inventory; 365 ÷ turns |
Efficiency and cash translation |
| Months of supply |
On hand ÷ forward monthly demand |
Excess detection by SKU |
| Excess and obsolete share |
Value above cover threshold or without usage ÷ total inventory |
Size of the sweep |
| Service level |
Cycle service level or fill rate (name which) |
Customer promise |
| Forecast error (WMAPE) |
Sum of absolute errors ÷ sum of actuals, at lead-time horizon |
Forecast quality |
| Lead-time variability |
σLT of receipts versus order dates, by supplier |
Supplier reliability |
| Record accuracy |
Correct counts ÷ counts, by value |
Data trust |
| Expedite cost |
Premium freight and rush fees |
Hidden cost of low buffers |
Setting targets without invented benchmarks. Anchor on your own best trailing turns by product family, the turns your safety-stock math supports at your service level and lead time, and, if you use any, published turns for named listed peers. Set the first-year DIO target as the dollars you can defend line by line: excess you will sell down, buffers you can cut because lead time improved, and purchases you can reduce. Do not take a turns number from a blog.
Common mistakes
- Using one service level for the whole catalog. Symptom: safety stock is high on cheap items and low on critical ones.
- Using quoted lead times. Symptom: reorder points look right on paper and stockouts continue. Use actual receipt dates and the spread.
- Leaving lead-time variability out of the formula. Symptom: safety stock set only from demand. In the example, lead time produced most of the buffer.
- Measuring forecast error one month out when lead time is four. Symptom: the forecast looks accurate and the supply plan misses.
- Marking down excess too late. Symptom: items aged three years with growing carrying cost. Set a cover threshold and a review date.
- Buying to a price break without costing it. Symptom: a small discount on a volume that adds eight months of cover.
- Counting DIO at one date. Symptom: DIO falls at quarter-end and rebounds. Use average inventory.
AI prompt assistance
AI is useful for preparing the analysis and drafting. It is not a substitute for checking the numbers. For each prompt, supply the data yourself and verify the output against the ERP before acting.
1. Segment SKUs.
I will paste SKU, 12 months of unit sales, and unit cost. Compute annual usage value, rank SKUs, and assign ABC using cumulative cutoffs of 80% and 95%. Compute the coefficient of variation of monthly demand and assign X, Y, Z using cutoffs of 0.5 and 1.0. Show the formula for each column.
Check: recompute two SKUs by hand and confirm class totals tie to total usage value.
2. Calculate safety stock.
For each SKU in this table with columns d, σd, LT, σLT and service level, compute safety stock as z × sqrt(LT × σd² + d² × σLT²) and reorder point as d × LT + safety stock. State the z-value used. Flag any SKU where σd is greater than d, because the normal assumption may not hold.
Check: verify one row with a calculator and confirm the units are consistent.
Implementation guide
| Phase |
Weeks |
Owner |
Exit criteria |
| Baseline |
1-2 |
Controller / FP&A |
Inventory reconciled; turns, DIO, carrying cost rate computed; ABC and XYZ done |
| Stop and find |
3-4 |
Purchasing / Supply chain |
Buy freeze rule in place; excess and obsolete list built; recovery options checked |
| Policy |
5-8 |
COO with Sales and Purchasing |
Service levels chosen by segment; safety stock and reorder points loaded in waves; supplier lead-time conversations started |
| Decide and run |
9-12 |
CFO |
Excess decisions made and logged; monthly review running; parameters on a recalculation schedule; forecast linked to cash |
Governance: the CFO owns the cash target, the COO the service levels and policy, Purchasing supplier lead time, and Sales the service promise. Report turns, DIO, A-item stockouts, and excess share monthly alongside cash. Expect the first cash from stopping purchases against excess and selling down the oldest stock within a month or two; lower safety stock follows lead-time and forecast improvements over a quarter or more. Do not announce a DIO target in the first month.
Downloadable assets
The SKU policy sheet and excess decision log above can be copied into a spreadsheet.
Related resources
Frequently asked questions
How do you calculate safety stock?
Safety stock equals the service-level z-value times the square root of lead time times demand variance, plus demand squared times lead-time variance. When lead time is fixed it reduces to z times the demand standard deviation times the square root of lead time. Use consistent time units for demand and lead time, and choose the service level by SKU segment.
How do you calculate inventory turns and DIO?
Inventory turns equal annual cost of goods sold divided by average inventory at cost. Days inventory outstanding equals 365 divided by turns, or average inventory divided by COGS times 365. Use COGS rather than sales so both sides are at cost, use an average rather than one month-end balance, and state the period, since seasonal businesses can show different results.
How do you calculate a reorder point?
Reorder point equals average demand per period times average lead time, plus safety stock. The first term covers expected demand while the order is in transit; the safety stock covers variation. When on-hand plus on-order stock falls to that level, place an order. If you review stock periodically, add the review period to lead time in both terms.
What is ABC XYZ inventory analysis?
ABC XYZ analysis classifies SKUs on two dimensions: ABC ranks them by annual usage value, and XYZ ranks them by demand predictability using the coefficient of variation, standard deviation divided by average demand. The nine resulting cells each get a policy, so a high-value, erratic item can be handled very differently from a cheap, steady one, including a decision not to stock it.
How do you reduce excess and obsolete inventory?
Start by stopping the buying that created it, then list the excess and obsolete stock and make a decision on each line rather than applying a flat cut. Price the options, such as sell-through, return, rework, or liquidation, against carrying cost. Fix the causes too: forecast error, lead-time variability, and large minimum order quantities, or the excess will rebuild.
How this works in a System of Performance
An inventory policy only holds if the decisions behind it stay linked to what happened next. Which safety stock was set, which supplier's lead time it assumed, who approved an exception purchase, and what the result was are usually spread across the ERP, email, and spreadsheets. A Performis routine can take on a recurring job like this, with the scope and fit agreed with you: it works from the records your team supplies, prepares the work for your named reviewer, and keeps each approval on record. If you want to see how many days of inventory sit in your own ledger, bring it to us as a launch partner.