Warehouse Management Software Development

Build custom app solutions with Scrums.com's expert development team. With an NPS (Net Promoter Score) of 82, Scrums.com crafts cost-effective, custom applications that drive results.

Engineering teams building Warehouse Management Systems for 3PLs, distribution centres, or e-commerce fulfilment operations deal with a set of operational data problems that compound at scale: put-away task assignment that must minimise travel while respecting location constraints, pick wave optimisation across hundreds of concurrent orders, short-pick handling that does not hold up an entire wave, and task interleaving that uses worker deadhead time for productive work. Scrums.com builds dedicated teams for your WMS domain: engineers who design location management schemas, wave optimisation algorithms, task dispatch engines, and carrier integration layers. Every architecture decision is made to serve software companies building fulfilment infrastructure, not the consumer placing a single order.

Receiving, Put-Away, and Location Management Architecture

Warehouse locations are the foundational reference table. A warehouse_locations table stores every bin: zone, aisle, bay, level, bin label, location type (RECEIVING, STORAGE, PICK, BULK, STAGING, SHIPPING), capacity in units, capacity in kilograms, and current utilisation. Location type constrains what operations can reference each location: picks can only draw from PICK and STORAGE locations; put-away targets can include BULK and STORAGE but not SHIPPING. This constraint lives in configuration, not application code, so warehouse operators can restructure zones without a deployment.

Inbound shipments generate an ASN (Advanced Shipping Notice) with expected items and quantities. When a shipment arrives, the receiving workflow proceeds: dock assignment, carton or pallet scan, item scan with quantity, optional quality check, and put-away task generation. Each step writes to a receiving_events append-only log. Put-away tasks reference a source location (RECEIVING dock) and a target location determined by the slotting algorithm: fast-moving SKUs are slotted to pick faces near packing stations, heavy items are placed at floor level, and frequently co-picked items are slotted adjacent to each other. Slotting rules are stored in a slotting_config table and evaluated at task generation time rather than hardcoded.

Location inventory is a materialised view derived from a warehouse_movements append-only table: every put-away, pick, replenishment, and transfer writes a movement row. Current stock per location per item per lot is always derived from this ledger, never from a mutable quantity field. This means location audit trails are complete, historical location states are reconstructable, and discrepancies between expected and actual are investigated through the movement log.

Pick, Pack, and Ship Operations

Pick waves batch multiple orders together for efficient picking. A waves table holds orders included, pick method (SINGLE, BATCH, ZONE, CLUSTER), and status. Within a wave, pick tasks are sequenced by location to minimise travel distance: a nearest-neighbour heuristic for standard operations, an OR-Tools VRP solver for high-volume operations with complex aisle layouts. Each pick_task records wave ID, order ID, item ID, lot ID, pick-from location, required quantity, and is assigned to a picker via the task dispatcher. Actual quantity picked is recorded on completion; any short pick (actual quantity less than required) generates a short_pick_event that triggers either a re-pick from an alternative location or a backorder creation against the order line.

Packing tasks receive the picked items for an order, apply cartonisation logic (box type recommended from pre-configured box_types based on item dimensions and weights), record final weight and dimensions, and generate a shipping label. Carrier rate shopping runs at label generation: rates are fetched from configured carriers via EasyPost or direct APIs, and the cheapest qualifying service level is selected, or overridden by a customer-account-level preference stored in account_shipping_rules. The tracking number and label URL are written to the shipping_tasks record and pushed back to the OMS.

Warehouse management systems like these are built and delivered by dedicated engineering teams through our mobile app development service.

Task Interleaving and Labour Management

Deadhead travel (a worker moving empty-handed between tasks) is the primary source of lost productivity in a warehouse. Task interleaving reduces it by dispatching the most productive available task near the worker's current location when they complete their current task, regardless of task type. When a picker completes a pick task, the task dispatcher queries the task_pool for OPEN tasks within a configurable proximity radius, ranked by priority and estimated travel time. A nearby put-away or replenishment task is often dispatched instead of sending the worker back to the start of the next pick wave.

