One thing quietly breaks the days of cover math before you even get to seasonality, and it’s the denominator.
If velocity is units sold divided by 30, then every day the SKU sat at zero counts as a day of zero demand. So the SKU that stocked out on day 12 looks slow, earns a low reorder point, and stocks out again. The products the formula punishes hardest are your best sellers. What you want is units divided by days the variant was actually available, which for a SKU that was out 12 of 30 days is close to double the number you’d otherwise carry into the calculation.
The catch is Shopify won’t hand you that after the fact. InventoryLevel is current state only, available, on hand, incoming and committed, with no history series to query. So whatever you build, start writing a daily snapshot of available per variant per location on day one, before the reorder logic even exists. Six months from now that table is the one thing you can’t recreate.
Two other bits worth knowing.
Subtract incoming, not just committed. It’s already a quantity state on InventoryLevel, so a SKU with an open PO landing next week shouldn’t be tripping a trigger at all. Skipping it is how you end up double ordering.
And the trigger probably shouldn’t fire per SKU. Evaluate per SKU, but decide at supplier level. Otherwise one SKU crosses on Tuesday and another from the same supplier crosses on Friday, and you pay freight twice or miss the MOQ on both. What worked better was computing days of cover per variant, then when any variant from a supplier crosses, pulling in everything from that supplier that would cross before the next realistic order date and ordering the lot. It turns lead time into a scheduling problem rather than a threshold problem.
On lead times, stop asking suppliers and measure them instead. Every PO you receive gives you an ordered date and a received date, so after a dozen you have a real distribution per supplier. Size the buffer off how wide that spread is rather than a flat percentage. Someone who quotes 14 days and delivers in 14 to 16 barely needs a buffer. Someone who quotes 14 and delivers anywhere from 14 to 30 needs buffer covering 30, and at that point it’s a sourcing conversation rather than an inventory one.
How many SKUs and suppliers are you dealing with? Under a couple hundred SKUs across three suppliers, the supplier level batching tends to matter more than which velocity formula you pick.