All you supply chain zombies (SCZs), who are now vying for the blood of the crackpot who wrote such a blasphemy as the title of this post, take a deep breath, cool down a bit and think back at the time when you last implemented the EOQ formula in its basic form. That is – NEVER.
Hmmm…and now that you are thinking about it, doesn’t it seem strange that one of the most popular supply chain concepts and most widely recognized formula that is literally taught on the first day of supply chain classes in college, is rarely used in the real world?
Well, there is a solid reason behind it. Rather, reasons behind how the real world considerations make our basic EOQ formula difficult to use in practical situations.
And you can too traverse this journey from Supply Chain Zombie to the supply chain detectives by understanding these factors and then tweaking the formulas to make it more suitable for your organization’s context.
But before you scram to your boss to make him salivate with your $545 million formula and start planning o spend that six figure bonus that he’ll shower on you, lets first clear up our basics about EOQ.
For the seasoned Supply Chain Detectives, who understand the basics of EOQ inside out – feel free to skip to the second part of this article. For the rest of us lesser mortals– read on.
The Basic EOQ Formula
While your soporific professor mumbled something about carrying costs and ordering costs in Supply Chain 101 you dozed off while doodling aliens and space rockets in your notebook. Well, don’t worry, we’ve got you covered.
EOQ stands for Economic Order Quantity. Well, what does it mean?
Everyday billions of individuals and millions of organizations across the globe buy stuff. For individuals, it varies from buying eggs, bread & butter to 8 iPhones for a Dog. And for organizations, it varies from manufacturing raw materials to office supplies, and from toilet papers to million dollar office decorations.
But, unless you are a billionaire owner of that Apple Watch brandishing dog, those billions of individuals and millions of organization must decide on one crucial factor while buying stuff – How much?
It may be intuitive for us to make the decision of ‘how much’ in some simple situations. E.g. eggs – On one hand you don’t want to buy too few eggs to save you trips to the grocery store everyday, one the other hand you also don’t want to buy too many to risk rotting them. And by using this rationale you settle on something in between say 1 week’s worth of supply.
What you are essentially doing here is trying to find a balance between two opposite cost elements – cost of visiting the grocery store too frequently vs cost of overstocking it.
This is what EOQ tells you. It finds the right balance between the Ordering Cost (cost of placing one order. In our example cost of visiting the grocery store once) and Carrying Cost (cost of carrying the inventory – storage costs, cost of capital etc.) mathematically and tells you exactly how much to buy.
Essentially what you are trying to minimize is the total cost of owning something.
Total Cost = Ordering Cost + Carrying Cost — (1)
Let us look at both the components theoretically. Later in this article, we elaborate what actually constitutes ordering and carrying costs from the organization perspective. For now, we’ll stick to formulas.
Ordering Cost
Ordering Cost = Number of orders per year x Cost per order (K)
Number of orders per year = Annual demand (D) / Ordering Quantity (Q)
Carrying Cost
Carrying Cost = Average Inventory (in $) over the year x Inventory Carrying Costs (h)
Average Inventory (in units) = (Q/2)
Average Inventory (in dollar) = (Q/2) x c
[Because we are ordering Q units at a time and it uniformly depletes to zero as the inventory is consumed. Hence, the average inventory is (Q+0)/2]
Carrying Cost = ( Q/2) x c x h
Let’s put back these numbers in total cost equation (1)
Total Cost (TC) = [( D/Q) x K] + [(Q/2) x c x h]
Now do you see why we need to find a sweet-spot of ordering quantity to minimize total costs? No?
Alright, pay close attention to the Q in the above equation. In the first term Q is in the denominator. So when the ordering quantity Q decreases, the first term, Ordering Cost increases. Obviously.
However, in the second term, ordering quantity Q is in the numerator. So when Q decreases, the second term, carrying cost decreases. Obviously.
It is more obvious visually. Below, we have plotted the total cost for various ordering quantities (on the X- axis) and Total cost on Y-axis.
Download the workbook here.
As you can see Total Cost (TC), the purple line, first decreases and then increases with changing Q. Though it is hard to see but the minimum Total Cost occurs at around ordering quantity of 20 units.
Using equation 3 we can derive (see footnotes for a detailed derivation) the order quantity for which the total cost is minimum. Voila! This order quantity is called Economic Order Quantity or EOQ.
We can also put the relevant data that was used to create the graphs above:
D= 100 units per annum, K = $ 2 per order, c = $ 5 per unit and h= 20%
And Q= 20 units that confirms our graph. Hence, we should order 20 units at a time.
This also means that we’ll place 5 orders per year and our average inventory will be 10 units.
Theory is fine but…
Now that you have a solid understanding of the basic EOQ formula, the trick to using it – even the basic version – depends on understanding those variables in the corporate context.
Product Cost (c) : This is the most straightforward variable to find out. Do keep in mind though that we need product’s landed cost and not the price.
Annual Demand (D): Another easy one. Just head down to your forecasting department and ask them politely to give you the projections for the next year. In all probability, they’ll throw a dart at the dart board and give a number to you. If they don’t – come back to your desk and prepare a forecast yourself by using some simple algorithms. That’s another post for another day.
Inventory Carrying Cost (h): Ah! Now we enter into exciting and tricky stuff. The basic premise of inventory carrying cost is any cost that is associated with holding extra inventory on our books. This typically includes cost of capital, cost of holding in warehouse (storage, insurance etc.)
However, this is not an exhaustive list – we should incorporate any other cost or risk that is associated with holding that extra inventory. E.g. risk of obsolescence, risk of damages etc.
Typically inventory carrying costs are taken to be around 17%. But remember, higher cost of capital, increasing risk and dynamic business environment (e.g. risk of design changes frequently) push this number up.
We’ll talk more about these in the next part of this article.
Ordering Cost: How much your organization spends on placing one order. It sounds simple but it is somewhat tricky to calculate. We should only add those ordering cost components that are variable in nature. That is, those costs components that are incurred every time there is an order.
Cost of stationery – ordering cost
Cost of courier – ordering cost
Inspection costs at inbound – ordering cost
Salary of the ordering manager – not an ordering cost
The last one is not an ordering cost because it doesn’t change with the number of orders placed and hence doesn’t impact our EOQ. In a strict sense however, this cost is a step function. Let’s say that up to a certain number of orders 1 ordering manager can handle the work. But for a large increase in orders, you may have to hire more people.
Well, now that we have a proper handle on the basic EOQ formula, we are now ready to take on the real world. But wait! Didn’t we say in the beginning that real world can put a spanner in using this formula in the basic form?
Well, that’s what the next part of this article deals with. Now that you are thorough with the basics , get your Cuban cigars out and get ready to become a true Supply Chain Detective.
Where,
Q is Economic Order Quantity
D is Annual demand (in units)
K is Ordering Cost (in $) per order
c is Cost of the product (in $ per unit) and,
h is the inventory carrying cost (as %age of product cost, incurred annually)
In this post we’ll see why EOQ formula should be rarely used in its basic form. And even if you were to use it, you must at least be aware of the caveats and assumptions that have gone into it.
We’ll do that in two parts. First let us challenge some assumptions that we made earlier and then we’ll put in some real world complications that require us to tweak the formula or add in some layers of analysis before we start using the order quantity recommendations.
Assumption #1: Inventory Depletion is uniform
One of the major assumption while deriving the formula was uniform inventory consumption. And that is how we arrived at Q/2 as average inventory. However, this is seldom true. Rate of consumption changes from season to season, week to week and even day to day.
Solution: An ideal solution is to come up with a consumption curve (Inventory vs Time graph) and use it to calculate average inventory over time. However, this may involve doing an integral of a complex curve. If you want to be super-precise then that’d the way to go but there are more practical and easier approximations to this problem that will give you “good” solutions with a lot less effort.
Approximation: Rather than one continuous curve, we can break our time period into two or more sub-periods each having a simpler consumption pattern. For example, a vast majority of FMCG organizations make most of their sales during the last week of the month. This could be a typical case of student syndrome where sales team is pushing to meet their monthly targets. [This takes a significant toll on supply chain infrastructure and many organizations struggle to manage these last week peaks. We will dedicate a separate post to this topic.]
So, let us say that 50% of the monthly demand is consumed in first three weeks while remaining 50% is consumed in last week itself. In other words, consumption rate during last week is thrice that of first three weeks. Over long-term^{1}, the average inventory can be calculated to be 5Q/8. We leave it to the readers to derive this number. You may notice that this average inventory is higher than (Q/2) that we calculated earlier where the inventory depletion was uniform throughout. This makes sense as earlier we had consumed 75% of the monthly demand in 3 weeks whereas we have only consumed 50% in the current scenario, leaving us with slightly higher inventory.
If we put 5Q/8 as average inventory in Total cost equation:
We can derive modified EOQ as:
Similarly, now you can derive your own EOQ formula given any consumption rate or consumption pattern.
Assumption #2: Cost of the material is constant regardless of quantity
Remember when we wrote the total cost equation as
We deliberately didn’t consider one element of cost in the above equation which was buying cost. We ignored it because it wasn’t relevant as we were spending the same amount annually despite of ordering quantity.
However, this assumption doesn’t hold true especially when buying quantities are large. Suppliers often provide bulk discount options as they save on producing at a scale. In fact a typical supplier quote looks like this:
QTY |
1-20 |
21-50 |
51-100 |
101-150 |
151+ |
Price (per) |
$ 5 |
$ 4.75 |
$ 4.5 |
$ 4.25 |
$ 4 |
As the quantity increases our buying cost decreases significantly. In fact supplier is willing to offer 20% discount if we buy more than 150 units of the product. But is it worth it?
Now, let us rewrite the total cost equation, this time around we’ll have to include the buying cost as it has become relevant.
The product price c* is now a function of Q –
c* = $ 5 per unit (for Q between 1-20)
c* = $ 4.5 per unit (for Q between 21 -50)
…and so on.
Graphical Solution
Let us recreate the chart that we made earlier. This time around, we have an additional line for buying cost.
Download the workbook HERE.
As you can see in the graph above, buying cost is a step-curve. Those “steps” represent the bulk-discounts that supplier has offered. We also see these “steps” in total cost curve (the thick blue line) since it includes the buying cost. You’ll notice that now it is not so easy visually to find the minimum cost point on the total cost curve.
I checked the table that was used to create the graph in the workbook, and it turns out that minimum total cost is $ 461.7 while buying 151 units. Note that this is different from our non-discounted EOQ number where we got the answer as 20 units.
How will you sell this to the CEO? You can’t show derived EOQs and complex graphs, right? Well, you can simply state the following – “Usually, we should only buy 20 units at a time which is roughly one month of supply, however this time around the supplier is giving 20% discount on bulk orders. Sure, this increases our inventory costs a bit but it’ll be more than compensated by the discount.”
Interestingly, the next lowest cost $ 470 occurs at 101 units. So, if your CEO still frowns at you for asking to buy huge inventories, you can always fall back on the second best solution, where incurring 9 dollars extra reduces your inventory from 150 to 100.
[The second best or even third best solution may be more acceptable in some cases. True – that absolute minimum occurs at 151 units but just paying additional 9 dollars we can mitigate some of the unaccounted risks that come along with the additional inventory. This is a typical problem with all kinds of optimization algorithms. They try to reduce the objective function to the absolute minimum, a phenomenon that we describe as chasing the pennies. This is sometimes not desired. And this is where multi-objective optimization comes handy. However, that is another discussion for some other day.]
Analytical Solution
Above, we arrived at the solution by looking at the graph and corresponding data but that’s not feasible especially when large quantities are involved or we don’t have access to spreadsheet software.
While there is no straightforward formula for EOQ with bulk discount because buying cost is a step-function and hence non-differentiable, we still have a step-by-step procedure that can help us arrive at the best quantity.
Step 1: Find normal EOQ for ALL buying costs
In our example, there are five different costs. While we are not showing the detailed calculation their corresponding EOQ values are shown below. Subscript represents the cost(in $ per unit):
EOQ_{5 }= 20 units
EOQ_{4.75 } = 20.5 units
EOQ_{4.5} = 21.1 units
EOQ_{4.25} = 21.7 units
EOQ_{4} = 22.3 units
[Bonus Question: Keeping all the other factors constant, why does EOQ increases as the cost per unit decreases?]
Step 2: Eliminate “Invalid” solutions
Some of the EOQ quantities doesn’t belong to the buying cost. Eliminate them.
EOQ_{5 }= 20 units
EOQ_{4.75 } = 20.5 units X
EOQ_{4.5} = 21.1 units X
EOQ_{4.25} = 21.7 units X
EOQ_{4} = 22.3 units X
Note: You may be left with none or more than one solutions.
Step 3: Calculate and compare total costs for all the valid EOQ solutions and buying qty break-points
Qty Type |
Qty (units) |
Total Cost ($) |
EOQ_{5} |
20 |
520 |
Bulk Qty 1 |
1 |
701.5 |
Bulk Qty 2 |
21 |
494.5 |
Bulk Qty 3 |
51 |
476.9 |
Bulk Qty 4 |
101 |
469.9 |
Bulk Qty 5 |
151 |
461.7 |
Total minimum cost is at Qty 151 which is our answer.
Assumption#3: Inventory Carrying Costs are constant
As briefly touched upon in previous part of this article, inventory carrying cost consists of several components – cost of capital (typically the borrowing rate of your organization), cost of storage (Warehousing costs and salaries) and cost of servicing the inventory (insurance, damages, obsolescence). Though it is highly organization dependent, finding the exact value might be a tricky task. It is usually taken between 17% and 25% depending the nature of the inventory and opportunity cost of capital to the organization.
However, some of these variables are not constant and vary with the quantity of inventory kept in the organization. Couple of examples are below:
Insurance cost: Per unit insurance cost decreases as average inventory increases.
Risk of damages/obsolescence: Risk of damages and obsolescence increases as average inventory increases.
Solution:
The solution requires some understanding of basic differentiation. If you don’t get it in the first attempt, don’t worry about it too much as we are now
Let us say that by some measure of analytics, one has arrived on a inventory carrying cost equation
Inventory Carrying Cost (h)= r + f(Q)
h = 20% + 2%* ((Q/D)*12)
Don’t get scared by the above equation. It simply states that inventory carrying cost is 20% plus 2% for addition of every month to order quantity. This 2% is attributed to the increasing risk because of incremental inventory. Hence for one month’s inventory, carrying cost = 22%, for two months its 24% and so on.
Putting this in the basic equation
Differentiating both sides by dQ
For min TC,
Simplifying the equation we get,
Replacing the variable values, D = 100 units, c = $ 5, K = $2
This is a cubic equation with three solutions for order quantity Q.
Q= 19.96, -6000, -20
We can reject the negative solutions. Hence, the EOQ for dynamic carrying cost is 19.96.
Note that this is slightly lower than our original solution of 20 units that considered fixed carrying cost of 20%. This seems logical as slight increase in carrying cost is reflected in decreased EOQ.
Conclusion
If you have reached this far, then CONGRATULATIONS! You’ve mastered the science behind ordering quantities and their trade-offs, you are now ready to take on any challenge that anyone in your organization can throw at you. Well, let me scratch that. You are almost ready.
There are some teeny-weeny complications that are often put to question your EOQ numbers. While some of those do not impact our EOQ too much, it is important to be aware of them to pave way for smooth implementation of your ideas. Part 3 of this article is dedicated to those complications and work-arounds.
[At this juncture, some of you might be feeling that we are splitting hairs on EOQ formula. Do yourself a favor and do a back of the envelope calculation on how much total cost changes just by changing the ordering quantity 2% on either side. Total cost swings a lot, even for tiny changes in the ordering quantity.]
Complication #1: Your EOQ is not your supplier’s EOQ
Alright, so you’ve created fancy versions of EOQ models, gathered data on ordering cost and carrying cost through hook or crook, done tons of calculations, and checked and rechecked your numbers. And to your delight, it looks perfect. Not only that, it seems that implementing new EOQ numbers will save a few million dollars for your company every year. But just when it seems that there is nothing between you and that Employee of the Year award, your order is rejected by…the supplier.
But why? Simple. Your order quantity might be the best thing that has ever happened to your organization, it is not feasible for the supplier to manufacture. Supplier has his own manufacturing processes, its own suppliers and his own optimal batch sizes, and the order quantity you are demanding isn’t financially viable for him. For example, remember when we calculated the EOQ of 20 in previous illustration earlier. But what if supplier’s batch run produces only 15 units at a time. This means that he’ll have to run two batches of production to produce 30 units and after fulfilling your “optimal” order of 20, sit on remaining 10 units waiting for your next order. The problem is even worse if his batch size is, say, 50 units.
Well, there are two ways out of the situation – the easy way, where you arm-twist the supplier to your will and push him to absorb the loss which is the most common practice in such situations but in long term results in supplier mistrust, higher inventory at the supplier, and maybe renegotiation of the whole contract.
The slightly difficult way –that will ensure more transparency, collaboration and even bigger savings than the EOQ formula – is called Joint EOQ formula.
[Also known as Joint Economic Lot Size (JELS) formula]
The underlying principle behind Joint EOQ is pretty simple as you might have guessed from its name – it tries to find an optimal EOQ for the supplier-buyer system considered as one. Imagine if supplier was part of your organization – in that case how would you calculate the optimal order quantitiy that needs to be produced.
Let us re-write our total cost equation
Total Cost = Ordering Cost (for both supplier and buyer)+ Carrying cost (for both supplier and buyer)
Where, D is annual demand
Q is the order quantity
Kb is the Ordering cost for the buyer
S is the set-up cost for the supplier
hb, hs Inventory carrying cost for buyer and supplier respectively
cb, cs purchasing cost for buyer and supplier respectively.
We repeat the same procedure of differentiating both the sides by dQ and solve for Q.
The beauty of this JELS quantity is that is leads to even lower cost than what buyer and supplier could have individually achieved. THAT is the power of collaboration right there.
Bonus question: What are the total savings for supplier and buyer combined by moving to JELS than their individual optimal quantities? What should be a fair split of benefits between them?
[For a detailed read on JELS you may want to read this famous paper. Please note that the notations used in the paper are slightly different.]
Complication #2: FTL ≠ EOQ
If you pay your logistics provide by the unit then don’t read further. You can merrily start implementing EOQs and punching those 1 unit orders.
However, if you pay your logistics provider by the trip or the route, you’d notice that EOQ quantities may lead to lower utilization of your vehicles. And since you pay for the whole vehicle whether it has one unit inside it or one hundred, you lose some money on every trip when you order EOQ.
Solution:
First check whether there are “right-sized” vehicles available with your logistics service provider. Your ideal situation is where EOQ matches exactly with the vehicle capacity.
If EOQ doesn’t align with the vehicle capacity, compare the total cost between partially filled vehicle (LTL) and FTL vehicle. When vehicle is FTL you end up increasing your inventory. It might still be worthwhile to under-utilize the vehicle.
[There are modified EOQ models available where transportation costs are taken as a step function.]
Multi-product ordering : If the supplier deals in multiple products, explore an option to combine multiple products in the same order.
Supplier clustering and multi-pick ups: If there are other suppliers in the vicinity, you may want to club your other orders in the same vehicle. This can also be implemented at buyer’s end where multiple buyers of the same suppliers combine their orders for better efficiencies.
This strategy to maximize vehicle utilization, albeit without EOQ reasons, is quite a common practice for non-competing organizations. Best example, perhaps, is where Nirma sent its heavy detergent packets inside Sintex’s empty water tanks to maximize the vehicle utilization leading to the savings for both the organizations.
Vehicle utilization and idle time reduction is an area of prime focus for the organizations with lot of resources and effort going into improving it. Hence, there will be whole another post to discuss it in detail.
Complication #3: Warehouse Capacities
At times, especially when pushed by deep discounts from the suppliers, EOQ formula may recommend huge buys. However, warehouse capacities are not infinite and handling additional inventory may require additional manpower, equipment or space.
Solution:
In such rare cases, it is useful to consider warehousing costs as increasing with inventory. This is something we tackled in part 2 where we considered inventory carrying costs to be a function of quantity.
Closing Remarks
Phew! That was a long read. But I hope that has you transformed from a Supply Chain Zombie (SCZ) who used to take orders from bosses and the clients to a Supply Chain Detective (SCD) who doesn’t rely on “thumb rules” and “common practices”.
In fact, the aim of this article wasn’t to cover each and every possible scenario in the book and churn out dozens of formulas but arm you with the thought process and the techniques to handle all sorts of complicated situations that might come your way. If I’ve succeeded in this attempt, do let us know through your comments.
Go ahead, now, change the world.