Devesh ShirsathProduct DesignerDevesh Shirsath

Designing for Efficiency

Helping warehouse teams catch bad stock before it ever reaches a customer's order.

  • Omniful

    Company

  • 6 → 4

    steps per failed item

  • Zero

    mode switches

  • PDA + RTL

    not ported from web

Adjust Inventory, the product

Project Overview

Objective. Let warehouse operators catch expired or damaged stock on a routine check, before a live customer order finds it.

Industry
B2B SaaS · Warehousing & fulfilment
Platform
Handheld scanner (PDA), Arabic RTL
Tenure
~1 month
Tools
Figma
Team
  • Devesh (me)Product Designer
  • 3Engineers
  • 1Onsite Product Manager

What I delivered

  • Owned the design end to end, from the problem to the shipped flow.
  • Mapped why bad stock was only found mid-order, and what the scanner could handle.
  • Designed 4 iterations for the handheld scanner, in Arabic RTL.
  • Tested them with warehouse labourers on recorded sessions.
  • Found the pattern that reshaped the flow: pickers spot bad items first, then decide.
  • Chose not to ship the fastest version, because disposal can't be undone.
  • Shipped iteration 2, and documented 3 and 4 for later.

What Omniful does

Omniful

Omniful makes software that runs warehouses: the stock on the shelves, the pickers and the orders that leave each day.

Adjust Inventory · part of Omniful

A quality check flow in Omniful's handheld scanner app, so operators catch bad stock before a customer's order does.

01Problem Framing

The Problem: Bad Stock Was Only Found During Live Orders

Warehouse operators had no way to flag expired or damaged stock until a live customer order sent them down that aisle. I designed Adjust Inventory, a QC flow that lets them check stock on their own schedule, on a handheld scanner, at the speed they actually walk.

How One Expired Milk Packet Halves An Order

Peak evening rush. A customer orders four packets of milk and a bag of tea. ₹250. A picker walks to the shelf, two minutes, scans the cart, the bin, then the milk.

The device flashes back: expired.

He marks it failed. What leaves the warehouse is one bag of tea. ₹100 out of a ₹250 order.

Nobody did anything wrong. The picker followed process, the system worked as built. But the customer got half an order, the warehouse spent full delivery cost on it, and upstream, someone had badly overestimated how much milk this zone would sell before it expired.

Old vs New: Checking Stock Before Orders, Not During Them

The old and new adjust inventory journeys, side by side

02Research

Why Bad Stock Was Only Ever Caught Mid-Order

Because the only trigger for an inventory check was a live order. Every discovery of bad stock was also, by definition, a live failure.

Four things broke at once, every time:

  • Customer gets a partial order.
  • Full delivery cost on half the order value.
  • Picker’s trip wasted.
  • Bad stock still counted as sellable.

The fix had to break that dependency. Check stock during a quiet hour, not the customer’s dinner hour.

3 Constraints: The Device, Two Product Types, Two Destinations

The device.

Handheld PDA, low resolution, physical scan trigger. Across thousands of items a day, one extra tap is not a small thing.

Two product types.

Serialised items scan clean, one barcode each. Non serialised items need a batch number and a keyed quantity. One flow had to hold both.

Two destinations for bad stock.

Returnable items go to a failed bin, headed back to the seller. Expired milk goes to disposal. Irreversibly.

Iterations 2 and 3 of the flow, with their screens

03Ideation & Testing

First Attempts: Pick The Action First, Then Scan

The obvious thing. Ask what they want to do, then let them do it.

I also tried a swipe based version, left or right per item. Felt fast, but it still repeated the bin scan on every item, so the bottleneck never moved.

Both assumed a tidy day, one problem type at a time. Real shelves aren’t tidy. A disposable item sits next to a returnable one, and switching between them meant backing out and starting over.

  1. Location
  2. SKU
  3. Bin
  4. Reason
  5. Confirm

Testing Showed Pickers Spot Bad Items First, Then Decide

We put the prototype in front of actual labourers, supervisors recorded the sessions, our PM watched onsite.

I had assumed pickers decide the action first, then find matching items. They don’t. They walk the aisle, spot failed items with their own eyes, and only then expect to clear them, usually several at once.

The flow was action driven. The people using it were intent driven. No amount of trimming taps inside iteration 1 would have closed that gap.

04Final Design

What Shipped: Scan First, Then Dispose Or Fail On One Screen

I flipped the order of operations.

Scan location, item, bin first. No decision upfront. Once the item is on screen, two actions sit right there: dispose or mark as failed.

Same screen, every time. A picker handles mixed stock back to back and never exits to switch modes. The decision happens where it naturally happens, after they’ve looked at the item.

Home, with Adjust Inventory among the warehouse tasks
Scanning the destination bin

Two Faster Versions We Explored

Two more versions, both faster on paper.

Tag the bin, not the item. Tag a bin as failed or disposal once at the start of a run. Every item scanned after inherits it.

Let the reason decide the action. Reasons like expired route themselves. No tap at all.

Why We Didn’t Ship The Fastest: Disposal Can’t Be Undone

Because we tested it and watched it fail quietly.

When the system decided on its own, users didn’t register which action had been taken. And disposal isn’t reversible. There’s no undo on a bin of milk that already went out.

Iteration 4 removed the last checkpoint that made the flow safe. Faster and worse.

We shipped iteration 2 instead, and documented 3 and 4 for once we design a proper confirmation and undo layer.

05Launch & Impact

The Result: Bad Stock Caught Hours Before An Order

Back to that evening rush. Four packets of milk, a bag of tea, ₹250.

Now the milk gets caught on a routine check hours before the order exists. The picker never fails an item mid-order. The customer gets what they paid for. And the buying team learns the stock went bad while there’s still time to act, not after a rider is on the road.

Directional outcomes: operation time down · labour cost down · inventory accuracy up · discrepancy cancellations down · scanning replacing typing · RTL ready from day one

What I Learned: Align With Partner Teams Early

Working closely with partner teams reinforced the value of shared thinking. Aligning early and often helped us create a more cohesive experience, where the product felt consistent and intentional across touch points.