Ecommerce fulfillment: in-house, 3PL, and the gap nobody prices in

In ecommerce, fulfillment is everything between the paid order and the delivered parcel: receiving inventory, storing it, picking, packing, and handing to a carrier. Here's my take after running it at SurfStitch at $80 million a year and at P.E. Nation: fulfillment is not a cost center you outsource and forget, it's where your checkout promise is either kept or quietly broken. I learned which one the hard way. At the start of COVID we ran an online warehouse sale at P.E. Nation, the revenue skyrocketed, and our Shopify store stopped syncing with the warehouse. We sold a thousand orders of stock that did not exist, and we only found out when customers started calling. My co-founder Tracy put it best afterwards: if she could have seen that happening in real time, she could have prevented all of it.

In-house vs 3PL: the real decision
The decision is usually framed as cost per order. In my experience it's really a decision about how far away you're willing to move the thing that breaks, because distance costs you detection time.
When in-house still wins
Keep fulfillment in-house while your volume is low enough that packing is not yet eating your growth time, when your product needs special handling (fragile, perishable, personalized), or when unit economics can't absorb 3PL fees yet. You keep full control and full visibility; you pay for it in hours and headcount.
When to move to a 3PL
The usual triggers: you're spending founder or team hours packing instead of growing, storage has outgrown the garage or back room, shipping rates at your volume are worse than a 3PL's negotiated rates, or you need multi-warehouse coverage to hit delivery promises in new regions. A good 3PL brings warehousing, inventory management, kitting, returns processing, and carrier relationships in one contract.
What a 3PL actually costs
Expect fees across five buckets: receiving (per pallet or per item), storage (per bin/pallet per month), pick and pack (per order plus per additional item), packaging materials, and shipping at their negotiated rates. The quote that matters is your fully loaded cost per order at YOUR order profile, because single-item orders price very differently from four-item kits. Model a normal month and a peak month before comparing providers.
What to ask before you sign
- Cutoff times and SLAs: what time must an order land to ship same day, and what happens when they miss it, credits or apologies?
- Integrations: native connections to your storefront and returns stack, not "we have an API".
- Exception reporting: how do you find out an order is stuck, a daily report, a dashboard, or your customer emailing you?
- Peak handling: Black Friday capacity, and the surcharges that come with it.
- Returns processing: time from return receipt to restock, because that inventory is capital.
Peak is where fulfillment plans go to die
Peak trade is the stress test: the same operation that runs clean at 500 orders a day starts dropping promises at 3,000. My honest read on why it keeps happening: retailers overinvest in customer acquisition and underprepare their 3PL for the volume they just bought. The marketing spend is committed months out, the warehouse staffing is decided weeks out, and the gap between them is where the SLA breaks. At both P.E. Nation and SurfStitch I made sure the warehouse had enough people to process orders inside the SLA before we turned the traffic on. It is unglamorous work and it is the difference between a good peak and a banner on your homepage apologizing for delays, which is how big brands end up on the news.
The visibility gap nobody prices in
The visibility gap is the time between an order breaking and anyone at your company knowing. It's the number almost nobody measures, and outsourcing widens it. When your 3PL's system says "processing" for three days, your customer's promise is breaking and nobody is telling you: their SLA miss becomes your support ticket, your refund, your churned customer. One in five online orders hits an operational issue every year, and the break is rarely dramatic. It's an order stuck behind a stock sync error, or a batch that missed Friday's cutoff and sat all weekend.
The gap gets wider the more places your inventory lives, and modern brands are far more fragmented than their software assumes. One client of ours runs three Shopify storefronts, five warehouses, Amazon, TikTok, and John Lewis, and their team logs into eight separate warehouse portals to answer a single question about one order. They have no ERP team to stitch it together. Brisco, an ASX and NZX listed retailer in New Zealand, fulfills ecommerce from a hundred store locations plus a marketplace that is entirely drop-shipped; their omnichannel model was the reason nobody else could give them a straight answer about order status. Another large retailer we work with runs 1.2 million orders across 22 carriers, and had been told their logistics were simply too complex to monitor.
Even the data quality varies wildly. One of our customers uses a 3PL in Sydney that reports exactly two events for a parcel: shipped, and delivered. Everything in between is a black box, which is precisely where a lost parcel hides. We tap into carrier connections like OPOST and StarTrack to get ten different signals on that same delivery, because you cannot detect a break inside a gap you have no data for.
This is why we built Keeyu to sit above the fulfillment stack, wherever it lives: we watch every order against the promise made at checkout, detect stuck and delayed orders before the customer notices, and visualize fulfillment, returns, and deliveries at every stage. Just the other day the platform flagged 70 Shopify orders in the US that had never synced to the warehouse and had not shipped in three days, while every order around them moved normally. Nobody had noticed. With full automation that class of break fixes itself. Every order is a promise, and the promise doesn't care whose warehouse it's sitting in. It's the operational core of post-purchase operations: proactive e-commerce operations, keeping the promise whoever ships the box.
Fulfillment metrics that matter
- Promise-kept rate: orders shipped and delivered as promised at checkout. The only metric a customer feels, and the one to hold a 3PL to.
- Order cycle time: paid to shipped. Watch the outliers, not the average; the outliers are tomorrow's WISMO tickets.
- Time-to-detection: how long an order can be stuck before anyone knows. For most brands the honest answer is "until the customer emails", and those 70 unsynced orders are what that looks like in practice.
- Mis-pick and short-ship rate: each one is a return, a reship, and often a lost customer.
FAQs
What is the difference between fulfillment and shipping?
Shipping is the last leg: the carrier. Fulfillment covers everything from inventory receipt to handover. Most "shipping problems" customers report actually happened inside fulfillment, before the carrier ever saw the parcel.
Does a 3PL fix fulfillment problems?
It fixes capacity and cost problems. It usually worsens visibility, because the work now happens in someone else's building on someone else's system, sometimes reporting as little as two tracking events. Whoever runs the warehouse, someone still has to watch every order against the promise, and that's the layer a Keeyu demo shows you on your own order book.
Can you prevent fulfillment issues instead of reacting to them?
Yes: detect the stuck order today, fix it today, and the ticket never exists. Brands running this proactively see up to 90% fewer WISMO tickets; the approach is proactive customer service, and the results are in customer stories.
How many fulfillment locations is too many to manage manually?
There isn't a clean number, but the tell is portals. The moment answering "where is this order" means logging into more than two systems, your team is doing detection work by hand and losing. We've onboarded brands running a hundred fulfillment locations; the locations aren't the problem, the lack of one place to see them is.
References
Ready to Stop Reacting?
The fastest way to see how Keeyu prevents complaints is to see it in action.
In one call, we’ll map your current operations, show how our AI Agent fits in, and walk through real examples of issues fixed before customers notice.
Most teams go live within 48 hours. We never share your data.

