What costs money is the behavior the rule produces: orders placed at some rate, stock sitting on a shelf, demands arriving when the shelf is empty.
Every term in every model has the same shape:
\[ \text{cost rate} = \text{price} \times \text{quantity the system exhibits} \]
The quantities are properties of the system, and computing them is the technical content of this course.
The prices are what you supply, and no amount of modeling will produce them.
| Term | Price (you supply) | Quantity (the model computes) |
|---|---|---|
| Ordering | \(k\), dollars per order | order rate, orders per unit time |
| Holding | \(h\), dollars per unit per unit time | average on-hand \(\bar{I}\), units |
| Backorder | \(b\), dollars per unit per unit time | average backorders \(\bar{B}\), units |
| Stockout | \(\pi\), dollars per unit | rate of demand not filled, units per unit time |
| Purchase | \(c\), dollars per unit | demand rate \(\lambda\), units per unit time |
| Stocking position | \(f\), dollars per item per location per unit time | none |
Check the units as you read down. Every row reduces to dollars per unit time, which is what lets them be added.
Some prices are themselves rates. Holding and backorder prices are quoted per unit per unit time, so they multiply a level, not a rate. This is the commonest source of dimensional error in a first cost model.
The purchase term is inert. \(c\lambda\) is identical under every policy and cannot influence the choice among them. Unit cost matters, but through the holding cost.
The last row has no quantity at all. \(f\) is charged from the moment an item is carried at a location, identically whether one unit or ten thousand pass through. That absence is what makes it the parameter that decides marginal cases.
Every rate in a model must use the same time unit, and every price quoted per period must be converted on entry.
Accounting data arrives annually. Simulations usually run in days.
A missed conversion is the error most likely to survive review, because the answer stays plausible while being wrong by a factor of 365.
The test
A cost belongs in a parameter only if it changes when the quantity that parameter multiplies changes.
Applying it means naming the quantity first.
A cost that does neither is a period cost: real, possibly large, and irrelevant to the decision.
A fully allocated warehouse cost per unit.
The lease, the depreciation, the heating, and the management are divided by the units that passed through, producing a defensible-looking dollars-per-unit figure.
That figure is correct as an accounting statement and wrong as a model input, because none of those costs change if you hold one more unit.
Charge it as though it did and you overstate holding cost, understate order quantities, and recommend ordering more often than is economical.
Period costs are real and must be paid. They simply do not depend on the decision at hand, so including them changes the answer without changing reality.
An accountant computing the true cost of operating a warehouse, and an analyst computing cost parameters for a lot sizing model, are answering different questions.
They will legitimately produce different numbers from the same ledger.
Neither is wrong. Confusing the two is.
\[ h = i\,c \]
\(i\) is the carrying charge, in dollars per dollar of inventory value per unit time.
A carrying charge of 0.20 per year means it costs twenty cents a year to hold a dollar’s worth of stock.
Writing \(h\) this way says the cost of holding is proportional to value, so a single carrying charge serves an entire portfolio of items with different prices.
| Component | Belongs? | Why |
|---|---|---|
| Cost of capital | Yes | Money in stock is unavailable for anything else |
| Obsolescence, deterioration, shrinkage | Yes | Exposure scales with value held and time held |
| Insurance and inventory taxes | Where assessed on value | Insurers rate on declared value |
| Storage and space | Only where marginal | In an owned facility below capacity, one more unit costs nothing |
| Handling | Rarely | Scales with throughput, which customers set, not the policy |
The three unqualified Yes rows are the three whose exposure grows with the value held and the time it is held. Exactly what \(h\) multiplies.
A depot carries $70 million of inventory at cost, in a building it owns and operates at about 60% of capacity.
\[ \text{obsolescence} = \frac{4{,}200{,}000}{70{,}000{,}000} = 6.0\% \]
\[ \text{insurance} = \frac{180{,}000}{70{,}000{,}000} = 0.26\% \]
| Component | Value |
|---|---|
| Cost of capital | 5.00% |
| Obsolescence and shrinkage | 6.00% |
| Insurance | 0.26% |
| Storage | excluded: owned, below capacity |
| Handling | excluded: throughput-driven |
| Carrying charge \(i\) | 11.3% per year |
Five components listed, three included.
Perform that addition every time. A carrying charge that does not reconcile to the sum of its own table has usually picked up a component twice.
Suppose the same inventory sits in third-party warehousing at $18 per pallet position per month, occupying 8,400 positions.
Space is now bought by the position, and is unambiguously marginal:
\[ \frac{\$18}{\text{position-month}} \times \frac{12\ \text{months}}{\text{year}} \times 8{,}400 = \$1{,}814{,}400 \text{ per year} \]
\[ \text{storage} = \frac{1{,}814{,}400}{70{,}000{,}000} = 2.6\% \]
which raises \(i\) from 11.3% to 13.9%.
The physical inventory has not changed at all.
People quote 20% to 25%. We got 11.3%.
The gap is not an error in either direction. It is the storage and handling components, which the rule of thumb includes and the marginality test excludes.
Which is right depends entirely on whether those costs are marginal in the setting at hand.
This choice is not neutral
Because \(Q^{*}\) varies as \(1/\sqrt{h}\), moving \(i\) from 18% to 11.3% raises order quantities across the portfolio by \(\sqrt{18/11.3}\), about 26%.
An inflated carrying charge does not add noise. It systematically penalizes whichever alternative holds more inventory.
\[ k = \frac{\text{annual transaction-driven cost}}{\text{orders placed per year}} \]
A purchasing organization placed 18,000 orders last year.
| Component | Annual |
|---|---|
| Purchasing staff time attributable to placing orders | $570,000 |
| Receiving and inspection, the per-receipt portion | $280,000 |
| Systems, transmission, invoice matching | $50,000 |
| Transaction-driven total | $900,000 |
\[ k = \frac{900{,}000}{18{,}000} = \mathbf{\$50} \text{ per order} \]
Management overhead. Facility cost. Contract negotiation that does not vary with how many orders are placed.
Each is a real cost of running a purchasing department. None of them changes if one more order is placed this year.
Had we included all of them, the numerator becomes $1.4 million and
\[ k = \frac{1{,}400{,}000}{18{,}000} = \$77.78 \]
Because \(Q^{*}\) varies as \(\sqrt{k}\), that raises every order quantity by \(\sqrt{77.78/50} = 1.25\), a 25% overstatement, and it does so invisibly.
An automated release against an existing contract, an EDI message, may cost under $5.
A manual procurement action involving sourcing, approval, and inspection commonly runs $30 to $150.
The gap is an order of magnitude, and a single average is wrong for both populations: it makes automated items order too much and manual items order too little.
Where both exist, estimate two values and assign each item by its acquisition method.
The reassuring half: the order quantity depends on \(k/h\) under a square root, so errors are compressed.
Estimating \(k/h\) at half its true value, or at twice, costs about 6%.
Being wrong by a factor of four still costs only about 25%.
The curve is symmetric on a doubling scale: overestimating and underestimating by the same factor carry the same penalty.
The square root is doing the protecting, and it protects a great deal.
The same fact, seen from the other side.
Because the cost surface is flat, a badly wrong parameter produces a cost that looks perfectly acceptable while the policy it recommends is substantially wrong.
The model will not complain.
If the recommendation is a number of units to order, a 6% penalty may be tolerable. If the recommendation is which of two configurations to adopt, such as whether to stock an item at a location at all, a 6% error can flip the decision outright.
Where a parameter is both uncertain and decisive, report the break-even, not a point estimate.
Cost has one property no service measure has: it is a single number, so it ranks alternatives without further judgment.
It also has one weakness, and it is decisive. Two of its six terms require \(b\) or \(\pi\), and most organizations cannot defend either.
A measure that cannot be computed is not a measure.
Service measures are the response. They replace the term that cannot be priced with a constraint that can be stated.
Service measures differ in what they average over
Some average over time. Some over units demanded. Some over demand transactions. Some over replenishment cycles.
Two measures from different families can be far apart on the same history, and neither is wrong.
Ready rate \(\overline{\mathit{RR}}\): the proportion of time the system has stock on hand. Natural when what matters is availability at an arbitrary moment.
Transaction fill rate: the fraction of demand transactions filled completely and immediately.
Unit fill rate: the fraction of units supplied from stock on arrival. Gives partial credit.
Customer wait \(\overline{W} = \bar{B}/\lambda\): how long a demanded unit waits. Often the measure management can state most confidently.
A location opens the window \([0,5]\) with 10 units and receives no replenishment. Unfilled demand is backordered.
| \(t\) | \(D_t\) | On hand before | Filled | Backordered | \(I(t)\) after |
|---|---|---|---|---|---|
| 1 | 3 | 10 | 3 | 0 | 7 |
| 2 | 4 | 7 | 4 | 0 | 3 |
| 3 | 5 | 3 | 3 | 2 | 0 |
| 4 | 2 | 0 | 0 | 2 | 0 |
| 5 | 1 | 0 | 0 | 1 | 0 |
| Total | 15 | 10 | 5 |
On hand is positive over \([0,3)\) and zero over \([3,5]\):
\[ \overline{\mathit{RR}} = \frac{3}{5} = 60\% \]
Of the 15 units demanded, 10 were supplied from stock on arrival:
\[ \overline{\mathit{FR}}_{u} = \frac{10}{15} = 66.7\% \]
Two of the five transactions were filled completely:
\[ \overline{\mathit{FR}} = \frac{2}{5} = 40\% \]
Three numbers between 40% and 67%, from one history, none of them wrong.
The transaction measure is harshest: it gives no credit for the three units of transaction 3 that were supplied.
The ready rate is highest: it counts the quiet early periods, when the shelf was full and nothing much was being asked of it, as heavily as the busy later ones.
A report claiming “95% service” without saying which of these it means is not telling you very much.
The ready rate and the unit fill rate coincide under one important condition: demand arriving one unit at a time in a Poisson stream.
Poisson arrivals see time averages, so the fraction of arrivals finding the system out of stock equals the fraction of time it is out of stock.
That is why the two are so often used interchangeably, and doing so is usually safe for slow-moving items demanded singly.
It stops being safe as soon as demand arrives in batches, because then a stockout tends to be caused by a large transaction, so the arrivals that find the system short are systematically the big ones.
The cost form prices every consequence and minimizes:
\[ \min_{\text{policy}} \;\; k\overline{N} + h\bar{I} + b\bar{B} + \pi\lambda_{\ell} + f \]
The service-constrained form minimizes only what can be defended:
\[ \min_{\text{policy}} \;\; k\overline{N} + h\bar{I} + f \qquad \text{subject to} \qquad \overline{\mathit{FR}} \ge \beta \]
These are the same problem. A shortage cost implies a service level, and a service target implies the shortage cost for which it is optimal.
Which form to use is a question about which input you can defend, not about which is correct.
Price times quantity. Six terms, all reducing to dollars per unit time, and the units check catches most first models.
The marginality test. A cost belongs in a parameter only if it moves when that parameter’s quantity moves. Everything else is a period cost.
Parameters are built from ledgers, and the judgment is in the numerator. 11.3% or 13.9% turned on one fact about the building.
Flatness protects the cost and hides the policy error.
Service measures differ in what they average over. 40%, 60%, 67%, one history.
Read before next session: The Manager’s Problem, and Grouping and Segmentation.
We now have everything needed to state a policy problem for one item. Next session asks what happens when you have forty thousand of them.
Next session:
Bring the marginality test. It reappears whenever someone proposes a new number.