Let me be honest about our first reaction to affinity slotting. When someone first explained it to us, my thought was: great, another fancy term invented to sell software to big companies. We are a small warehouse. We cannot burn money like that. Three pickers, secondhand racks, a spreadsheet and a barcode scanner for a system. Then one afternoon I stood at the end of an aisle and just watched, and I realized we were paying for bad placement every single day.

That afternoon I counted. One order, three lines, three aisles. The insulated bottle lived on the east side, the bottle brush on the west side, the gift bag on the north side. Each SKU on its own looked fine where it was. But they kept showing up on the same orders, together. Our picker was not picking. He was touring the warehouse. And I had one thought: if these SKUs always ship together, why don't they live together?

That is what the method does. It uses order history to figure out which SKUs keep shipping together, then makes them neighbors. It sounds like enterprise science. The core idea is one sentence: stop making pickers cross the warehouse for a single order.

What Affinity Slotting Actually Measures

First, the confusion to clear up. ABC-style ranking answers which SKU ships fast. Affinity answers which two SKUs ship together. Those are two different questions, and one does not replace the other. We used to place everything by sales volume alone, and here is what that missed: two SKUs that are each merely average sellers can still cause more walking than a bestseller, simply because they always appear on the same order.

Here is a real example from our floor. We stock an insulated bottle and a bottle brush. Neither is a top seller on its own. But when we looked at the orders, more than half of the bottle orders also had a brush on them. The bottle sat at one end of an aisle, the brush at the other. Every order with both meant an extra trip. So we moved the brush to the slot next to the bottle. One order, one reach, one turn, both items in hand. It cost nothing. We just moved something.

The second example taught us the opposite lesson. Pet supplies: dog food, waste bags, and chew toys are a famous trio in our warehouse, with a high rate of shipping together. We got excited and packed all three tight against each other. Then one of the dog foods suddenly spiked. Replenishment, picking, checking, everyone crowded into the same two meters of shelving, and the aisle jammed solid. That day I learned: in affinity slotting, closer is not always better. Too close can start a fight.

A picker pulling items from two neighboring bins

Affinity Slotting the Cheap Way, in Three Steps

The big-company version needs slotting software and an optimization team. We have neither, so here is our version. Everything below runs in a spreadsheet.

Step one: pull the order history. Export the last three months of order lines, one row per SKU. The order number is the key, because SKUs on the same order share it. Three months is our sweet spot from experience: shorter and the pattern is noise, longer and you are reading old news. New products are a special case, and I will get to them.

Step two: count co-occurrence. With a pivot table or a COUNTIFS formula, count how many orders each pair of SKUs appears on together. Raw co-occurrence alone is not enough, because two bestsellers will naturally share plenty of orders and drown out the small pairs that are truly inseparable. So we calculate a simple affinity score:

Affinity = orders containing both SKUs / total orders of whichever of the two ships less often

Back to the bottle and the brush. Say the bottle shipped on 300 orders, the brush on 200, and they shared 180. Affinity is 180 / 200, or nine in ten. Nine times out of ten, the brush leaves the building in the company of the bottle. A pair like that has no business living apart. Meanwhile two bestsellers might share 500 orders but each ship thousands of times, giving them an affinity of maybe two or three in ten. Leave those alone. They are fine where they are.

Step three: rank the moves. Do not re-slot the whole warehouse at once. A small warehouse cannot absorb that chaos. We screen for the dozen or so pairs with the highest affinity, then check each one by hand: how different are the sizes, how different are the weights, will they interfere with each other? Move the clear winners first, watch for a while, then move the next batch.

Our decision framework is taped to the wall, and it looks like this:

Pair profile What to do
High affinity, both ship regularly Place in neighboring slots, handle first
High affinity, one ships rarely Move the rare one next to the busy one, but don't give it a prime spot
Middling affinity, only occasionally together Leave it alone
High affinity, but big size/weight mismatch or interference Don't force it, use "offset neighbors" below
New product, not enough orders yet Park it with similar items, run the numbers once data builds up

The Counterintuitive Part: Too Close Gets Slower

This is the trap here, and it is the one the enterprise playbooks rarely warn small warehouses about: SKUs that sit together attract people together. On a normal day, fine. But when one of them spikes, that stretch of shelving becomes the most congested spot in the building. Pickers queue for the same rack. The replenishment cart cannot get in. You end up slower than before you "optimized."

Our fix is what we call offset neighbors. Instead of gluing two SKUs side by side, we make them "one turn away." One sits on this side of the aisle, the other on the opposite rack in the same bay. The picker turns around and grabs it, no extra walking, and two people never block the same shelf face. Or we leave one slot between them, a slow-moving SKU as a buffer, so a spike does not jam everyone into one spot.

There is a second trade-off to accept. The more perfectly you tune affinity slotting, the more often you have to re-tune it. Today's golden pair can drift apart next month. Our rule: a small warehouse should not chase the perfect layout, it should chase one that is good enough and stable. Every move has to be genuinely necessary, and once you move something, give pickers time to settle in. Muscle memory is a cost too, and we cannot afford to burn it by reshuffling every month.

How Often to Re-Run It

We review once a month. At the start of the month, someone spends half an hour pulling fresh orders and checking whether the top pairs have changed faces. If nothing much moved, we move nothing. If something did, we move one or two pairs, tops.

Three situations earn an extra run outside the monthly rhythm. First, a new product launch. A new SKU has no history, so it starts parked with similar items by gut feel, and after about two weeks of orders it gets its own affinity calculation. Don't let it sit in the wrong spot by default. Second, a main SKU gets replaced or the supplier changes, which reshuffles the order mix. Third, a picker complains that "these few things keep shipping together and I'm tired of running." Take that seriously. The people on the floor spot the pattern before the spreadsheet does.

When you re-run the numbers, do one more thing: break up the pairs that have "split up." Some SKUs only shipped together because of a bundle promotion. The promotion ends, they go their separate ways, and they are still squatting in neighboring prime slots. Split them and free the space for a new pair. It is not a one-time layout. It is a living layout that follows the orders.

Here is the honest bottom line. This is not high technology. It is the common-sense observation that some products always leave together, made precise with order data, and then applied to the shelves. Big warehouses compute it with software. We compute it with a spreadsheet. The answer is the same. We have never bought a slotting optimization system. We just use this scrappy method, and our pickers walk far fewer wasted trips, with fewer wrong-slot and missed picks along the way. A cheap workaround is still a workaround that works.

Small warehouses have their own way of surviving.

By Xiao Ma, Small Warehouse Owner