All posts

Inventory

Why we stopped asking who needs the stock

Point-to-point transfers make one person guess which outlet can sell the surplus. Open pools let the outlets answer for themselves — and the stock ledger stays honest throughout.

BluYards EngineeringProduct team3 min read

Every inventory system ships transfers. You pick a source, pick a destination, list the lines, and somebody approves it. It works, and for a planned rebalance between two known locations it is exactly right.

It falls apart the moment the question changes from "how do I move this there" to "who can actually sell this". A warehouse holding 400 units of a slow mover does not know which of forty outlets has the shelf space, the footfall or the customer for it. So somebody at head office guesses, splits it four ways, and two of those four outlets quietly write it off three months later.

The pool has no destination

An open transfer inverts it. The source dispatches into a pool that belongs to no location. The stock has genuinely left the source — the ledger records a TRANSFER_OUT and the source's on-hand drops — but it is not yet anybody's in-transit balance, because nobody has claimed it.

Eligible locations then see what is available and claim what they want. A claim is the moment the units get an owner: they move into the claiming location's in-transit balance, the pool's available quantity drops, and the claim waits to be received like any other delivery.

StepSource on handPoolClaimant in transitClaimant on hand
Dispatched−40040000
Outlet A claims 120−4002801200
Outlet A receives−4002800+120
Pool closed with 280 left+280 returned00+120
Where the units live at each step

What the design has to get right

  • Two outlets claiming the same last units cannot both win — claims lock the transfer row and check what is genuinely available.
  • A claim that is never received cannot strand stock: the claimant or the sender can release it back into the pool.
  • A partial receipt has to be a decision, not a silent loss — you either leave the rest claimed or release it in the same action.
  • The pool must be closeable while claims are still outstanding, so the sender can stop new claims without cancelling real ones.

That last point is why an open transfer has both a CLOSED and a RECEIVED state. Closed means no new claims. Received means every dispatched unit has been received or returned. A pool passes through the first on its way to the second, and a transfer that was fully claimed skips straight there.

Who may claim

By default a pool is published to the source's own region, because a pallet in Gurugram is not much use to an outlet in Bengaluru. You can open it organization-wide when the economics justify the freight. Either way, the claim is still checked against the viewer's data scope on the server: being able to see a pool is not the same as being able to pull stock into a location you do not run.

The people who know whether a product will sell are standing next to the shelf. The transfer flow should let them say so.

Direct transfers did not go anywhere — they are still the right tool when the destination is known. Open pools are for the other half of the job, the half that used to be done in a group chat.

See BluYards against your own data

Bring a product list and a week of sales. We will load it and show you which shelves would have been empty.