Shopping Lists on Uber Eats

Product Design

Introducing grocery shopping lists into Uber Eats.


During my time as Design Lead for Grocery & Retail Stores, one of the largest bets me and my Product Manager Cailyn Criniti envisioned for the future of the pod was Grocery Shopping Lists for Uber Eats.

Not only it was brought time and time again as one of the most missed features from Cornershop —a grocery delivery app in LatAm acquired by Uber and absorbed into Uber Eats— during LatAm user-research sessions, it was also a unique opportunity for us to leverage our canonical product catalog and our large selection of grocery stores to play a key role in boosting grocery retention, basket sizes, and driving habitual use.

This project was later taken by my colleague Alex Huang on Design, after I switched gears to leading Consumer Offers on Eats, and Sharon Wong on Product.

These concepts stem from my time leading this workstream on Design, along with both Cailyn and Sharon on Product.

Defining a Shopping List

Introducing a new construct to billions of users worldwide is generally a major bet and, as a grocery delivery platform, figuring out where Shopping Lists fit in within our existing ones —eg. how is it different from a Cart— and generally defining what is a Shopping List is a question that has multiple answers.

Semantic alternatives

Shopping Lists as a new construct, tied to a store.

A simple way to think of a Shopping List could be to give it a similar treatment as a Cart—a child of a Store, with its own unique set of items. But there were many limiting factors, from taking into account the traffic ratio of people who enter a Store in the first place to just how much more headroom we had to build something more magical.

Shopping Lists as child of the Cart construct, tied to a store.

Another simple approach would've been to treat Shopping Lists as a "Save for Later" feature, and bundle it with the Cart construct. While this could be a useful feature, it wouldn't have necessarily moved the needle on our main goals —boosting grocery retention, basket sizes, and driving habitual use— if people weren't making grocery carts in the first place.

Our approach — Store-agnostic, item-forward Shopping Lists

Shopping Lists as a new construct, store-agnostic, with canonical items.

After jamming on this internally and extending the brainstorming sessions to a wider range of designers through a Design Sprint, we landed on our final architecture. Store-agnostic, item-forward Shopping Lists.

By making Shopping Lists store-agnostic, we have the flexibility to introduce them to lower intent, upper-funnel surfaces, while still allowing them to filter items on a store-level basis. This flexibility ultimately allows us to introduce things like comparison shopping, or even enabling Lists to flex into a "Saved for later" feature when needed.

Once a Store is chosen, a Shopping List can easily turn into a Cart.

Ultimately, of course, the goal is for more Shopping Lists on the platform leading to more Carts.


Creating a Shopping List

One of the concepts we explored to help users jumpstart a Shopping List were these playlist-like "collections" of items to show users when they start a Shopping List from scratch.

Collections could be dynamic, and respond to hints like the list name, past orders, existing items on the list, etc.

Exploring ways to help users jumpstart a Shopping List on Uber Eats.

Looking forward, we also explored ways to incorporate Lists into existing flows, like searching within a store.

Exploring ways to incorporate Shopping Lists into existing workflows.

Comparing prices

One of the key differentiators and growth drivers we looked to incorporate into the feature was comparison shopping.

Internally, one of the aspects of comparison shopping we particularly debated was whether or not users would like to compare and buy all of their items at once, and where should we make assumptions about it.

Our Product leaders were generally very bullish on the idea that most times, most people would like to price-compare a subset of items of their Shopping Lists instead of all at once, so I explored a few alternatives of how a branched price-comparison flow could work.

Exploring price comparison alternatives.

Swipe to save

Given our unique advantages as a platform, we also aimed to make the feature fun and delightful. One exploration we made under this umbrella was allowing users to get into a "Make it cheaper" mode, where they'd be able to swipe their list to swap items for more and more affordabe alternatives.

Exploring ways to make savings and store-switching more delightful.

From List to Checkout

One of the main challenges of introducing store-agnostic Shopping Lists on a platform with such a large store selection and a diverse canonical catalog as Uber Eats is choosing where to checkout from, when and if to choose a default store, etc.

These concepts explored a few different alternatives to go from list to checkout, and served as anchoring visual guides to drive cross-functional conversations between Product and Design when talking through the problem space.

Choosing a store at the end

Choosing a store at the end of the shopping experience.

Choosing a store at the end has some tradeoffs to keep in mind. It's cleaner visually, as it tucks complexity away until the end, but in doing so it's also less transparent about where a user might find all of the items in their Shopping List, potentially getting in the way of faster decisionmaking.

Draft Cart

Exploration around the addition of a "draft" card in between the Shopping List and checking out.

We also played around with the idea of a "draft" Cart—meaning, a preview of what your Cart would look like in different store combinations. This concept kept the simplicity of the first one, while still providing more control at the end.

Parent store

Introducing a "parent" store to Shopping Lists.

While our aim is for Shopping Lists to be item-forward, introducing the concept of a "parent store" in the context of viewing and managing one resonated to us for three main reasons:

  1. For users, it enabled faster decision-making by immediately mirroring what they'd see at checkout.
  2. For us, it matched a key requirement of the ultimate job-to-be-done —checking out—, as well as how we treat all grocery collections in the app.
  3. For stores, it meant they could remain front and center to the experience, and don't risk having their products mixed up with the competition.

This concept managed to still tuck some of the complexity away, while enabling all three side-benefits.

Our approach — Exposed store selector

Exposing all parent store options upfront.

Lastly, we explored giving full control to the user upfront, allowing them to quickly switch back and forth between parent stores, and compare.

This option had by far the most positive response when performing UXR with actual users, and is the one we ultimately went with.


Rohan Mathew, Uber's Senior Director of Engineering, introducing the feature at Go-Get 2025.

This project was recently introduced at Uber's annual product event, Go-Get 2025, and will be available to users later this year.

When

2024 — 2025

For

Uber

Discipline

Product Design

Product

Cailyn Criniti

Sharon Wong

Farid Hosseini

Shiva Rajaraman

Design

Laura Sandoval

Alex Huang

Katy Tsai

Research

Vanya Mittal

Jing Jing Tan

Engineering

Ilya Uts


Balance — Your transit cards in one place

Independent Apps, Product Design, Engineering

Balance is Chile’s top-rated transit app.


Balance — Your transit cards in one place