Part 1 of 2
Cart Assignment — Level 1
Which cart does each order go on? This is the first problem to solve — and the most critical. Everything in Part 2 depends on getting this right.
Part 1 — Section 01

What Is Cart Assignment?

Before a single pick happens, every order must be assigned to a cart. The cart determines how many orders get picked together, what physical container they go in, and which packing lane they end up at. Getting the cart right is the foundation — if an order is on the wrong cart, everything downstream is wrong.

Step 1
Cart Assignment
Which cart does this order go on?
Step 2
Batch Optimization
Which orders share a cart? (Part 2)
Today
Sherry does Step 1 manually
Nobody does Step 2 — that is our opportunity

Why this comes first: Our Part 2 optimization algorithms batch orders within the same cart type. If an order is classified into the wrong cart type, it gets grouped with the wrong orders — and all improvement numbers become unreliable. Cart assignment must be confirmed before optimization results can be trusted.

Part 1 — Section 02

Cart Types & Capacities

LifeSeasons uses six cart types. Confirmed capacities come from the operations meeting. Estimated capacities are our best guess and need to be confirmed.

Mailer Cart
80 orders
120 for pre-kitted. Gray rolling open cart. For NeuroQ (NQ prefix), Symmetry (SKU 9085), My Best Heart bulk (>50 orders, <5 line items). (partially confirmed)
Pack-One Cart
~20 orders
Every bottle in the order is the same product. 1–12 bottles. Fastest pick — grab the whole box. (capacity estimated)
Green Cart
~20 orders
Small bag orders, 2–3 items. Uses auto-bagger. Cannot include restricted SKUs (272, 284, 503, 307, 317, 369). (capacity estimated)
Blue Cart
28 orders
Up to 28 bottles standard. Also used vertically (4 orders × 7 bins) for larger single orders. FIFO ordering. (confirmed)
Yellow Cart
variable
My Best Heart when volume is high enough. If low volume, goes on blue or mailer instead. (capacity not confirmed)
Red Cart
10 bins
Large orders, 29–80 regular-sized bottles. 10 bins per cart. Extra bottom bins can absorb overflow. (confirmed)

Auto-Bagger Exclusions — Confirmed List

These SKUs cannot go through the auto-bagger (too large, boxed, or crushable). They must be routed to blue or red carts instead of green. Confirmed by Ben:

SKU 272 SKU 284 SKU 503 SKU 307 SKU 317 SKU 369 SKU 505 — to confirm
Part 1 — Section 03

Sherry's Current Assignment Process

Sherry runs through these filters every morning in order. Each step pulls a group of orders and assigns them to a cart type. Whatever remains after all filters goes through size-based rules at the end.

Assignment happens in this exact sequence — order matters
Each step removes orders from the pool. Later steps see only what remains.
1
SLA / Priority Check
DTC orders (Shopify store in CustomField4) that came in before 3pm must ship today — processed first, every morning. After 3pm DTC goes next business day. Wholesale always goes next business day.
2
Brand / Channel Routing
NeuroQ (NQ order prefix, SKUs 9136/7/8) → mailer cart. Symmetry (SKU 9085) → mailer cart. My Best Heart (SKU 505/503) → yellow if high volume, else blue. NGVC → grouped together (Speed Cell 3). HC → grouped together, never with NGVC. Distributor orders → manually assigned separately.
3
Remove Restricted SKUs
SKUs 272, 284, 503, 307, 317, 369 cannot go in the auto-bagger. Pulled out before green cart assignment. SKUs 272 and 284 (large boxes) go on blue carts in vertical 4×7 configuration.
4
Pack-One Check
Every bottle in the order is the same product → pack-one cart (1–12 bottles). Fastest pick type — the worker grabs a full pre-prepped box from the pallet rather than hunting individual shelves.
5
Size-Based Assignment (remaining orders)
2–3 items, fits small bag → Green cart.   Up to 28 bottles → Blue cart.   29–80 bottles → Red cart.   >80 bottles → Mailer cart (bulk fallback). Blue can go vertical (4 orders × 7 bins) for larger individual orders. FIFO ordering on blue — oldest orders ship first.

Sherry also tries to create full carts wherever possible — a partial cart is inefficient because a worker walks the same distance for fewer orders. At end of day, leftover orders may go on any available cart rather than waiting.

Part 1 — Section 04

What We've Classified From the Data

