I love music. Maybe too much for my own good.
The proof is my playlist with over 7,000 songs in it. A decade of taps. I’d be lying if I said I remembered the names and lyrics of every single one, but what I actually remember are the moments in my life when I listened to them. The songs I had on repeat driving home from work last summer. My after-school rotation from sophomore year of high school. My shoegaze phase, freshman fall of college. I can see those pockets of my library perfectly. I can feel exactly what they sounded like. I just can’t name a single track inside them.



The beta auto-generates a list of songs based on my input. It doesn’t build it with me.
THE DESIGN QUESTION
Two characters share every turn of this conversation: the listener, who holds the member list but can’t recite it, and the assistant, which can play anything but can’t know which songs belong. Designing the dialog meant writing both of them down first.

Daniel
“The Era Collector”
Ten years and 7,000 liked songs deep. Remembers every era of his library by feel, and almost none of it by name.
Goals:
Get an era back by describing it the way he remembers it
Keep the songs he rebuilds somewhere findable
Pain Points:
Scroll collapses around row 300; search demands titles
Prompted playlists guess a vibe and can’t be told they’re wrong
Spotify Time Machine
“The Friend Who Was There”
Rebuilds a remembered era one five-second clip at a time, and treats every yes, no, and skip as data.
Behaviors:
Plays a clip instead of asking a question
Spends at most one question per turn
Limits:
Names the edge of the data instead of faking it
Adds nothing without a yes; saves nothing without an offer
One decision governs every turn: play when confident, ask one question at a time when torn, admit the edge when lost — and treat every verdict that follows as data.

Early decision tree
At a high level:
I build decision trees that inform the AI model on how to walk with the user through their music discovery process, considering various different cases. Three key factors I stuck with were:
01
Confidence Intervals Informing Decision-Making
Before it says a word, the assistant reads how well the request matches the listening history. A tight cluster means play five clips and ask nothing. Two live readings mean spend a question, one per turn, until it lands. Thin history means admit the edge and look sideways.
02
All or Nothing — No Half-Guessing
The assistant never hedges. When it guesses, it commits: five seconds of chorus, then it listens. When it can’t see the era, it says so out loud instead of faking a set. A wrong guess costs exactly one “no.”
03
Make It an Iterative Process
Every verdict is data. Yes adds one song; no leaves it out and steers the next clips away from its neighbors; skip sets it aside; a named gap widens the search; one remembered song re-centers what comes next. Nothing enters the era without a yes, and a correction never restarts the conversation.
Each sample conversation, drawn turn by turn in the whiteboard vocabulary: blue is what you say, green is what Spotify says and shows, diamonds are what the queue does after every verdict. Switch cases with the tabs, and tap a flow to read it at full size.
Spotify Time Machine
A conversation that rebuilds a remembered era, one membership judgment at a time.
Play the songs I was into during my shoegaze phase, freshman year of college.
Freshman year, got it. There’s a tight cluster from that fall. Here’s a taste of five — yes or no after each.
Four in. I’ll keep them coming, one at a time. Want me to keep this era around as we go, like your Daylist?
Yeah. Call it Shoegaze Phase.
Done. It’ll be in your Made For You whenever you want that fall back.

Confident
Cues corroborate, so the system plays its guess and just listens.
Play the songs I listened to a lot at the end of my junior year summer.
Quick check. Junior year of high school, or college?
College.
Okay. And when was that, roughly?
Last year.
That puts us in late summer last year. Your heavy rotation looked like this — yes or no after each.
Got it. That one’s out, and I’ll leave the one you skipped aside. Anything missing so far?
Yeah. You’re missing the stuff I played driving home from my internship. More of that.
Okay, leaning into your evening listening from those weeks. Three more.
Then that’s the center. Seven in, and everything I bring next comes from around it. Keep it as an era?
Yeah. End of Junior Summer.
Kept. It’s with your other mixes, and it’ll sharpen as you correct it.

Torn
One cue, two timelines, no calendar. The system converses with the user to scuplt the set one verdict at a time.
Play the songs I’d listen to after school in sophomore year of high school.
Honest answer: your history here only goes back to senior year, so I can’t see those afternoons directly. But I can look sideways — songs from that era you’ve saved or replayed since. Want me to try?
Sure.
Here’s what you’ve kept coming back to from around then — yes or no after each.
Some of these, yeah. But the real ones aren’t here.
Then anchor me. Name one song you know was in that rotation, and I’ll build outward from its era and sound.
Location, by Khalid.
Good anchor. Building the after-school set around it. Tell me what belongs as they play.
Kept two more — that’s five. This one’s going to build slowly. Want me to keep After School in your Made For You, with a few more to check whenever you’re back?
Yeah, do that.
It’s there now. No pings. When you’re back, I’ll have a few more clips ready.

Lost
The request cannot be fulfilled with the data available. One remembered song becomes the center.

