Blog
How a Surabaya Distributor Tripled Order Throughput with Custom Odoo Workflows
A Surabaya FMCG distributor went from 90 to 280 orders a day in eight months without adding warehouse staff. Here's exactly what changed in their Odoo setup.
- narrative
A Surabaya-based FMCG distributor — five trucks, one warehouse near Rungkut, around twenty-eight people — came to us in early 2025 stuck at the same problem they’d had for two years. They were processing roughly 90 orders a day, and on busy days the warehouse left at 9 PM with picks still unfinished. They’d already tried hiring more pickers. The output went up briefly, then plateaued again, because the bottleneck was not muscle.
By September, they were running 280 orders a day with the same headcount, leaving on time, and turning down expansion offers because they wanted to consolidate first. The change cost them around Rp 180 juta in customization work over four months. What follows is what they did and why it worked.
The picture before
Their setup was already on Odoo Enterprise 17, with Sales, Inventory, Purchasing, and Accounting modules. The standard flow looked fine on paper. A sales rep entered an order. A picker grabbed a paper picking slip. The picker walked the warehouse aisles, found the products, brought them to packing, and packing scanned everything as the order shipped.
The reality on the warehouse floor was messier. Three problems compounded.
First, pickers were getting one order at a time. With orders averaging four to seven line items, each picking walk covered maybe forty SKUs of warehouse but only fetched five. The picker did this fifteen to twenty times a day, walking the same aisles repeatedly.
Second, the picking slip was sorted by the order in which the rep entered the products. That sequence had nothing to do with where the products lived in the warehouse. Pickers were zigzagging.
Third, every cancelled or modified order generated paperwork that someone had to manually reconcile against the picks already in progress. About a fifth of the orders got modified between entry and shipment. A real percentage of mistakes traced back to picks for orders that had already been changed.
What we changed
The implementation had four pieces, in roughly the order they were rolled out.
Wave picking with route optimization. We built a custom module that groups outstanding orders into “waves” — batches of 8 to 15 orders picked together in a single warehouse walk. The picker carries a tablet running the standard Odoo Inventory mobile interface, but the picking sequence is computed by us. Each wave’s pick list is sorted by aisle and bin location, not by the order in which the sales rep entered things. A wave that would have taken six separate walks now takes one.
The route-optimization piece is not magical. It’s a sort. But the sort uses a custom field on each warehouse location encoding its physical sequence in the picking path — aisle, side, height. We populated it over two weekends by walking the warehouse with a clipboard. The investment in that data made every subsequent pick faster, forever.
A modification lock window. We added a workflow rule: once a sales order is included in a picking wave, the sales rep can no longer modify it without explicit warehouse acknowledgement. If the customer calls in a change, the rep sees a warning that says “order is in wave 14, picking in progress” and has to either wait for the wave to complete or trigger a “warehouse re-route” workflow that pages the picker on their tablet.
This was less about technology and more about politics — we essentially formalized a rule that the warehouse manager had been trying to enforce informally for a year. Codifying it in Odoo made it stick.
Replenishment based on real picking velocity. The standard Odoo reordering rules are reactive — when stock drops below a threshold, generate a purchase order. For an FMCG distributor, that’s too late. We replaced the standard rules with a custom computation that looks at the last twenty-eight days of picks for each SKU and triggers replenishment earlier based on velocity rather than absolute level. SKUs that move ten units a day get replenished more aggressively than SKUs that move two. Stockouts at the time of picking — which used to derail roughly 6% of orders, requiring a sales call back — dropped to under 1%.
A picker performance dashboard. Each picker’s picks-per-hour now shows on a TV mounted in the warehouse, anonymized as P1 through P9. We expected this to be controversial. The pickers themselves loved it; one of the senior pickers told the owner he didn’t realize he was twice as fast as the rest. Within six weeks, the average rate had moved up significantly, with no one being scolded — visibility was enough.
The numbers
Across the four months of rollout (and four more months of optimization after), the measurable shifts:
Orders per day: 90 to 280, with the same warehouse headcount.
Average picking walk: 42 minutes for one order down to 38 minutes for a wave of 12 orders.
Stockout incidents at picking time: from roughly 6% to roughly 1%.
Warehouse close time on busy days: from 9 PM down to 5:30 PM, with rare exceptions.
The owner also told us, midway through the rollout, that two pickers who had been planning to leave for higher-paying factory jobs decided to stay. Their work had become more interesting and the dashboards made their effort visible. That was not a planned outcome and we don’t take credit for it, but it’s worth mentioning because it’s the kind of effect that doesn’t show up in a feature list.
What didn’t work
We tried two things that didn’t stick. A voice-picking interface (picker hears product names through a headset) was technically fun but slowed people down because the warehouse was too noisy. A real-time customer-facing tracker that showed exact picking progress was disabled after a month because customers started calling to ask why their wave 14 was processing slower than wave 13. Some transparency creates more questions than it answers.
What this took
In total, about Rp 180 juta of customization across four months. Two of our developers, one warehouse-experienced consultant who walked the floor with them weekly during rollout, and a lot of patience from the owner who let us measure things for six weeks before changing them.
If you’re sitting on an Odoo implementation that feels like it’s slowing your operation down instead of speeding it up, the gap is rarely in the software itself. It’s in the specific workflows that don’t quite fit your reality. We’d be glad to walk through your situation in a free one-hour conversation — bring a picking slip or a sales order, and we’ll show you where we’d look first.