The task pool is a single table covering all task types: PUT_AWAY, PICK, REPLENISHMENT, CYCLE_COUNT, and TRANSFER. Each task carries task type, priority, location ID, estimated duration, and status (OPEN, ASSIGNED, IN_PROGRESS, COMPLETE). Worker sessions record start, end, tasks completed, lines picked, and error count. A productivity_kpis materialised view computes lines picked per hour, error rate, and tasks completed per shift (per worker, per zone, per shift), refreshed at shift end for supervisor review.

Labour standards are defined in a labour_standards table: engineered time in minutes per task type. Variance from standard, measured as (actual time minus standard time) divided by standard time, is computed per worker per task type over a rolling period. Workers whose variance exceeds a configurable threshold surface in the labour management dashboard for coaching or re-training review. Replenishment triggers fire automatically when a pick face (PICK location) reaches minimum quantity threshold, creating a replenishment task to pull stock from the bulk reserve before a picker arrives at an empty location.

Integrations, Returns Processing, and Warehouse Analytics

OMS integration drives the fulfilment lifecycle. Inbound orders from the OMS create fulfilment_orders in the WMS; status updates (PICKED, PACKED, SHIPPED) are pushed back via webhook on each task completion. The OMS never needs to poll for status: every state change in the WMS triggers an outbound event. ERP integration publishes stock journal entries from warehouse movements and goods receipt confirmations that match to purchase order receipts in the ERP. An integration_log records every inbound and outbound message with status and retry count.

Returns processing starts with a Return Authorisation (RA) that pre-registers the expected return before the item arrives. When the item is scanned at the receiving dock, the returns inspection workflow runs: condition assessment drives a disposition decision from a typed enum (RESTOCK, QUARANTINE, DISCARD, RETURN_TO_VENDOR). Restocked items write warehouse movements and immediately update location inventory. Quarantined items create a quality_hold record and are moved to a quarantine location; they are excluded from available stock until the hold is resolved.

Warehouse analytics are built as materialised views over append-only event tables. The warehouse_kpis view computes: orders shipped per day, on-time shipment rate, pick accuracy rate (correct items and quantities on first pick), receiving cycle time (dock arrival to put-away completion), dock-to-stock hours, and space utilisation by zone. These KPIs refresh nightly and are available via API for BI dashboards. No KPI logic lives in application code: the views are the single source of definition for each metric.

Frequently Asked Questions

How does the slotting algorithm assign put-away locations?

Slotting rules are stored in a slotting_config table and evaluated at task generation time. Fast-moving SKUs (high pick frequency) are assigned to pick faces nearest to packing stations to minimise travel. Heavy items are placed at floor level. Items that are frequently co-picked are slotted adjacent to each other. Operators update slotting rules by changing config table rows: no application deployment is required to restructure zones.

How does task interleaving reduce warehouse labour costs?

When a worker completes a task, the dispatcher queries the task pool for the highest-priority open task within a proximity radius of their current location, regardless of task type. A worker who just finished a pick is often dispatched to a nearby put-away or replenishment task rather than walking empty-handed back to the start of the next pick wave. Deadhead travel (moving without doing productive work) is the largest recoverable waste in most warehouse operations.

How does the WMS handle short picks without holding up a wave?

When a picker records an actual quantity less than the required quantity on a pick task, a short_pick_event is generated immediately. The system evaluates whether an alternative location holds sufficient stock for a re-pick and, if so, creates a new pick task for that location. If no alternative is available, the order line transitions to a backorder and the rest of the wave continues without interruption. The short pick event is flagged for inventory review to investigate the discrepancy.

How does returns processing maintain inventory accuracy?

