Single Source of Truth Inventory: Shelf or Storefront?
Two systems claiming authority over the same number is why your inventory breaks. Here's how I assign a single source of truth inventory for each fact.
By Mike Hodgen
The Bug That Was Never a Bug
The storefront said we had 4 units of a style. The shelf in our San Diego warehouse had 2.
Authority failure: two systems voting on the same fact
A customer ordered 3. We shipped 2, refunded one, and ate the support ticket. She left a polite but disappointed email asking why the site let her buy something we didn't have.
Here's the part that took me too long to understand: nobody wrote a bug ticket. The storefront was working. The warehouse system was working. Both systems were doing exactly what they were built to do. They just disagreed about a number, and neither one was wrong on its own terms.
That's when it clicked. Most inventory pain isn't a sync failure. It's an authority failure. You never decided which system is allowed to be right about the on-hand number, so two systems both believed they owned it, and the customer paid for the tie.
This is the whole problem with single source of truth inventory in a sentence: you can have perfect data in two places and still ship the wrong order, because perfection in isolation means nothing when two systems are allowed to vote on the same fact.
I run a DTC fashion brand with 564 products, handmade, dynamically priced, the works. Across that operation I had four sub-systems that all broke the exact same way. Inventory sync. Replenishment. Returns. Drift correction. Four different symptoms, one disease.
Every one of them got fixed by the same rule, not by better integration, not by a more expensive platform, not by more careful humans. By deciding, on paper, which system was allowed to be right about each fact.
This essay walks through all four. By the end you'll have a 20-minute exercise to find the same conflicts in your own business, because I promise they're there, and they're probably your worst support tickets.
The Rule: One Fact, One Owner
Here's the principle as plainly as I can state it: for every fact in your operation, exactly one system is authoritative, and every other system reconciles toward it.
That's it. That's the entire system of record design philosophy. One fact, one owner, one direction of reconciliation.
What counts as a fact
Not everything is a fact. A fact is something the business depends on being correct: on-hand quantity, the product catalog, an order, a price, a ledger balance. Each of these is a separate fact with its own owner.
One fact, one owner, ownership assignment table
The mistake is treating "inventory" as one blob owned by one system. It isn't. The on-hand quantity is a different fact than the product description, which is a different fact than the order that consumed it.
For my brand, I assigned owners explicitly:
- On-hand quantity is owned by the physical bins. The shelf doesn't lie about what's actually there.
- Products and catalog data are owned by the storefront. That's where the customer reads it.
- Orders are owned by the storefront. That's where the customer transacts.
- Prices are owned by my pricing engine, which writes to the storefront.
Notice the on-hand number lives in the warehouse, not the storefront. That's deliberate. You can physically walk to a bin and count it. You cannot walk into a database and find the truth.
Why two owners always lose
The problem is never that data is wrong. Data is usually fine. The problem is that two systems disagree and nobody decided who wins.
When two systems can both write the same fact, you don't have redundancy. You don't have a backup. You have a coin flip that happens silently, in production, while a customer is checking out.
Inventory authority isn't a feature you buy. It's a decision you make and then enforce everywhere downstream.
Inventory Sync: Stop Letting Both Systems Vote
The first sub-system, and the one that caused the refund I opened with, was sync between the warehouse system and the storefront. Both tracked on-hand. They drifted apart constantly, sometimes by 1 or 2 units, occasionally by more.
Two-way sync vs one-directional reconciliation
The instinct is two-way sync. Keep both copies in agreement by letting each update the other. This feels safe and it's the worst thing you can do. Now both systems write, both systems are authoritative, and both systems can be wrong. You've doubled your coin flips.
The right fix is one-directional. The shelf owns on-hand. The storefront mirrors it. When they disagree, the shelf wins, full stop, because I can send someone to physically count the bin and end the argument.
The hard part wasn't the direction. It was building reconciliation that surfaces disagreements instead of silently picking one. A bad sync system hides the conflict by overwriting. A good one flags it: storefront says 4, shelf says 2, here's the gap, here's who wins, here's the corrected number flowing down. If you want the deeper version of how I got two systems to agree on inventory without silent failures, I wrote it up separately.
There's a subtler trap here too. Some systems subtract inventory when an order is placed. Others subtract when it ships. If your two systems use different truth-moments, they'll diverge by design, even with perfect sync, because they're counting different events. You have to pick one event as the moment the number changes, and make every system honor it.
Replenishment: Coverage Math Is Only As Good As Its Inputs
The second sub-system is replenishment. This is the logic that decides what to reorder based on on-hand, in-transit, and sell-through rate.
It's coverage math. How many days of stock do I have, how fast am I selling, when do I need to reorder so I don't run out. The math itself isn't hard.
But every single one of those calculations reads the on-hand number. If on-hand is wrong, the entire downstream chain is wrong. You over-order styles you actually have, you stock out on styles you thought were covered, and you do it confidently because the math looks clean.
The critical design choice: replenishment does not get its own copy of the truth. It reads from the authoritative on-hand, the shelf record. The reorder system reconciles to the shelf, never the other way around. Replenishment is a consumer of the truth, never an owner of it.
I learned this the expensive way. When I did a deep audit of the reordering system I built, I found ghost rows, phantom inventory records that didn't correspond to any physical unit, that nearly produced wrong refunds. The replenishment logic was fine. The number it was reading was poisoned upstream.
That's the broader lesson. People burn weeks tuning replenishment logic, tweaking safety stock formulas and reorder thresholds, when the real bug is upstream in who owns the number the logic reads. You can't out-math bad inputs. Fix authority first, then the coverage math actually means something.
Returns: A Box Comes Back, Now Who Decides It's Stock Again?
The third sub-system is returns, and this is where authority gets genuinely murky, because a return is a two-party event.
When a box comes back, two different facts change. The financial fact: the customer gets a refund or store credit. The inventory fact: is this unit actually sellable again. Those are owned by two different systems.
The storefront owns the order and the refund. The shelf owns whether the unit is back in sellable inventory. The mistake, and I made it, is crediting the restock the moment the return is initiated, before the item physically lands in a bin.
Think about what that means. A customer clicks "return," and your inventory immediately ticks up by one. But that unit is still in their closet, or in transit, or it arrives stained and unsellable. You just told replenishment and the storefront you have stock you don't have. The original bug, regenerated from a different angle.
The fix: restock only increments on-hand when the warehouse confirms the physical unit arrived, and only for what showed up in good condition. The storefront authorizes the financial side immediately if you want. The shelf authorizes the inventory side only on physical confirmation. Two parties, two facts, one clean handoff.
When I rebuilt this, I started from the box up, the physical arrival as the trigger for everything inventory-related. It's the same one-fact-one-owner rule, just applied to an event where two owners both have legitimate claims. You don't merge their authority. You split it cleanly along fact lines.
Drift Correction: The Field Task That Reconciles to Truth
The fourth sub-system is drift correction, and it's the proof the rule scales.
Four sub-systems, one rule: shelf as single owner
Physical counts drift. Always. Theft, miscounts, damage, a unit that fell behind a shelf, an item logged in the wrong bin. Over months, even a perfectly designed system accumulates gaps between what the record says and what's physically there.
So you do a drift walk. You send someone to physically count specific bins and correct the record. Simple in concept. The design choice that matters is what the walk writes to.
The drift correction writes to the authoritative on-hand, the shelf record. That corrected number then flows down to replenishment and the storefront automatically, because they're all consumers of the shelf. One write at the source, propagated everywhere, no manual reconciliation across four tools.
And the walk is a closed-loop field task. You don't just note a discrepancy and email someone about it. The task surfaces the gap, the person counts, and the correction resolves against the owner of that fact in the same loop. I wrote about how I structure these closed-loop field tasks so a discrepancy can't get noted and then forgotten, which is how most "we'll fix it later" inventory gaps actually happen.
This is why all four systems stopped fighting. They don't share data and hope it stays consistent. They all encode the same rule about which system is allowed to be right. Sync mirrors the shelf. Replenishment reads the shelf. Returns confirm to the shelf. Drift walks correct the shelf. One owner, four consumers, one direction.
How to Find Your Own Authority Conflicts
You don't run a fashion brand, probably. Doesn't matter. If you run 4 or more tools that hold numbers about the same business, you have authority conflicts right now. Here's how to find them.
A 20-minute exercise
Get a piece of paper. List every fact your business depends on. On-hand inventory. Customer record. Order status. Price. Ledger balance. Lead status. Whatever your operation runs on.
The 20-minute authority conflict exercise
Now, for each fact, name exactly one system that owns it. The system that is allowed to be right when there's a disagreement.
Where you can't name one, you have a gap. Where you name two, you have a bug. That bug is almost certainly the source of your worst recurring support tickets, the ones where everyone insists their screen is correct and nobody's lying.
I've run this with a financial advisory firm managing $500M+, a custom manufacturing client, a payments startup. Every one of them found at least one fact owned by two systems within the first ten minutes. It's not a competence problem. It's that nobody ever made the decision explicitly, so the systems made it for them, badly.
What good integration architecture actually looks like
The goal is not fewer tools. You can run twelve tools cleanly if authority is clear. You can run three tools into the ground if it isn't.
Good integration architecture is clear ownership plus one-directional reconciliation. Every fact has an owner. Every other system reconciles toward that owner. Disagreements get surfaced, not silently overwritten.
Let me be honest about the limit, because this is where vendors oversell. This does not make your data magically correct. The shelf can still be miscounted. What it does is make disagreements detectable and resolvable instead of silent. You go from "why did this happen" to "the shelf and storefront disagree, here's the gap, the shelf wins, go count bin 14." That's the entire win, and it's enormous.
This is the boring plumbing I build before any AI touches a business. I've shipped 15-plus AI systems, and not one of them works if the underlying data has two owners. AI on top of conflicting data doesn't fix anything. It produces confident wrong answers faster, at scale, with a polished tone that makes them harder to catch.
So before we talk models, we talk authority. Tell me which numbers in your business you don't trust, the ones where two screens disagree and you've stopped trying to figure out which is right. That's where I start.
Want to explore what AI could do for your business?
Book a free 30-minute strategy call. No pitch deck, no sales team, just a real conversation about your operations and where AI actually fits.
Get AI insights for business leaders
Practical AI strategy from someone who built the systems — not just studied them. No spam, no fluff.
Ready to automate your growth?
Book a free 30-minute strategy call with Hodgen.AI.
Book a Strategy Call