Maysnow Liu
← All work
Zappos · Guest Returns

Reducing Guest
Return Friction

Closed the gap between guest checkout and self-service returns across 8 surfaces. No account required.

Role
Sole designer: research, IA, copy, interaction, spec, handoff
Timeline
Jul 2026 – present
Team
Product, Customer Service, Legal, Engineering, CMS
Methods
Generative research, expert review, competitive analysis, critique
Tools
Figma, Figma Slides, Claude Code, Figma MCP
Status
Approved P0, in development

Background

Zappos guests who checked out without an account had exactly one way back into their order to start a return: the confirmation email. Shopbop, on the same design system I own, already had three. Leadership commissioned a UX audit of the guest return experience after Voice of Customer data surfaced a clear pattern: guests creating accounts specifically to return an order, then finding the account couldn't see the order they'd just placed.

I led the audit and the redesign solo: research, information architecture, copy, interaction design, spec, and handoff.

Impact

The redesign touches 8 surfaces: the confirmation email, the shipping email, site search, the return flow itself, FAQ, Contact Us, and the shipping and returns policy page. It also closes a Sev-2 security gap along the way. It's approved as P0 and currently in development. Outcome metrics aren't in yet, so the numbers below describe scope and diagnosis, not results.

8
surfaces redesigned, up from 6 in the original requirements
18
customer service contacts analyzed
1
Sev-2 security gap closed
3
stakeholder corrections incorporated into the final design

Research

I analyzed 18 unsolicited customer service contacts about returns using open coding, with no hypothesis going in.

"I ordered as a guest and trying to return this order for a smaller size. I set up an account today but it shows 'no order number found'."
"I am attempting to return this order, but I ordered as guest and cannot sign in from the website."
"I want to return them [shoes]. I saw sign up for an account as the way to do that today. So I created an account with my email. Zappos doesn't have my email account connected to my order."

Key finding: a third of the sample created an account anyway

6 of 18
created an account expecting their guest order to appear. It didn't.

Every contact in the sample had already reached customer service, so this shows how the failure happens rather than how often. A third of the customers didn't just fail to find the return path. They inferred that an account was the way to get it, created one, and hit a second wall, because guest orders don't retroactively appear in a new account's history.

"I saw sign up for an account as the way to do that today. So I created an account with my email. Zappos doesn't have my email account connected to my order. Can you help me initiate a return?"

Why the failure didn't show up in account-creation metrics

I had no account-creation metric for this; this is a reasoning point about how the failure hides, not a number I measured. Tracked only by account creation, this behavior reads as conversion. It isn't.

From the sign-up funnel
Guest checks out.
Guest creates an account.
Reads as conversion.
What actually happened
Guest checks out.
Guest cannot find a return path.
Guest creates an account → except the order is not there.
Guest contacts support.
A failed self-service return, plus a contact.

The confirmation email was the only door. Miss it, and there was no other way in, and the account a guest created next did not surface the order. Both halves had to be fixed.

Diagnosis

The site wasn't silent about returns — it was actively pointing guests toward an account.

Signal 1 · Search

Searching "Returns" opens a login prompt. The reasonable inference for a guest: an account is required.

Signal 2 · Return policy

The policy page never mentions guest returns. It explains the policy; it never says where to start.

Signal 3 · Help & Support

The only page with guest instructions sits behind Help and Support, on the website only.

The app doesn't allow guest checkout, so app-only customers can't hit this problem, which scoped the fix to web.

Key finding

The destination page already existed.

The order confirmation email already contained a working entry point. Clicking the order number opens the full manage-order page: status, tracking, cancel, return. The capability was built; it was labeled like a reference number, not a link, so guests didn't read it as one.

"The email I received instructed me to start the return process by clicking on the order number, but nothing happened when I did."

The fix is copy, IA, and layout — no new functionality required.

Before: order confirmation email with the order number as a plain link

Before: the order number was the only link, and nothing named the task

Proposed: order confirmation email with a labeled Manage or Return This Order link

Proposed: "Manage or Return This Order" added as a labeled action

Competitive precedent: Shopbop

Before designing anything I checked Shopbop, same parent company and a brand I also own the design system for. It already has a "Find Guest Order" link under Help, a page that takes email plus order number, and a third entry point from the return policy: three ways in, one destination. Zappos had the destination and none of the ways in. That precedent scoped the Zappos fix to parity with Shopbop: guests only, one destination page.


Design solutions

Layout: equal-weight entry points

I tested four layout options for the lookup page. Three gave the guest path a button and the account path an inline text link, giving the account path more visual weight, the same imbalance this project existed to fix.

Option 2 · Rejected

Side by side. Button sized to content.

Option 3 · Rejected

Side by side. Button spans the column.