Returns are pre-registered via a Return Authorisation before the item arrives. When scanned at receiving, an inspection workflow determines disposition. Restocked items immediately write warehouse movements and update location inventory through the same append-only ledger as all other movements; there is no special path for returns that could bypass the audit trail. Quarantined items create a quality hold and are moved to a quarantine location excluded from available stock until resolved.

How does carrier rate shopping work at the packing station?

Carrier rate shopping runs at label generation: rates are fetched from configured carriers via EasyPost or direct APIs, and the cheapest qualifying service level is selected, or overridden by a customer-account-level preference stored in account_shipping_rules. The tracking number and label URL are written to the shipping_tasks record and pushed back to the OMS via outbound webhook on task completion, without the OMS needing to poll for status.

Want to Know if Scrums.com is a Good Fit for Your Business?

Get in touch and let us answer all your questions.

Book a Demo

Don't Just Take Our Word for It

Hear from some of our amazing customers who are building with Scrums.com Teams.

"Scrums.com has been a long-term partner of OneCart. You have a great understanding of our business, our culture and have helped us find some real tech rockstars. Our Scrums.com team members are high-impact, hard working, always available, and fun to have around. Thanks a million!"
CTO, OneCart
On-demand marketplace connecting users and top retailers
"The Scrums.com Team is always ready to take my call and assist me with my unique challenges. No problem is to big or small. Great partner, securing strong talent to support our teams."
CIO, Network
Leading digital payments provider
"Finding great developers through Scrums.com is easier than explaining to my mom what I do for a living. Over the past couple of years, their top-tier devs and QAs have plugged seamlessly into Payfast by Network, turbo-charging our sprints without a hitch."
Engineering Manager, PayFast by Network
A secure digital payment processor for online businesses
"Our project was incredibly successful thanks to the guidance and professionalism of the Scrums.com teams. We were supported throughout the robust and purpose-driven process, and clear channels for open communication were established. The Scrums.com team often pre-empted and identified solutions and enhancements to our project, going over and above to make it a success."
CX Expert, Volkswagen Financial Services
Handles insurance, fleet and leasing
"The Scrums.com teams are extremely professional and a pleasure to work with. Open communication channels and commitment to deliver against deadlines ensures successful delivery against requirements. Their willingness to go beyond what is required and technical expertise resulted in a world class product that we are extremely proud to take to market."
Product Manager, BankservAfrica
Africa's largest clearing house
“Scrums.com Team Subscriptions allow us to easily move between tiers and as our needs have evolved, it has been incredibly convenient to adjust the subscription to meet our demands. This flexibility has been a game-changer for our business. Over and above this, one of their key strengths is the amazing team members who have brought passion and creativity to our project, with enthusiasm and commitment. They have been a joy to work with and I look forward to the continued partnership.”
CEO & Co-Founder, Ikue
World's first CDP for telcos
“Since partnering with Scrums.com in 2022, our experience has been nothing short of transformative. From day one, Scrums.com hasn't just been a service provider; they've become an integral part of our team. Despite the physical distance, their presence feels as close and accessible as if they were located in the office next door. This sense of proximity is not just geographical but extends deeply into how they have seamlessly integrated with our company's culture and identity.”
SOS Team, Skole
Helping 60k kids learn, every day
"Scrums.com joined Shout-It-Now on our mission to empower young women in South Africa to reduce the rates of HIV, GBV and unwanted pregnancy. By developing iSHOUT!, an app exclusively for young women, and Chomi, a multilingual GBV chatbot, they have contributed to the critical task of getting information & support to those who need it most. Scrums.com continues to be our collaborative partner on the vital journey."
CX Expert, iShout
Empowering the youth of tomorrow
"Scrums.com has been Aesara Partner's tech provider for the past few years; and with the development support provided by the Scrums.com team, our various platforms have evolved. Throughout the developing journey, Scrums.com has been able to provide us with a team to match our needs for that point in time."
Founder, Aesara Partners
A global transformation practice

Find Related App Types

Lead Management App

Remote patient care app

Invoicing App

Courier Delivery App

Mining app

Bookkeeping App