Project Detail
Retail Inventory Command Center
The client ran inventory across stores, a warehouse network, and a growing ecommerce channel. Stock truth lived in three systems and a collection of spreadsheets that were “almost right.” Nightly jobs produced a number that operations used until mid-morning, after which people trusted the person who shouted loudest on the floor.
TechCriti was asked to “build a dashboard.” After the first critique week we refused that framing. A dashboard on top of conflicting sources would only make the argument more colorful. The work became a product: a command center fed by events, with a written contract for every producer, and a user experience designed for people who are already busy.
What we changed
We introduced an inventory domain service that accepted receipts, adjustments, sales, and transfers as events. Producers had to declare their payload version. Consumers — the console, allocation jobs, and later the ecommerce availability API — subscribed to the same stream. When a store counted a shelf, the count was a first-class event, not a cell in a file named final-final.
The interface is exception-first. Green rows do not compete for attention. Buyers and store leads see aged discrepancies, stalled transfers, and items that are selling faster than replenishment can move. Each card links to the event history so a human can see why the system believes what it believes.
Delivery shape
A mixed squad of client operators and TechCriti engineers sat in the same critique. We shipped a thin slice to one region, watched the night process, and only then expanded. Observability was part of the first release: lag on the stream, poison messages, and a playbook for when a producer went silent.
Handover included decision records, a contract catalog, and a quality suite that fails the build if a producer ships a breaking change without a version bump. The client’s team now extends the console without calling us for every filter.