Guide / design

Inventory management software design

Good inventory software design is a short list of decisions made in the right order: invariants before data model, data model before interfaces, and honesty about the maintenance tail before anything is built at all.

The key facts

  • The design order: invariants → data model → interfaces. Screens drawn before the model are rework with better typography.
  • The core invariant: on-hand equals the signed sum of movements, at every committed transaction — everything else is built on it.
  • The interface principles: readable density, state at list level, forms that refuse bad data before saving.
  • The honest exit: these decisions are exactly what maintained products have already made and survived — the build-vs-buy arithmetic prices the choice.
  • The full picture: how the inventory record works is the hub page for everything above.
Diagram — index of this pageThe ground this page covers
  1. 01The key facts
  2. 02The invariants come first
  3. 03The interface, designed around the work
  4. 04The decisions that make or break the build

The invariants come first

Design starts with the statements that must never be false, written precisely enough to test: on-hand for a variant at a location equals the signed sum of its movements; a movement always names an actor, a timestamp and a reason; a cancelled reservation returns its stock in the same transaction; no order ships beyond its allocation. Three to six such sentences are the real specification — features can be argued about, invariants are kept or broken.

From the invariants the data model falls out almost mechanically: products and variants, locations, an append-only movement table (the only thing that changes stock), orders and their lines, purchase orders, and the derived views — on-hand, on-order, reserved — that are computed, never stored as editable balances. The schema walkthrough builds it table by table, and the ER diagram draws the relationships.

Genuine BSimple screenThe BSimple stocktakes index at the count and review step.
The BSimple stocktakes index at the count and review step.

The interface, designed around the work

The unit of work in inventory software is the list — products, orders, receipts — so the design centres on lists that carry their own state: on-hand beside allocated beside on-order, order stage visible without opening the row. Forms are the second pillar, and their job is refusal: quantities that would oversell, movements without reasons, receipts against no order — stopped at entry, not discovered at the stocktake. Workflows are the third: receiving, counting, picking are repeated hundreds of times a week, so keyboard flow and sensible defaults beat novelty in every evaluation that involves an actual shift.

What the design should resist: consumer-style simplicity that hides operational columns. Hiding allocated stock from a list does not simplify the work; it moves it into someone's memory.

DiagramDiagram: spreadsheet data imported into live stock records.
Diagram: spreadsheet data imported into live stock records.

The decisions that make or break the build

Concurrency at the last unit. Two allocations, one remaining piece — resolved by database serialisation, not application optimism. The design answer must exist before launch, because the failure is discovered live.

The cancel path. Reservations release atomically; freed stock is promiseable immediately. Phantom allocations — the classic homemade-system bug — are a design flaw, not a runtime accident.

Deliberate approval. Stock deducts when a human approves the invoice, not when the order is typed; intent and fact stay separate.

The tail, priced before building. Hosting, patching, backups, and every future requirement — owned forever by the builder. These decisions are precisely what maintained products have already made and survived; the LLD companion takes this design to code level for those continuing, and the KPI layer shows what the finished system should be able to measure. We build BSimple, so weigh that: it implements this design as maintained cloud software from $180/month AUD — the trial is the full product, and the fastest design review available.

DiagramOrderPick and packInvoiceXero
Diagram: Order → Pick and pack → Invoice → Xero — how this work moves through BSimple.

Frequently Asked Questions

What are the key principles of inventory software design?

Invariants first (on-hand equals the signed sum of movements, always), an append-only movement table as the only writer of stock, derived quantities rather than editable balances, and interfaces built around lists, state and refusal of bad data.

How do you design the data model?

Products and variants, locations, movements, orders and lines, purchase orders — with movements append-only and quantities derived. The database-design walkthrough builds it step by step, including the batch and reservation extensions.

What makes the interface good for operations?

Density with discipline: lists carrying state at a glance, forms validating at entry, keyboard-speed workflows for repeated tasks. Hiding operational complexity is not simplicity — it is moving the work into someone's memory.

Should I design and build, or buy?

Design it on paper even if you buy — the requirements discipline is free and makes any vendor evaluation sharper. Build only if the tail (hosting, patches, future features) is priced and owned; otherwise adopt and trial on your own products.

What does good design enable later?

Everything layers cleanly on a movement-based core: batches, traceability, portals, per-customer pricing, reporting — additions rather than rewrites. That is the test of the design: growth without structural surgery.

BSimple

Get started with BSimple