The brief
A retail operator with a dozen outlets across Nairobi and two other counties was running three unconnected order systems. Stockouts in one outlet while another had surplus. Duplicate orders. A reconciliation nightmare at month end. They wanted one system — but built in a way that survived an MD who wasn't technical.
What we shipped
- A single order intake surface (web + WhatsApp) routed by branch, product availability, and customer history.
- An AI router that assigns each incoming order to the right outlet based on stock, distance, and driver load.
- M-Pesa STK Push and Paybill reconciliation that matches the books — automatically, nightly.
- An operator dashboard with the four numbers the MD actually cares about.
How we worked
We scoped fixed at ten weeks. Week one was a whiteboard pass — we drew the current order flow on a single page and circled every human hand-off. Nine of them were automatable. One wasn't, and we said so. Weeks two through eight were build, with a staging URL the operations lead could hit every morning. Weeks nine and ten were parallel-run — new system alongside old, with one outlet at a time cutting over.
Outcome
Ten weeks from first call to first live outlet. All twelve outlets across in four more weeks. The MD stopped getting WhatsApp messages at 7pm about missing orders inside the first month.
Order routing runs around ~1,800 orders a day now, with a human only touching the exceptions queue. Reconciliation closes same-day. The three-system tax is gone.
What we'd do differently
We underweighted the driver UX in the first build. Drivers hated the original app. We rebuilt it in week 14 with their input — should have been co-designed with them from day one. Every logistics build since then starts with a driver in the room.