For a e-commerce product, our fulfilment turnaround was too slow for our users. I identified the issues of duplicated input and misaligned output on our fulfilment system, which contributed to the inefficient fulfilment process. Upon revamping the workflow on order management processes and API integration with our warehouse partner, we achieved the following results:
42→14 steps from creating products to inbound
3 days→1 day per order handling time
After the UX revamp on the product listing page on customer-facing web-app, the conversion rate has been doubled, but retention is still quite low. We spoke with a few current users, and long fulfilment turnaround time seems to be the issue. Many finished their first purchase, and never returned. End customers accepts 2 to 3 weeks delivery as long as the price is low enough. But it’s certainly unacceptable for social sellers as they purchase in bulk, and their cash flow is limited.
We also observed a turnover in the ops team. No teammate in ops stayed more than 2 months. It’s because of the repetitive and inefficient fulfilment process that triggered their decision. The fulfilment turnaround has become a critical gap to both internal and external stakeholders.
There are 2 facets to the gap:
1. Duplicated input of the same piece of data
The same piece of data, like like product names, SKUs, prices, has to be input multiple times at different stages of the fulfilment process over multiple disconnected systems.
2. Misaligned system output
Displayed records and exported spreadsheets requires manual updates, and even out-of-system tracking in order to fit the needs of each business units:
Products can be added or updated individually. There‘s a bulk upload template, which can be filled with multiple products info. By uploading the template to our fulfilment system, those products would be added or updated. However, due to redundant fields on the bulk upload template, the ops team opted for individual upload over bulk upload. When they absolutely have to upload with bulk template, they built their own separate converting spreadsheet.
What does it mean by redundant fields? As our fulfilment system utilised Sailor, an open-sourced order fulfilment system, there were defaults that aren’t applicable to the current business. The ops team had no idea on how these inputs would impact the system, nor the tech team attempted to hide the unused fields. The below is the original workflow:
There are 3 main issues:
As the result, the ops team came up with a few temporary solutions below:
The strategy is to first remove unused fields that doesn’t fit the business now. Then, to minimise errors, defaults and drop-downs are added to the template:
A purchase order is meant for ordering stocks from suppliers, so that we can sell them to other social sellers. The original PO system was designed for event-based purpose for a single supplier. All orders within the event timespan will be included in a single PO automatically, so the PO could be directly sent to the event supplier. Until the previous PO has been fulfilled, new POs can’t be generated. In addition, we didn’t have to keep stock as suppliers deliver the stocks to us before each event. So inventory wasn’t factored into consideration. As the business model changed, it no longer fits our need.
Since we work with multiple suppliers now, whenever we generate a new PO, all orders with multiple suppliers between the previous PO and now would be added to the new PO. Multiple suppliers’ POs would be clustered into one file. The workflow looks like below:
Hence, the team faced the following issues:
The PO page is revamped into 2 pages: Create PO page and the Overview page. At the create PO page, a list of orders will be available for the procurement team to pick and generate new POs. The generated POs can be viewed at the Overview page, along with the order numbers that the PO was created for.
With the current workflow, the team don’t have to manage orders and maintain POs on any spreadsheets. Pick orders to generate POs for, download and send over the PO document directly to suppliers are the only remaining steps. All of these is visible on our fulfilment system, leaving way less room for error and faster turnaround.
Once the PO is confirmed, an inbound has to be scheduled with our warehouse partner, so that our warehouse knows what stocks will be sent over, and when it would be sent. When the stocks arrive, a round of quality control (QC) check will be conducted to identify any discrepancy before adding the stocks to our inventory.
In short, it takes at least 15 steps and 3+ separate spreadsheets over 4 channels to complete a single inbound. It involves:
Yet none of these is visible on our own fulfilment system. The detailed workflow can be viewed below:
After conducting a task analysis, there are actually only 3 main steps required for inbound:
However, these 3 steps tangled up with numerous quick fixes, which eventually became too much to unravel. It caused the following problems:
We integrated our fulfilment system with our WMS partner’s API to synchronised all inbound interactions. Creating inbounds, loading product data, and discrepancy review can be done on our fulfilment system, which will be synced with the WMS.
For all three chunks, we wrote complete SOPs after completing usability test with our internal team. It’s shared on the Notion board for the ops team, making sure the knowledge and process are well defined and preserved.
Overall fulfilment capacity is doubled by cutting out all duplicated input & manual handling processes. Streamlining the first half of the fulfilment process on our fulfilment system has boosted the efficiency, and given not only the ops team, but the entire cross-functional team higher visibility into the fulfilment process.
“I can finally check order status, and get back to clients myself. When the ops team forgot to place PO for certain orders, I’m able to tell and give timely feedback to our team for follow up. Happy to gain so much more visibility to the fulfilment progress.” - Sales Manager