← All work
Proactive ProjectUX DesignMobile · 2025

Optimizing Spotify's
Discovery → Save
& Find-Again Flow

Reducing ambiguity when users save music on mobile — so “I loved that song” actually means they can find it again.

Scroll to explore
·Proactive Project
01Problem Framing

One tap to save.
Three places it might end up.

Concept case study — not affiliated with Spotify. Based on observing the public mobile app and how I would approach a redesign.

Saved tracks drive retention and personalization. When users lose confidence in “Save,” they stop curating — and Spotify's recommendation loop weakens. Three friction points break the discovery → save → return journey most often.

Problem 01 — Ambiguous outcome
Save doesn't tell you where the song went
Tapping ♥ adds to Liked Songs, but many users expect "Save to playlist" or "Download." No confirmation — they search Library later and fail.
Problem 02 — Queue confusion
"Play next" vs "Save" look like the same intent
From Discover Weekly, users often want to hear it again soon (queue) or keep it forever (library). The long-press menu buries the distinction.
Problem 03 — Silent failure
Offline save feels broken
On flaky mobile data, the heart animates but sync fails. No retry, no pending state — users assume it's saved until it isn't.
Before state
Discover Weekly
Now playing
Midnight City
M83
No confirmation — where did it go?
Your Library · later
User searches “Midnight City” — not in recent saves

Saved — but where?

02Design Solution

Save with intent,
not just a toggle

The key insight: save is not one action — it's three intents. Keep (library), Organize (playlist), and Listen again soon (queue). A bottom sheet makes the choice explicit without cluttering the happy path.

Try it — tap save on a track
Discover Weekly
Made for you
Midnight City
M83 · Hurry Up, We're Dreaming
Midnight City
M83
The intent model
on save_tap():
  show_sheet(intents=["keep", "playlist", "queue"])

if offline:
  queue_op(intent) # pending UI
else:
  confirm_toast(intent) # immediate feedback
03User Flow

Decision tree for
the discovery → save journey

Every branch mapped — including offline pending sync and undo — to create a findable, account-aware mobile experience.

STARTHear track (Discover Weekly)Tap Save (♥)Userintent?KeepPlaylistQueueLiked SongsConfirm toastPick playlistRecent + NewAdd to queuePlay nextWrite to libraryOnline?NOYESPending → Sync laterConfirmed ✓Findable ✓
04Technical Artifact

From tap to
library sync

Optimistic UI fills the heart immediately; the sync layer queues offline ops and replays on reconnect. Explicit save_intent gives the recommendation engine a stronger signal than a passive like.

CLIENT (UI)save_intentenumtrack_idstringplaylist_id?string?device_stateenumoptimistic_uibooleanSYNC LAYERoffline → queue_op()Persist to local SQLite;replay on reconnectidempotent saveDouble-tap ♥ does notcreate duplicate entriesrollback on failureRevert heart + showretry if API rejectsLIBRARY APIuser.libraryliked_tracks + saved_atplaylist_tracks → FKqueue_state (ephemeral)recently_saved indexrecommendation_signals
05Skills Demonstrated

The Dev/PM edge
in this work

Intent-Based Interaction Design
Split one overloaded control (♥) into clear user intents — Keep, Organize, Queue — without adding friction to the default save path.
Edge Case Design
Mapped offline pending state, undo within 5 seconds, and regional unavailability — not just the happy path on fast Wi-Fi.
Systems Thinking
Designed UI rules that align with optimistic sync, idempotent saves, and saved_at indexing — so “Recently saved” is actually findable.
Proactive Project
See also: Yaga Case Study →Spotify Discovery → Save Flow