← Home

Case study

WarehouseFlow

How a paper-based outbound operation moved onto a platform the warehouse used every day. I wrote the requirements, designed the workflow and owned the testing.

My role
Requirements, workflow design, testing, pilot rollout
Built with
AI coding tools (Gemini, Cursor, Codex) wrote most of the code
In production
April – August 2026
Users
~10 daily: warehouse workers and office staff
Stack
Firebase · Vercel · daily API import from the company WMS

Quick read: 1 · 2 · 3 · 6 (~3 min)

01

Before: outbound ran on paper

The operation handled B2B fulfillment for 50+ accounts and 1,000+ SKUs: 1,000+ orders a day, up to 3,000 at peak, shipping to Best Buy, Costco, Walmart and Target under each retailer's routing guide.

Orders were printed on paper and handed to workers. That caused six problems:

Order card for ORD-9042 showing customer, priority, stage, bin locations and quantities.
Left: a recreated paper order sheet (illustration). Right: the same order in WarehouseFlow.

02

The system at a glance

Every feature sits somewhere on this map. Section 3 walks one order through it.

Standard order

  1. Company WMS · daily import
  2. Order pool
  3. Pick
  4. Pack & scan
  5. Dimensions & weight
  6. Ready
  7. Outbound schedule
  8. Shipped

Retail wave (section 4) · joins at Ready

  1. Batch pick · several POs
  2. Sort & label by DC / PO
  3. Palletize per DC
  4. Dimensions & weight per pallet
  5. Ready

Managers, throughout: live dashboard · exception queue with per-stage time limits · nightly and weekly reports by email

03

Follow one order

One standard order, from import to departure. The demo is this same order.

  1. 1 Imported, then in the pool

    The day's orders arrive from the company WMS and land on one board, in the same layout.

    What the import checks

    Each order comes with SKUs, bin locations, quantities and notes, and gets a result: created, skipped or failed. Duplicates are skipped, and an order with missing detail fails instead of showing up empty. The manager sees it on the board with its customer, priority and stage.

    Order board with the first three stage columns; the ORD-9042 card is outlined.
    Imported orders land on the board in one layout (ORD-9042 outlined).
    1. 2 Assigned, then started

      The clock starts when the worker presses Start, not when the task is assigned.

      Who starts the task

      The manager assigns it, or a worker claims it from the shared pool. Work can be paused, and a reassigned task keeps the time already spent on it.

      Phone screen of a worker queue with a Start button next to ORD-9042.
      The clock starts at Start, not at assignment.
    2. 3 Pick

      The worker's screen shows each bin location and quantity.

      Phone pick screen showing bin locations and quantities.
      Bin location and quantity, read from a phone.
    3. 4 Pack and scan

      Each SKU is scanned at packing, and a wrong one is blocked.

      How the check works

      Each distinct SKU is scanned once, and the task can't be completed until every SKU checks out.

      Phone packing screen showing "Wrong SKU: AURA-PRO-02" and a disabled verify button.
      A look-alike SKU is blocked at packing (outlined in red).
  2. 5 Dimensions & weight, then Ready

    When packing is done, and dimensions and weight if the order needs them, the order shows Ready.

    The D&W and Ready columns, with ORD-9042 outlined in Ready.
    The order reaches Ready (outlined).
  3. 6 Matched to the outbound schedule

    The shipping schedule checks the order against live progress on the floor.

    What the flags mean

    Every order is flagged as ready, in process, at risk, overdue or unlinked.

    Outbound schedule header and the ORD-9042 row marked Ready.
    The schedule row reads Ready because the floor says so.
  4. 7 Shipped and reported

    The order moves to Shipped. Every night, the platform emailed an operations summary to my manager and me.

    The nightly summary email (illustration, fictional numbers).

04

The harder case: a retail wave

Retail orders for Walmart, Target and Best Buy shipped to several distribution centers under each retailer's routing guide. A simplified example: 3 POs bound for 2 distribution centers.

  1. 1

    Batch pick. One pick task covers all 3 POs.

  2. 2

    Sort & label. Items are grouped and labeled by distribution center and PO.

  3. 3

    Palletize. Pallets are built per distribution center: Dallas DC, 2 pallets; Atlanta DC, 1 pallet.

  4. 4

    Dimensions & weight. One task per pallet: 3 tasks.

