March 2026 · 10 min read

From Forecast to Floor Plan: Slotting a 15,000-SKU Warehouse with 3D Bin Packing

Worker using tablet to check warehouse storage inventory

After optimizing what to stock and how much, the next question was where to put it. A Czech 3PL had solved fill rates but hit a pick productivity ceiling at 65 picks/hour. The root cause: 62% of picks came from 3% of SKUs — scattered across all 8 warehouse zones. Velocity-based slotting with 3D bin packing lifted picks to 94/hour and cut walking distance by 45%.

The Setup

This is a follow-up to our earlier engagement with a 3PL near Ústí nad Labem. That project solved the macro problem: which SKUs get how much space, and which move to overflow. Fill rates went from 85% to 96%.

But pick productivity plateaued at 65 picks per hour despite adequate staffing. The bottleneck shifted from stock availability to physical layout.

The Problem: Category-Based Slotting

Warehouse cross-section: category-based vs velocity-based slotting

The warehouse was slotted by product category — all dairy in zone B, all beverages in zone D, all household in zone F. This ignored three realities.

Velocity mismatch: The top 500 SKUs generated 62% of all picks but were scattered across all 8 zones. A picker filling a typical 12-line order walked an average of 280 meters, crossing 4–5 aisles per trip. The golden zone (waist-height shelving near the packing station) was occupied by slow-moving premium items placed there years ago.

Space waste: Small fast-movers (snack bars, spice jars, cosmetics) occupied full pallet slots designed for bulk goods. A pallet slot holds 1.2 m³ but a case of spice jars needs 0.04 m³ — 97% wasted cubic space. Meanwhile, oversized items overflowed their assigned shelf slots into the aisle.

Co-pick blindness: Products frequently ordered together were in different zones. Pasta and pasta sauce: 120 meters apart. Cleaning spray and paper towels: 80 meters apart. Every co-pick added a full aisle crossing.

Step 1: Velocity Ranking

Golden zone placement by velocity class before and after

We already had per-SKU demand velocity from the forecasting engine. Enriching it with 6 months of actual pick data from Odoo confirmed the pattern: 3% of SKUs (Class A, top 500) drove 62% of picks. Before optimization, only 22% of Class A SKUs were in the golden zone. After: 91%.

Step 2: Co-Pick Affinity Analysis

From 180,000 historical order lines, we computed which SKU pairs appeared on the same order most frequently. The top 200 affinity pairs accounted for 18% of multi-line orders. Pasta + sauce co-occurred on 34% of pasta orders but sat 120 meters apart. Baby formula + wipes co-occurred on 41% of baby orders, 85 meters apart. After slotting, high-affinity pairs were placed in adjacent slots.

Step 3: 3D Bin Packing

SKU assignment by slot type before and after right-sizing

For each SKU, we computed the actual cubic space needed at peak inventory using the order_up_to values from the earlier engagement. Then we matched every SKU to the smallest slot type that fits: flow racks for high-velocity small items, shelf bins for medium goods, half and full pallets only for items that genuinely need them.

Before: 4,200 SKUs were in oversized slots. 800 overflowed their assigned space. After right-sizing, 1,100 pallet-equivalent slots were freed — new capacity without building anything.

Step 4: Slotting Optimization

Slotting optimization pipeline from forecast to Odoo

All three inputs — velocity ranking, co-pick affinity, physical fit — fed into the slotting optimizer. Class A SKUs went to the golden zone near the dock. High-affinity pairs were placed in adjacent slots. Heavy items moved to floor level. Temperature zones remained hard constraints.

The output: new slot assignments for all 15,000 SKUs, exported as a migration plan with priority waves. Odoo stock.location records updated, new Zebra shelf labels printed. Migration executed over 2 weekends with minimal disruption.

Results

Pick frequency heatmap by zone and tier before and after Pick path distance distribution before and after
Metric Before After Change
Picks per hour 65 94 +45%
Average pick path per order 280m 155m -45%
Golden zone: Class A coverage 22% 91% +69 pp
Cubic space waste per slot 35% 11% -24 pp
Mispicks per day 8 2 -75%
Pallet slots freed 1,100 new capacity

45% more picks per hour across 45 pickers is the equivalent of 20 additional workers without hiring. At approximately 180 CZK/hour fully loaded, that translates to around 540K CZK per month in productivity gains — roughly 6.5M CZK per year. The slotting project (analysis, 2 weekend migrations, new labels) cost under 200K CZK. Payback: 11 days.

The Full Stack

Layer What It Answers
Demand Forecast How much of each SKU will we need?
Reorder Points When should we order?
Service Level Optimization How much safety stock, given space limits?
Shift Planning How many people do we need each day?
Slotting + 3D Packing Where does each SKU go in the warehouse?

Same data foundation. Five different decisions optimized.