Built for the warehouse floor

Barcode workflows, automated label routing, and recovery paths built for people moving quickly on a warehouse floor.

role design & implementation integrations USPS · UPS · FedEx · Endicia · Shippo · ShipEngine · Sendle

The situation#

Every channel the business sells on - the storefront, Amazon, eBay, Walmart, Newegg - eventually produces the same thing: an order that has to become a labeled box on a truck. At peak the business shipped well over 1,000 packages a day across multiple carriers, with inventory moving between a warehouse, FBA, and direct fulfillment. That volume does not tolerate ambiguity. A picker who grabs the wrong item, a packer who ships to the wrong address, or a system that buys the same label twice all cost real money and real customer trust, at a pace where there is no time to stop and think.

The people doing this work are not at desks. They are on their feet, wearing gloves, holding a scanner in one hand and a box in the other, under time pressure. The software has to meet them there.

The constraint#

The defining constraint is that the floor cannot pause for the software. An interface that requires reading, typing, or interpretation is an interface that will be misused at speed - not because the operator is careless, but because the environment does not allow care. Every interaction has to be reducible to a scan, a glance, or a single unambiguous confirmation.

The second constraint is that the operations are full of irreversible side effects. Buying a shipping label is both a financial transaction and a physical commitment. If a process times out after the carrier created the label, a blind retry buys a duplicate and pays for it twice. If local state is written too early, the system claims a shipment exists when it does not. Printers, output formats, marketplace tracking, and voids each add their own partial-failure boundaries. Correctness here is not about the happy path; it is about what happens when a step fails in the middle.

The design thinking#

For the interfaces, the answer was to make the correct action the only easy action. Barcode scanning removes typing entirely - the operator scans the item, scans the location, and the system confirms or rejects with an unmistakable signal. There is nothing to misread because there is barely anything to read. The mobile inventory tools follow the same rule: big targets, immediate feedback, and states that are obvious from across the room. This is frontend engineering, but the design brief is set by the floor, not by a style guide.

For the label layer, the answer was idempotency around the expensive step. Shipster persists intent with an idempotency key before purchasing a label, records the provider’s shipment identity and cost, transforms the output (PDF or ZPL) as the printer requires, sends it, and publishes tracking back to the sales channel. A timeout between purchase and record does not produce a duplicate; it produces a recovery path that knows a label was already bought. Carrier-agnostic design means USPS, UPS, FedEx, and the marketplace-specific flows all live behind one layer, so a carrier change is an integration detail, not a warehouse event.

Technical details

What a normal order looks like#

The vast majority of orders are completely hands-off. The order comes in, the system picks the carrier and service, buys the label, and prints it at one of two dozen printers in the warehouse. Which printer is the trick: printing an order at a particular location is how the floor sorts work, so labels for one area's shelves appear at that area's printer.

From there, the workflow is three scans. A team member grabs the label, scans it, and is pointed at the box. They scan the box, pack the order, and at the end of the day scan it out before handing it to the carrier. That's it. Tracking uploads itself to the marketplace, and if a customer cancels any time before the package leaves the building, the system buzzes on scan-out and tells the team to restock it instead.

That level of automation is why a small team ships fast with very few mistakes - and shipping speed is one of the metrics marketplaces reward directly, which shows up as customers who come back.

The Shipster shipment log: a chronological list of shipped orders with tracking, cost, and printer details, and the purchased UPS label rendered beside the selected row.
The shipment log - every package that left the floor, with its tracking, cost, and the exact label that printed. Most orders move through here without a human ever opening the order. (Synthetic data.)

The queue is for the exceptions#

Sometimes an order can't run itself. A new item has no physical attributes loaded yet, so the system can't weigh or rate it. A combined order has to be packed and weighed on a scale before anyone can quote postage. A bulk order needs a human decision. A flagged customer, an address that fails validation - those land in the processing queue, which is what the front-end is for. An operator opens the order, fixes whatever blocked it, quotes the rate, and sends it on its way. The queue keeps the exceptions visible and moving so the automation behind everything else never has to stop.

Why this is technically interesting#

The label purchase is only one of several irreversible steps, and each has its own failure boundary. Output transformation is one: a UPS label arrives as a PDF, but the floor's thermal printers speak ZPL, so the document is converted and rasterized per printer, and a printer that dies mid-batch must not silently lose work. Tracking publication is another: once a label prints, the marketplace expects a tracking number, and a publication failure after the box is on the truck has to be reconciled, not retried blindly - some channels penalize late or duplicate tracking events. Voids are the mirror image: an order cancelled after purchase must void the label with the carrier to recover the money, and the void itself can fail after the carrier accepted it. Every one of these steps follows the same discipline the diagram shows for the purchase: durable intent first, then the external action, then a record of what the other side actually did.

Label purchase with recovery (illustrative flow) 1. persist intent idempotency key 2. request label carrier API 3. record provider ref durable 4. transform PDF / ZPL 5. print + track publish to channel timeout between 2 and 3? query provider by idempotency keyA blind retry buys the same label twice. Durable intent + provider query makes the gap recoverable.
Distributed recovery path: timeouts query the carrier for the idempotency key rather than blindly repurchasing the label.

The retrospective#

What held up: designing for the environment instead of the ideal user. The interfaces that survived years on the floor are the ones that assumed the operator was busy, gloved, and one-handed - and the scanning workflows virtually eliminated the mis-ship errors they replaced, not by making people more careful but by removing the opportunity to be wrong. What I would do earlier: the idempotency discipline. The first version of the label flow learned about duplicate purchases the expensive way; the idempotency key and the recovery path should have been there from the first carrier.

The automation only survives because the boring parts are engineered to be untrusting: every step assumes the step before it can fail mid-flight, and knows how to find out what actually happened. That is the difference between automation that runs for years and automation that runs until the first bad afternoon.

The lesson that generalizes is that operator interfaces are a different discipline from consumer or back-office software. The measure is not how the screen looks in a screenshot; it is whether a tired person at the end of a long shift, moving fast, gets the right result anyway. Everything on this site about reliability and recovery shows up here in physical form - a wrong number in a ledger is a problem, but a wrong box on a truck is a customer who does not come back.