Cost Flow Assumptions (and Why They Can Differ from Physical Flow)
A cost flow assumption is the rule you choose to decide which purchase costs are assigned to cost of goods sold (COGS) and which costs remain in ending inventory. It is an accounting convention for assigning costs to units.
Important: the cost flow assumption does not have to match the physical flow of goods. A warehouse might physically ship the oldest items first to avoid spoilage, but the accounting system could still assign costs using a different pattern (as long as the method is allowed and applied consistently).
- Physical flow: which specific boxes/items actually leave the warehouse.
- Cost flow: which costs are treated as leaving first for accounting purposes.
Why might they differ?
- Operational reasons: physical handling is driven by shelf life, storage layout, or picking efficiency.
- Pricing and margin analysis: management may want a costing method that smooths volatility or better matches how they evaluate performance.
- Practicality: tracking exact item-by-item costs can be expensive; methods like weighted average reduce recordkeeping complexity.
FIFO (First-In, First-Out): Layered Costing
FIFO assumes the earliest costs are assigned to COGS first. Think in layers: each purchase batch creates a cost layer (units and unit cost). When you sell units, you “peel off” the oldest layers first.
How FIFO Builds COGS and Ending Inventory
- COGS under FIFO: composed of the oldest purchase costs (earliest layers).
- Ending inventory under FIFO: composed of the most recent purchase costs (latest layers remaining).
FIFO Step-by-Step (Layer Method)
- List purchase layers in chronological order (units, unit cost, total cost).
- Determine total units sold.
- Assign sold units starting from the oldest layer until all sold units are costed.
- Whatever units remain in the newest layers become ending inventory.
Weighted Average Cost: Smoothing Unit Costs
Weighted average assigns the same average unit cost to all units sold and all units in ending inventory (within the scope of the method). Instead of tracking layers for COGS, you compute an average cost per unit and apply it.
Continue in our app.
You can listen to the audiobook with the screen off, receive a free certificate for this course, and also have access to 5,000 other free online courses.
Or continue reading below...Download the app
There are two common variants:
- Periodic weighted average: compute one average for the entire period using all units available for sale, then apply it to units sold and ending units.
- Perpetual moving weighted average: recompute the average after each purchase; each sale uses the current moving average at the time of sale.
Periodic Weighted Average: Steps
- Compute total cost of goods available for sale (beginning inventory cost + purchases cost).
- Compute total units available for sale (beginning units + purchased units).
- Average cost per unit = total cost available ÷ total units available.
- COGS = units sold × average cost per unit.
- Ending inventory = ending units × average cost per unit.
Perpetual Moving Weighted Average: Steps
- After each purchase, update: new average cost per unit = (prior inventory cost + purchase cost) ÷ (prior units + purchased units).
- When a sale occurs, cost it at the current moving average.
- Reduce inventory units and inventory cost accordingly; continue updating after later purchases.
Structured Dataset (Multiple Purchase Batches at Different Costs)
Assume the following activity for a single product during the month. Units are identical; only purchase costs differ.
| Date | Activity | Units | Unit Cost | Total Cost |
|---|---|---|---|---|
| Jan 1 | Beginning inventory | 100 | $10 | $1,000 |
| Jan 5 | Purchase | 200 | $11 | $2,200 |
| Jan 12 | Purchase | 150 | $12 | $1,800 |
| Jan 20 | Purchase | 250 | $13 | $3,250 |
| Jan 28 | Sale (units sold) | 500 | — | — |
Compute units available for sale and ending units:
- Total units available = 100 + 200 + 150 + 250 = 700 units
- Units sold = 500 units
- Ending units = 700 − 500 = 200 units
Next, compute results under FIFO and weighted average.
Complete Solution Under FIFO (Layered)
1) Build the cost layers
| Layer (oldest → newest) | Units | Unit Cost | Layer Cost |
|---|---|---|---|
| Beginning inventory (Jan 1) | 100 | $10 | $1,000 |
| Purchase (Jan 5) | 200 | $11 | $2,200 |
| Purchase (Jan 12) | 150 | $12 | $1,800 |
| Purchase (Jan 20) | 250 | $13 | $3,250 |
2) Assign 500 units sold to the oldest layers first
Start with the oldest layer and work forward:
| Source layer used for COGS | Units taken | Unit Cost | Cost assigned to COGS |
|---|---|---|---|
| Beginning inventory | 100 | $10 | $1,000 |
| Jan 5 purchase | 200 | $11 | $2,200 |
| Jan 12 purchase | 150 | $12 | $1,800 |
| Jan 20 purchase (partial) | 50 | $13 | $650 |
FIFO COGS = 1,000 + 2,200 + 1,800 + 650 = $5,650
3) Determine ending inventory composition (what layers remain)
We used 50 units from the Jan 20 layer, so remaining in that newest layer:
- Jan 20 layer remaining units = 250 − 50 = 200 units
FIFO ending inventory = 200 units × $13 = $2,600
Complete Solution Under Weighted Average (Periodic)
1) Compute total cost and total units available for sale
- Total units available = 700
- Total cost available = 1,000 + 2,200 + 1,800 + 3,250 = $8,250
2) Compute weighted average cost per unit
Average cost per unit = $8,250 ÷ 700 = $11.785714...
Rounded to cents: $11.79 per unit (rounding can create small differences; many systems keep more decimals internally).
3) Apply the average to units sold and ending units
- Weighted average COGS = 500 × 11.785714... = $5,892.86
- Weighted average ending inventory = 200 × 11.785714... = $2,357.14
Check: $5,892.86 + $2,357.14 = $8,250.00 (ties to total cost available).
Weighted Average (Perpetual Moving Average): What Would Change?
With a perpetual moving average, the average cost per unit is recalculated after each purchase, and each sale uses the average at that moment. If there is only one sale at the end of the period (as in our dataset), the moving average at the time of sale equals the periodic average, so the results match.
To see why perpetual can differ, imagine sales occur between purchases. Then early sales would be costed using an earlier moving average (before later, higher-cost purchases occur), which can produce a different COGS and ending inventory than periodic weighted average.
Mini-illustration (no full recomputation):
- If a sale happens after the Jan 12 purchase but before the Jan 20 purchase, that sale would use an average based only on layers up to Jan 12.
- Later purchases would not affect the cost assigned to that earlier sale under perpetual moving average, but they would affect the single period-wide average under periodic weighted average.
Compare FIFO vs. Weighted Average (COGS, Ending Inventory, Gross Profit)
Assume the 500 units were sold at $20 each. Sales revenue = 500 × $20 = $10,000.
| Method | COGS | Ending Inventory | Gross Profit (Sales − COGS) |
|---|---|---|---|
| FIFO | $5,650.00 | $2,600.00 | $4,350.00 |
| Weighted Average (Periodic) | $5,892.86 | $2,357.14 | $4,107.14 |
How to Interpret the Differences (in This Dataset)
Unit costs are rising from $10 to $13. Under rising costs:
- FIFO assigns older, cheaper costs to COGS first → lower COGS, higher gross profit, and ending inventory reflects newer, higher costs.
- Weighted average blends all costs → COGS and ending inventory fall between the oldest and newest costs, producing results between FIFO and the most recent cost layer.
Quick Self-Check Questions
- Under FIFO, which purchase batch is most likely to remain in ending inventory when costs are rising?
- Under weighted average, why do units sold and units remaining share the same unit cost?
- If sales happen throughout the month, which weighted average variant (periodic vs perpetual) might produce different COGS, and why?