Option 4 · Rejected

Stacked, full width.

The final layout is the only one where both paths get a button — two doors, equal weight.

Start a Return page with two equal-weight options: Have a Zappos Account and Checked Out as a Guest

Shipped to dev: both paths get their own heading, copy, and button

Failure state

Email plus order number lands on the same order page the email link reaches: status, tracking, cancel, return. Most of the design work is in the failure case, since that's what the verbatims describe.

Default · handed to dev

2 options side by side, each with a button; links moved out of the primary paths; 2 return methods shown, not described.

When the lookup fails

Says why it happened, names the confirmation email that works, and offers Contact Us instead of a dead end.

"I started an account but it doesn't recognize the number as belonging to me."
Guest lookup error state: Information not found, with guidance to check the order number or contact customer service

The failed-lookup state names the reason and offers Contact Us instead of a dead end

No new page was built; an existing one was made reachable. Still open: a guest with no order number at all, which the requirements doc raises and doesn't yet have an answer for.

Information architecture: renaming for task, not content

The requirements doc named 6 surfaces; the design covers 8, and renames 3 of them. Each page had been named for what it contained; each is now named for what the customer is trying to do.

Before
After
Zappos Return Options
Start a Return
Contact Information
Contact Us
(no page title; opened on a promotional sentence)
Shipping and Returns

Security

The redesign surfaced a Sev-2: the old email return link signed a guest in behind the scenes from an email and an order number alone. What's handed to dev: a one-time code sent to the email on file, checked before the order opens.

01 · Sent
Code sent
To the email on the order.
02 · Filled
Guest enters it
Verify is the only action.
03 · Error
Wrong code
Named inline. Resend sits right below.
04 · Resend
New code
Confirmed in place. The guest stays put.
OTP verification modal, checking your email for a one-time password before opening the order

A one-time code gates the order, replacing the old auto-login link

The open tradeoff: every additional check reduces risk and adds a step for a customer who's already frustrated enough to have contacted support. Security and legal own that call; my job is keeping the friction cost visible when they make it.


Stakeholder alignment

Three proposals I made were corrected during review, and all three corrections are reflected in the final design.

Product
I proposed

Open the lookup to anyone with an email and order number, not just guests.

The correction

Parity with Shopbop, guests only. No VOC supports the wider case.

What changed

Guests only. I'd asked for more without evidence; the bar runs both ways.

Customer Service
I proposed

Remove or relabel the returns content on Contact Us.

The correction

Deliberate contact deflection. CS owns the page and wants it at the top.

What changed

Content kept, treatment changed to Quick Links.

Legal
I proposed

Drop the "Last Updated" line under Shipping.

The correction

No US law requires it, but returns moved from 365 days to 60.

What changed

Kept. The reason was a customer benefit nobody had written down.

Collaborators

Zappos1 Product Manager
Aligned on scope: the requirement was 1 of 8 surfaces, and we agreed which stayed in P0.
ZapposCustomer Service
Reviewed the 18 Voice of Customer contacts with them; learned Contact Us is deliberate deflection they own.
Zappos2 Legal reviewers
Confirmed what the return-window change from 365 days to 60 required on the policy and Shipping pages.
ZapposFront-end Engineering
Handed off 8 surfaces with states and specs; engineering is building and estimating from it.

Current status

Approved P0 · in development

Copy, UX, and product are approved. UX handoff to development is complete; engineering is building and estimating; visual design lands next, aligned to a page it's designing separately. Nothing is shipped yet, so there are no outcome numbers to report.

The measurement plan: guest-return contacts to customer service should fall, and accounts created with no visible order history should fall. I'd instrument the lookup form: starts, completions, failures, and which of the 8 ingress points sent the customer.

Validation

Generative research · done

Thematic analysis of 18 Voice of Customer contacts. Identified the mechanism: guests read an account as required.

Expert review · done

A journey-level review and critique with UX, engineering, copy, and legal. Confirmed the design was defensible.

Task-based usability testing · not yet run

Timeline didn't allow a usability test on the proposed flow before handoff. A critique confirms a design is defensible; it doesn't confirm a guest can complete the task.

Planned next

5 unmoderated sessions with a return-without-an-account task, plus a first-click test on the 3 renamed pages.


Personal takeaways

01

The research identified the actual mechanism behind the failure, not just the symptom, so the fix didn't rely on guesswork.

02

The capability already existed, which turned what looked like a feature request into a cheaper labeling and IA fix across 8 surfaces, shipped faster.

03

Visual parity has to be structural, not stylistic. Every layout that gave one path a button and the other a text link reproduced the bias under review.

04

Cross-functional review caught real gaps in scope, IA, and policy that research alone didn't surface, and all three corrections are in the shipped design.