Retail-wave screen with the Dallas DC pallet card.
A retail wave sorted by distribution center.

05

How I worked

I proposed every change, wrote the requirements and tested every release myself. AI coding tools wrote most of the code.

Where the requirements came from

From problems I dealt with every day running outbound.

Read more

I directed daily outbound operations, so the requirements came from problems I dealt with every day. I turned each one into a requirement, a workflow change or a process fix.

Why build it

The WMS stored the orders but couldn't run the floor.

Read more

The old process ran on printed orders handed to workers, so progress, volume and completion were hard to track, and there was no data for labor or customer- and SKU-level analysis. The existing WMS stored the orders but couldn't run the floor: no task tracking, no scan checks, and no way to use its data. So I built the layer it was missing.

Rollout

Piloted with one crew; issues fixed on the spot.

Read more

I piloted it with one crew. I demonstrated it, they used it while I watched, and I fixed issues on the spot. The team had been asking for a system, so getting people to use it was not the hard part. Daily users were warehouse workers and the office colleagues who handed work over to me.

How I tested

I tested every change by running the real process end to end, checking the data integration, delays and API responses.

A data-quality fix

Orders with missing detail failed the import instead of arriving empty.

Read more

The company WMS sometimes returned an order with no line detail, and the first version created an empty order, with no customer and no SKUs. I changed the rule: an order with missing detail now fails the import and is listed as failed, and re-importing fills it in.

What changed, and why

  1. Mar 2026

    Worker task screens, SKU scan check at packing, order import from the company WMS. Paper sheets were hard to read, and wrong or missing items were hard to catch.

  2. Apr 2026

    Launch. Board built around order progress, so anyone could see where every order stood. Orders with missing detail rejected at import, so an import that looked successful couldn't create an empty order. Assigning separated from starting, with pause, so processing times measured work, not waiting. Reassignment keeps elapsed time, because people were often moved between tasks.

  3. May 2026

    Shared order pool with a suggested next order, to cut time spent waiting for assignments. Scanner-friendly worker screens. Daily report by email, because management wanted a daily summary. Retail waves palletized by distribution center, because large retail orders shipped to several DCs under each routing guide.

  4. Jul 2026

    Outbound schedule linked to live warehouse progress. The shipping plan and the floor's actual progress didn't line up, which risked missed orders.

One requirement, written down

The packing rule from section 3, rewritten as a user story with acceptance criteria.

As a packer, I need the system to stop me from packing the wrong item, so the customer gets exactly what they ordered.

Show acceptance criteria
  • Given a standard order with two distinct SKUs, when I scan a SKU that is not on the order, then the scan is rejected with "Wrong SKU" and nothing is recorded.
  • When I scan each distinct SKU on the order once, then each one shows as verified.
  • Until every distinct SKU is verified, Complete Packing stays disabled.
  • Scope: each distinct SKU is checked once; units are not counted one by one.

06

Results

  • 0missed orders, April–August 2026, including Prime Day 2026
  • Hundreds → 1,000+daily orders, no added headcount, every shipment on time
  • 1–2 hrsof daily admin work saved
  • ~10daily users
BeforeAfter
Orders were hard to readEvery order in one consistent layout: SKU, bin location, quantity, notes.
Progress was invisibleReal-time status for every order, replacing paper status checks.
Mistakes were easy to missImport results flagged skipped and failed orders; the pack scan blocked wrong SKUs.
Orders could be missedZero missed orders from April to August 2026, including Prime Day 2026.
No data to plan the dayProcessing times recorded by the platform became part of my daily workload forecast and labor plan.
Workload was hard to seeWorker progress and bottlenecks visible in real time.

Also: nightly operations summaries and weekly management reports, emailed automatically.

07

Looking back

If I built it again, I would add three things from the start:

08

Walk the same order yourself

The demo is the real interface with fictional data. Watch the walkthrough, or follow the same order through 7 guided steps yourself, about 2 minutes.

One order from import to the outbound schedule.