Using the rules above (with estimated thresholds where values aren't confirmed), we classified all 930 usable orders from the ~10-day sample:

Pack-One Cart
483 orders (52%)
Proxy: 1 unique shelf location, qty ≤12. Capacity 44 (derived from historical data)
Green Cart
329 orders (35%)
2–3 distinct products, no restricted SKUs. Capacity 45 (derived from historical data)
Blue Cart
102 orders (11%)
Up to 28 bottles. Capacity 28 (confirmed)
Red Cart
13 orders (1.4%)
29–80 bottles. Capacity 10 bins (confirmed)
Mailer Cart
3 orders (<1%)
Rule: NQ-prefix orders or SKU 9085 (Symmetry). These 3 are >80-bottle fallback orders — NQ and 9085 orders not in sample. (partial)
Yellow Cart
0 orders
Rule: SKU 505 (My Best Heart, crushable). Batched on yellow when volume is sufficient, otherwise falls to blue. SKU 505 not in current sample. (untestable)

Important caveat: Pack-one detection is a proxy — we check if an order picks from exactly one shelf location. The real rule is whether every bottle is the same product, which is not always the same. Green cart thresholds and all estimated capacities need validation from LifeSeasons before this classification is reliable.

What We Have ✔ vs What We're Missing

What We Have (Solid) Status
Blue cart threshold (28 bottles) Confirmed by LifeSeasons
Red cart threshold (10 bins) Confirmed by LifeSeasons
Auto-bagger SKU exclusions (272, 284, 503, 307, 317, 369) Confirmed by Ben
D2C priority detection (hyphenated order number) Confirmed — matches CustomField4=OrderLogix in data
Brand separation (HC / NGVC / LS never mixed) Confirmed
Green cart blocks auto-bagger-excluded SKUs Implemented correctly
Yellow cart rule (SKU 505 — My Best Heart, crushable) Rule coded — SKU 505 not in current sample, untestable
Mailer cart rule (NQ prefix, SKU 9085 Symmetry, >80 fallback) Rule coded — NQ/9085 orders not in current sample, untestable
What We Don't Have (Gaps) Impact
Mailer channel criteria (NQ prefix, SKU 9085 / 505) Not testable — none in 10k sample. NeuroQ orders may be misclassified as green/blue.
Green cart capacity Max observed in historical data is 45. Needs confirmation from LifeSeasons.
Pack-one capacity Max observed in historical data is 44. Needs confirmation from LifeSeasons.
Pack-one = “same product” check We proxy via “1 shelf location.” An order with 2 products at the same location would be misclassified.
Green cart exact product limit (2 or 3?) The meeting said “2–3 items.” We need a single number to classify orders correctly.
SLA timestamp (order creation time) We capture pick time, not creation time — can't enforce the 3 pm same-day cutoff.
SKU 505 confirmation Ben said 505 goes to mailer, but 503 is on the exclusion list — same product family may need separate handling.

Brand Breakdown

Detected from item number prefixes — no guessing. Orders from different brands are never grouped into the same batch.

Health Concerns
44 orders
Items start with HC. In our sample all are wholesale (UPS Ground). Ben listed HC as a D2C channel — needs clarification (see Q3 below).
NGVC / Private Label
54 orders
Items start with PL-NGVC. Natural Grocers Vitamin Cottage. Stored on Speed Cell 3. Never mixed with HC.
LifeSeasons / Other
832 orders
All other brands (Femitry, Inner Eco, standard LS). Can share batches with HC or NGVC per Ben, but HC and NGVC never share a batch.

Priority Breakdown

Wave 1 — Urgent (DTC)
570 orders
Hyphenated order numbers (e.g. 4046858-3990825). All carry OrderLogix in CustomField4 in current data. Need updated export with Shopify store names.
Wave 2 — Standard
360 orders
Plain numeric order numbers. Wholesale (Sage) or blank CustomField4. UPS Ground shipping.
Part 1 — Section 05

Questions for LifeSeasons

Part 2 of 2
Batch Optimization — Level 2
Within each cart type, which orders get grouped together? Nobody does this today. Our algorithms tackle it — and the results are significant.
Part 2 — Section 01

What Is Batch Optimization?

Once orders are assigned to a cart type (Part 1), there is a second decision: within that cart type, which specific orders get grouped into one batch? For example, if you have 100 blue cart orders, you need roughly 4 batches of 28. Which 28 go together in each batch?

Sherry does not currently optimize this. She assigns orders to batches based on what fits — not on which orders are physically closest on the shelves. This is the gap our algorithms fill. Grouping orders that pick from nearby shelf locations means the worker walks a shorter total distance per batch.

930
Orders tested
~10 days of real LifeSeasons data
1,563
Shelf locations
Mapped with pick sequence numbers
4
Algorithms tested
vs. WMS and random baseline
Part 2 — Section 02

Route Cost Model

We do not have the physical warehouse floor plan yet. As a proxy, route cost is:

Route Cost = 2 × max pick sequence in batch Walk from depot (seq = 0) to the farthest shelf location and back. Applied identically to all methods including WMS.

Known limitation: Pick sequence numbers do not capture cross-aisle travel or real warehouse geometry. The relative ranking of algorithms is reliable. The absolute improvement percentages will change once we have real walking distances from the floor plan.

Part 2 — Section 03

The 4 Algorithms We Tested

Each algorithm runs independently on orders of the same cart type, brand, and priority. Green cart orders are never mixed with blue cart orders. HC orders are never mixed with NGVC orders.

Baseline

Jaccard Greedy

  • Seed batch with farthest-location order
  • Fill by shared location overlap score
  • Fast, simple, good comparison baseline
Enhanced

RAG — Routing-Aware Greedy

  • Same seed as Jaccard
  • Screen top-15 by Jaccard similarity
  • Pick the one that adds the least route cost
Winner

Clarke-Wright Savings (CW)

  • Calculate savings from merging every pair of orders
  • Merge highest-savings pairs first
  • Industry-standard vehicle routing algorithm
  • Best performance across all metrics
Variant

CW + Consolidation

  • Run CW, then merge small batches to fill carts
  • Slightly worse than CW alone with smaller cart sizes
  • Not recommended for current capacity profile
Part 2 — Section 04

Results

All numbers use real LifeSeasons data (930 orders, ~10 days). Per-cart-type capacities applied. Brand and priority grouping enforced. Lower average route cost = less walking = better.

Average Route Cost Comparison
Lower bar = less walking = better. Scaled to Random baseline (52,823).
Random (no system)52,823
Baseline
no optimization — random grouping within cart types
WMS (current system)51,901
+1.7% vs Random
current production — barely better than random grouping
Jaccard Greedy38,915
+26.3% vs Random  |  +25.0% vs WMS
location-overlap grouping
RAG (Routing-Aware Greedy)38,915
+26.3% vs Random  |  +25.0% vs WMS
marginal cost minimization
Clarke-Wright Savings  Best31,774
+39.8% vs Random  |  +38.8% vs WMS
pairwise savings merging — clear winner
CW + Consolidation33,884
+35.9% vs Random  |  +34.7% vs WMS
slightly worse than CW alone — consolidation merges orders from different shelf areas
MethodAvg Route Costvs Randomvs WMSStatus
Random (no system) 52,823 baseline No optimization
WMS (current) 51,901 +1.7% better baseline In production
Jaccard Greedy 38,915 +26.3% better +25.0% better Tested
RAG (Routing-Aware Greedy) 38,915 +26.3% better +25.0% better Tested
Clarke-Wright Savings 31,774 +39.8% better +38.8% better Top Performer
CW + Consolidation 33,884 +35.9% better +34.7% better Tested

Clarke-Wright is the clear winner — 38.8% better than the current WMS on average route cost. Note that the WMS was free to mix priority 1 and priority 2 orders in the same batch, while our algorithms are constrained to never mix priorities. Despite this handicap, CW still wins by 38.8%, making the result stronger than it appears.

Part 2 — Section 05

Limitations & What's Next

The Distance Problem

Route cost is currently 2 × max pick sequence. This assumes location 10,000 is exactly double the distance of location 5,000 — not true in a real warehouse with aisles, cross-aisle travel, and physical geometry.

Fix: replace pick sequence with real Manhattan distances from the actual warehouse floor plan. All four algorithms immediately improve, and numbers become exact rather than approximate.

What We Need for Part 2 to Be Exact

Current State vs After Answering Open Questions
Right Now
Pick-sequence proxy for distance
~10 days of historical data
Pack-one / green / mailer capacity estimated
Cart assignment rules partially confirmed
CW already 38.8% better than WMS
After Open Questions Answered
Confirmed cart classification for all order types
Exact capacities for every cart type
Accurate D2C / SLA detection with order creation time
Real warehouse geometry for exact distances
Confirmed dollar figure on labor savings per day