34 projects without a single day of downtime: how we rebuilt operations at an online grocery
Gostockup sells Eastern European food from a store in Oceanside, New York: 4,000+ products, local delivery, and shipping to every state, Hawaii included. Here's what we rebuilt, in the order we did it.
When I joined in February 2025, the team was a project manager, a developer, a photographer and me.
First three weeks
The catalog
Thousands of products, duplicates and even triplicates, names copied from supplier invoices. We cleaned it up and wrote a naming standard: clear retail titles, weight in both ounces and grams.
What surfaced
The catalog was only the surface
Stock lived in the parent company's software, supplier payments were tracked by hand, and nobody could say how long an order took to go out.
The conversation
“Are you ready to take responsibility for all of it?”
I told the owners we were moving too slowly. I said yes, on one condition: specialists for what I'm not best at, starting with SEO.
The principle
Rules first, then systems
Write down the statuses and conditions, turn them into requirements, and sign off on the result with each team.
Business impact
What it did for the business
We never put a dollar figure on the savings. I work from losses: I look for where the company is losing money and time, and remove it. Here is what can be checked.
Order cycle
Faster without hiring
The median order went from 82 to 19 hours with the same warehouse team.
Shipping
Fewer reshipments
A spoiled-product complaint used to come in about every 20th order, now about every 35th. A third reshipment puts an order in the red, so we are dropping the riskiest products.
Inventory
Not selling what we don’t have
Retail and wholesale no longer add up into one number in Shopify, so the site doesn’t sell stock that isn’t on the shelf.
Assortment
Smaller catalog, same profit
We removed products that weren’t selling and profit didn’t dip. A yearly analysis shows which products are in the red zone.
Results
How much less
“Where is my order?” tickets after our own tracking page, estimate
−98%
Time to clean one tag across ~5,000 products: 4h → 10m
−96%
Order cycle, median order to fulfillment: 82h → 19h
−77%
Product condition complaints every 20th order → every 35th, estimate
LodDepot keeps one stock count, but it was sending it to Shopify twice: 5 units for retail and 5 for wholesale. Shopify saw 10. When the 5 retail units sold out, the site kept selling the wholesale ones, which were no longer on the shelf.
My part
Found the cause of the mismatch and proposed splitting the sales channels.
Solution
Retail sells only through Shopify, wholesale through a separate LodDepot site on its own subdomain.
Rollout
Spec for configuring LodDepot and Shopify, checked on real products.
Result
Shopify no longer adds the channels together, and the site doesn’t sell what isn’t on the shelf.
Shipping
Ten zones instead of five
Problem
Carriers split the country into five zones, but what matters for perishables is how many days they spend in a truck. A spoiled-product complaint came in about every 20th order, and a third reshipment puts an order in the red.
My part
Initiative, the zone logic and the blocking rule, the spec, checking the result.
Solution
10 zones of our own by days in transit. The site won’t let you order perishables to a ZIP code where the chance of them arriving spoiled is over 10%.
Rollout
The rule works in the cart: the product is blocked for risky ZIP codes.
Result
A complaint now comes in about every 35th order. We are removing the riskiest products from the assortment.
Warehouse
Stocktaking starts the night before
Problem
Counts showed mismatches that weren’t real: we were counting products sitting on packing tables, about to ship.
My part
Described the cutoff process and assigned one owner per warehouse zone.
Solution
The evening before, packing stops at a set time, tables are cleared, unshipped items go back to the shelves, and one person owns each zone.
Rollout
A warehouse procedure before every stocktake.
Result
Only real mismatches stay in the report.
Economics
Free shipping: do the math first
Problem
Free shipping looks like an easy win until you look at the margin.
My part
The whole model, from pulling the data to the conclusion.
Solution
12,123 paid orders, UPS and FedEx rates across 11 zones and 5 weight tiers, 1,941 abandoned carts. The model compares 6 thresholds in 3 scenarios.
Rollout
We are testing the threshold on a group of customers.
Result
The test is running. We’ll pick the threshold based on its results.
Trade-offs
Where we had to give something up
Every decision had a price. Here is what we chose and why.
Decision
Cost
Why
No perishables to risky ZIP codes
We lose some orders.
A third reshipment puts an order in the red, and the customer is unhappy anyway.
Dropping the riskiest products
Less choice for customers.
They account for most reshipments and complaints.
Free shipping only after a test
Slower than switching it on for everyone.
We don’t risk margin on every order until the numbers hold up.
Moving to LodDepot without a shutdown
Longer and harder than closing for a couple of days.
Not a single day without sales.
A catalog a third the size
Fewer products on the site.
A simpler warehouse, less cash in stock, and profit didn’t dip.
How it works
The order path and how the systems connect
Two simplified diagrams. I wrote the rules for how orders and data move through these steps. Engineers built the integrations.
Order path: from payment to carrier
Order website or register, Shopify
Zone check perishables blocked for risky ZIP codes
Stock LodDepot deducts the item
Pick list QR in the warehouse app (beta)
Picking scanning by bin location
Packing cold pack for perishables, order photo
Label ShipStation, tracking number to Shopify
Carrier end of our cycle
The 19-hour median is the path from step 01 to step 08. Customers see every stage on the tracking page.
How the systems connect
gostockup.com → retail orders
In-store register → in-store sales
LodDepot ⇄ stock · wholesale on its own subdomain
Zendesk ← order questions
Shopify orders, catalog, customers
Warehouse app ← orders · → statuses
Tracking page ← warehouse statuses
FedEx and UPS ← parcels via ShipStation
ShipStation ← orders · → tracking number
Simplified: the main data flows only, no technical detail.
Order tracking
98% fewer “Where is my order?” tickets
Customers used to write to support just to find out where their package was. I worked out how the tracking page should work, and engineers built it: enter your email and order number and see which stage the order is at.
Statuses come straight from the warehouse. Once an order is packed, the packer takes a photo, so the customer sees their box before it arrives.
Five steps: confirmed → processing → ready → out for delivery → delivered.
A real order, customer details hidden
Working bilingual prototype. Not launched yet
Retention
Shopping that leaves a mark
Bringing a customer in once doesn't make them a regular. So I designed a seasonal rewards program: every purchase moves the customer along a season map, and each checkpoint unlocks a gift from our own shelves. Like a stamp on a paper card from your favorite corner shop.
Before the prototype I worked out what usually surfaces after launch: checkpoint economics, gift costs, what happens on a refund, how to store progress in Shopify and how the warehouse packs gifts with the order.
12 checkpoints per season · two reward tracks · bilingual prototype
Before → after
February 2025 vs. October 2026
What operations looked like when I joined, and what works today. This is the sum of separate projects; each one’s dates are in the timeline below.
Area
February 2025
October 2026
Inventory
In the parent company's software, in fractions of a case
→
LodDepot set up for us, counted in units, retail and wholesale separate
Catalog
Duplicates, inconsistent names, ~7,900 products
→
4-level category tree, ~2,500 active products, one-click tools
Warehouse
Manual picking, no way to measure it
→
QR pick tickets, bin locations, order logs, box control
Customer updates
Support answered “Where is my order?” by hand
→
Tracking page on real warehouse statuses, 98% fewer tickets
Shipping risk
5 standard carrier zones for perishables
→
10 zones of our own and ZIP blocking, a complaint every 35th order instead of every 20th
I find the problem, write the business logic and requirements, run the launch and sign off on the result. Engineering, marketing and support do their own parts.
Methodology
How we measured
These are internal numbers: the company doesn’t publish them and they haven’t been audited. For each one, here is what we measured, where the data comes from, and what I did versus others.
Order cycle: 82h → 19h
What
Median time from when an order comes in to when it’s handed to the carrier. The whole path, not just packing.
Source
Shopify: order creation time and fulfillment mark, all orders in the month.
Period
December 2025, the first month we measured, and September 2026.
My part
Found where orders sat, wrote the rules and specs, tested and signed off. Engineers wrote the code, the warehouse packed.
“Where is my order?”: −98%
What
Customer requests asking about order status.
Source
Team estimate. Before the tracking page launched in July 2025, these came in through the site, email, social and phone, and nobody counted them in one place.
Now
All requests go into Zendesk. Over the last four months the number of these questions keeps going down.
My part
Initiative, status logic and the spec for the tracking page, testing and sign-off.
Product condition complaints: −43%
What
Share of orders with a complaint about spoiled or damaged-in-transit products.
Source
Team estimate: before the 10 shipping zones, a complaint came in about every 20th order, now about every 35th. Complaints are now tracked in Zendesk.
My part
Initiative, the logic of 10 zones by days in transit and the rule blocking perishables for risky ZIP codes, the spec, checking the result.
Tag cleanup: 4h → 10m
What
Time to remove or change one tag across ~5,000 products.
Source
My own measurement. At first it was done by hand. Then a tool was built from my spec, but it hit API limits and ran slowly. I pushed the developer to find a faster way, and it came down to 10 minutes.
Why
It’s a regular task: discounts run on tags. For example, the tag discount:15 gives a product 15% off.
The fastest way to reach me is LinkedIn
My full career and notes on the work are there too