Enterprise
ERP System Design: Lessons from the Trenches
Inventory state, reversals, reconciliation, and why an apparently successful screen update may still represent incomplete business work.
Separate availability from reservation
Inventory on hand, available inventory, and reserved inventory represent different facts. Model receiving, reservation, release, and dispatch explicitly. Reject a reservation when available quantity is insufficient.
Preserve corrections
Represent reversals and adjustments as traceable transactions. Do not silently replace historical financial or stock records. Use stable references to connect orders, goods movements, and invoices.
Reconcile the full workflow
A successful screen update is not proof of a completed operation. Reconcile commands, recorded events, and read models. Surface incomplete deliveries and failures so staff can resolve them without creating duplicate transactions.
These notes describe engineering patterns, not guarantees that a particular architecture or control is sufficient for every deployment.