Epic: Saved Carts & Cross-Device Cart Continuity
Epic Summary
As a shopper, I want my cart to be saved and available on any device I use, so that I can start shopping anywhere and complete my purchase later without rebuilding my cart.
Business Goals
- Reduce cart abandonment and recover lost revenue
- Increase conversion for multi-session and multi-device shoppers
- Increase account sign-ups and logins
- Provide data for remarketing (e.g., reminder emails)
Success Metrics
- Cart abandonment rate decreases by X%
- Percentage of orders completed on a different device than the one where the cart was started
- Return rate of shoppers with a saved cart within 7/30 days
- Cart sync success rate ≥ 99.5%; sync latency p95 < 2s
- Account creation rate from cart-save prompts
Scope
In scope: Persistent carts for logged-in users, guest cart persistence, cross-device sync, explicit "Save for later," merge handling, expiry, notifications, analytics.
Out of scope (initially): Shared/collaborative carts, wishlists, saved-cart price-lock guarantees, native app push notifications (can be a follow-up).
User Stories
1. Automatic cart persistence for logged-in users
As a logged-in shopper, I want my cart to save automatically as I add, remove, or change items, so that I never lose my progress.
Acceptance Criteria
- Given I am logged in, when I add, remove, or update quantity of an item, then the change is persisted server-side within 2 seconds.
- Given I close the browser or app, when I return, then my cart contains the same items and quantities.
- Given the save fails, then I see a non-blocking error and the change is retried automatically.
2. Access my cart from any device
As a logged-in shopper, I want to see the same cart on my phone, tablet, and desktop, so that I can continue shopping wherever is convenient.
Acceptance Criteria
- Given I have items in my cart on Device A, when I log in on Device B, then I see the same cart.
- Given I change my cart on Device A while Device B is open, then Device B reflects the update on next page load or within a defined refresh interval.
- Given conflicting edits on two devices, then the most recent change wins per line item, and no items are silently duplicated.
3. Guest cart persistence
As a guest shopper, I want my cart to persist on my current device, so that I can leave and return without logging in.
Acceptance Criteria
- Given I am not logged in, when I add items, then the cart is stored via a secure anonymous identifier (cookie/local storage + server record).
- Given I return within the guest retention window (e.g., 30 days), then my cart is restored.
- Given I clear cookies/storage, then the guest cart is no longer accessible from that device (expected behavior documented).
4. Merge guest cart on login or sign-up
As a shopper who built a cart as a guest, I want it combined with my account cart when I log in, so that I don't lose items from either.
Acceptance Criteria
- Given I have a guest cart and an existing account cart, when I log in, then items are merged; duplicate items combine quantities (capped at stock/purchase limits).
- Given I have a guest cart and no account cart, when I sign up or log in, then the guest cart becomes my account cart.
- Given a merge occurs, then I see a brief message summarizing what happened, and I can review the cart.
5. Prompt to save cart via account
As a guest shopper, I want to be offered a simple way to save my cart across devices, so that I can pick it up elsewhere.
Acceptance Criteria
- Given I am a guest with items in my cart, then the cart page shows a "Save your cart to access it on any device" prompt with login/sign-up options.
- Given I choose to sign up, then the flow preserves my cart and returns me to it afterward.
- Given I dismiss the prompt, then it does not reappear for the rest of the session.
- Sign-up supports email and social login options, and does not require leaving the cart context where feasible.
6. Explicit "Save for later"
As a shopper, I want to move individual items out of my active cart into a saved list, so that I can keep them without including them in checkout.
Acceptance Criteria
- Given an item is in my cart, when I select "Save for later," then it moves to a "Saved for later" section and is excluded from totals.
- Given an item is saved, when I select "Move to cart," then it returns to the active cart.
- Saved items sync across devices for logged-in users.
7. Validate cart contents on return
As a shopper returning to a saved cart, I want to be informed of any changes to price or availability, so that I'm not surprised at checkout.
Acceptance Criteria
- Given an item's price changed since I added it, then the cart shows the current price and a notice of the change.
- Given an item is out of stock or discontinued, then it is flagged, excluded from checkout, and moved to "Saved for later" or marked unavailable with alternatives suggested where available.
- Given a promo code is no longer valid, then I'm told why, and totals update.
8. Cart expiration and retention policy
As a business owner, I want saved carts to expire after a defined period, so that stale data and inventory assumptions are managed.
Acceptance Criteria
- Logged-in carts persist for a configurable period (default 90 days); guest carts for a shorter period (default 30 days).
- Expiry is configurable without code deployment.
- Given a cart is about to expire, then the shopper may be notified (see story 9).
- Expired carts are deleted or anonymized per privacy policy.
9. Cart reminder notifications
As a shopper with a saved cart, I want an optional reminder, so that I remember to complete my purchase.
Acceptance Criteria
- Given I am opted in to marketing/transactional reminders, when my cart is idle for a configurable period (e.g., 24 hours), then I receive an email with a link to my cart.
- Given I click the link on any device, then I land on my cart (prompting login if needed).
- Given I opt out, then no reminders are sent; every email includes an unsubscribe link.
- Reminders stop once I check out or the cart is emptied.
10. Shareable resume link (secure)
As a shopper, I want to email or text myself a link to my cart, so that I can open it on another device without logging in manually.
Acceptance Criteria
- Given I select "Send my cart to myself," then a time-limited, single-user link is generated and sent.
- Given the link is opened after expiry, then it fails gracefully and asks me to log in.
- Links never expose personal or payment data and require authentication before checkout.
(Optional / stretch — can be deferred.)
11. Cart privacy and control
As a shopper, I want control over my saved cart data, so that I can trust how it's used.
Acceptance Criteria
- Given I am logged in, I can clear my cart and saved items at any time.
- Cart data is included in data export and deletion requests (GDPR/CCPA).
- Cart storage is encrypted at rest and transmitted over TLS.
- Privacy policy and consent copy are updated to cover cart storage and reminders.
12. Analytics and observability
As a product team member, I want to track saved-cart behavior and system health, so that I can measure impact and detect problems.
Acceptance Criteria
- Events tracked: cart_saved, cart_restored, cart_merged, cross_device_resume, reminder_sent, reminder_clicked, cart_expired, checkout_completed_from_restored_cart.
- Dashboards show the success metrics above.
- Alerts fire on sync error rate or latency exceeding thresholds.
Non-Functional Requirements
- Performance: Cart read/write p95 < 500ms; sync visible within 2s.
- Reliability: 99.9% availability for cart service; graceful degradation to local cart if the backend is unavailable.
- Security: Anonymous cart IDs are unguessable; carts are scoped per user; protection against cart enumeration and tampering.
- Accessibility: WCAG 2.1 AA for all new UI (prompts, banners, saved section).
- Compatibility: Supports major browsers, iOS, and Android apps (if applicable).
- Scalability: Handles peak traffic (e.g., holiday sales) with no loss of cart data.
Dependencies
- Authentication / identity service
- Inventory and pricing services
- Email/notification service
- Legal/privacy review (consent, retention)
- Analytics platform
Risks & Open Questions
- Should prices be locked at add-to-cart time, or always current? (Assumed: always current.)
- Are inventory reservations needed for saved carts? (Assumed: no.)
- How should multi-currency/region differences be handled when a cart moves across devices/locales?
- Which markets require explicit consent before sending cart reminders?
- Do native apps share the same cart API from day one?
Suggested Phasing
- MVP: Stories 1, 2, 3, 4, 7, 8, 11 (core persistence, sync, merge, validation, retention, privacy)
- Phase 2: Stories 5, 6, 9, 12 (conversion levers, reminders, analytics)
- Phase 3: Story 10 and further enhancements (shareable links, push notifications, wishlists)