Peapod Digital Labs, the eCommerce engine for Giant Foods, recently released a doozy of an ill-conceived multi-order feature.
As a consumer, I shake my head at Giant’s carelessness. As a technical professional, I understand why and how bad releases occur but I’m unsympathetic. Peapod Digital is a highly competent shop with processes in place to prevent such disasters.
The multi-order feature enables customers to keep multiple grocery carts open. A customer might want to start next week’s delivery cart before this week’s order is fulfilled.
The Peapod Digital team has performed superbly during the pandemic, transforming a rickety ordering page into an industrial-strength juggernaut. So, I expected greatness from this new feature.
Why Grocery Multi-Order is a Complicated Feature
Transforming a website built to accommodate a single order per customer into one that accommodates multiple orders is ambitious and complex.
Implementing multi-order requires database schema changes, object model changes, and additional user interface. That is, this feature requires reconstruction from back to front.
Online shoppers must place their order ahead of time to secure a desirable pickup or delivery window. The fulfillment of the order doesn’t occur until shortly before the pickup or delivery window. Customers may add, subtract, or alter their orders until a predetermined cutoff time, typically 12–24 hours before pickup/delivery.
Kicking the Tires of Multi-Order
After using the updated Giant eCommerce website to place a week’s order for pickup at the store, I found a bunch of problems:
- Cramped, Slow-Performing Modal Dialog. After completing the initial order and choosing a pickup time window, the updating occurs in a modal dialog box when I add or subtract items before the pickup. A modal dialog disables everything on the web page until the modal box is closed.
- Missing Functionality: After completing my initial order, I received a discount coupon in a Giant Foods email. I could not enter this code because there was no place for it in the dialog box. I called customer support; they were familiar with the problem and credited my card.
- Design Issue: When selecting a new item to put into my cart, I cannot open a new window to see its ingredients because of the modal dialog issue in #1.
- Bug: After adding additional items, one must click the ‘Update’ button at the bottom of the dialog box to confirm the changes. The problem is that sometimes the Update button isn’t present. I can work around this bug by increasing and then decreasing the quantity of an item in my cart — it’s not savvy enough to recognize that nothing has changed and, thankfully, produces the Update button.
- Internal Inconsistency: The main web page sometimes displays the total of my order when I close the dialog box. When I attempt to add items from the main web page, the site behaves like I’m creating a new order. The page loses its state, displaying the value of the initial cart while treating it as a new order.
Takeaway #1:
Giant Food’s multi-order feature is surprisingly amateurish considering the Peapod team has mostly been hitting home runs with previous enhancements. Shoving the cart updating into a small, badly performing dialog box instead of using the main page makes for a clunky user experience.
Since customers must secure a delivery or pickup time window ahead of time, it’s normal for them to create an order early and edit it until the cutoff time the night before the pickup/delivery. Therefore, every customer who modifies an order after its initial creation must use this new dialog-based feature. If this feature were well-designed, only those with the need for a second cart would ever see the miserable dialog box.
A clear violation of the Product Management Hippocratic oath: Do No Harm. Instead of limiting the multi-cart feature to a small subset, Giant inconveniences everyone.
Takeaway #2:
The bugginess of this implementation suggests Peapod Digital took shortcuts instead of performing a back-to-front rearchitecture to transform their software from single-cart to multi-cart. Code that may have been clean is now probably littered with complicated conditional statements used to differentiate the open orders:
IF (order.isCurrent) AND (order.hasUpdates) AND (order.neverCommitted) THEN (order.Commit) AND (order.ChoosePickupOrDelivery) AND (order.SelectTimeWindow)
Supporting multiple orders with conditionals renders the code brittle and prone to bugs. The increased complexity of the code and missing test cases probably cause these errors.
Takeaway #3:
The multi-order feature feels like a rush job. The bug and inconsistency I discovered in 15 minutes of use should have been caught by automated testing and never seen daylight. Most well-run shops have a Continuous Integration deployment that runs automated tests whenever new code is committed to a version control system. Additionally, a Quality team is typically in place to perform a broader set of automated and manual testing.
Takeaway #4:
The folks at Peapod Digital Labs likely understand they burn customer goodwill by issuing sub-standard releases. They may feel confident their customers aren’t going anywhere during the pandemic and, therefore, feel empowered to inflict some website shenanigans.
The dissatisfaction of Peapod Digital Labs employees is another story.
Every prior indication suggests craftspeople comprise Peapod’s technical team. That is, I imagine the Peapod Digital Labs engineering team cares deeply about the products they release. Being forced to release a low-quality product damages the esprit de corps and leads to attrition.
Takeaway #5:
Many customers struggled mightily to master the original Giant site. The multi-order feature adds an additional layer of complexity. My sense from speaking to customer support about my discount coupon is they’ve been flooded with calls from confused customers.
Amateur Sleuthing
Nothing added up. Why would an ordinarily careful team release something so shoddy? It didn’t take much effort to connect this release with Giant’s December 7 announcement about their Ship2Me Digital Marketplace.
Unsatisfied with their enormous profits during the pandemic, Giant decided that humanity needed another eCommerce Homegoods site.
Giant Foods may be getting big for their britches. Isn’t it hard enough to do grocery eCommerce well without adding a peripherally related avenue of revenue to the mix?
The inclusion of Ship2Me explains the push for a multi-order feature in time for the lucrative holiday season. While regular grocery customers may have requested multi-order, analysis probably would have back-burned the work because of the high cost/low benefit.
I’m guessing the tech team initially estimated a six-month development cycle for a full-fledged multi-order feature. I further imagine management coming back saying, “No way. We’re time-boxing this to a month. What can you do quick and dirty?”
The Problem with Giant’s Technical Debt
Technical debt accrues when software teams produce expeditious workarounds instead of building software correctly. Business pressure usually dictates pragmatic compromise over computer science purity, so technical debt is more the rule than the exception. The trick is learning where and how to cut corners. Also, teams should commit to paying back the debt and performing the correct implementation later.
In this case, it’s unlikely the team will ever have enough time to implement the multi-order feature correctly. Quite possibly, management justified the second-rate implementation with uncertainty about the Ship2Me Marketplace ever gaining traction. Why bother spending months on a required feature if its financial driver may suddenly vanish?
Peapod Digital has boxed itself into a corner with this feature. Even if Ship2Me fails, it will be difficult to remove the multi-order feature because some customers will come to rely upon it for their regular grocery shopping. Removing features used by customers requires muscular Product Management. This debacle suggests Peapod Digital has anemic Product Management.
One Potential Tweak
A sensible suggestion: When there’s only a single cart, modify the code to use the main web page for updating an order instead of the modal dialog box. This way, single cart customers — the vast majority of customers, including me— never need to suffer the poorly implemented modal dialog box implementation. I don’t know what this change entails, but it’s worth some consideration even if it adds to Peapod’s technical debt.
Conclusion
Amazon is a greedy, rapacious company but they also place their customers first. Giant Foods might take a lesson and learn that greed and customer delight are not mutually exclusive.
Amazon has similar multi-order functionality where customers simultaneously maintain Whole Foods and Amazon.com carts. Amazon’s multi-order feature is mildly confusing but it’s orders of magnitude better than Giant’s implementation.
This bad implementation of multi-order will probably continue destabilizing the Giant eCommerce platform for years to come as they pile additional features onto an increasingly brittle foundation. If I’m wrong, I’d love to eat crow and write a follow-up article about how Giant Foods pulled a rabbit out of its hat. But don’t hold your breath.