DEV Community

loading...
Cover image for Spotify's Random FAIL

Spotify Shuffle Sucks Spotify's Random FAIL

bytebodger profile image Adam Nathaniel Davis ・10 min read

As a programmer, I don't consider endless streaming music to be a luxury. Good tune-age is, quite literally, a core requirement of my workspace. To satisfy that need, I'm a Spotify Premium member.

For the most part, it's an epic service. If I divided my monthly bill by the hours of music I receive, it would easily be one of best values I've ever purchased. But that doesn't mean that Spotify is without faults. And at certain points in the past, those faults have driven me absolutely INSANE.

[NOTE: This is the second half of my treatise on randomness - and how it can ruin your users' experience. In the first article, I outlined some of the cognitive biases that can undermine "random" features in applications. You can read it here: https://dev.to/bytebodger/random-can-break-your-app-58bo]


Alt Text

Spotify Don't Know Shuffle

I have playlists. Most hardcore Spotify users do. My blues playlist has 436 tracks. My drum-n-bass playlist has 613 tracks. Most of my heavily-curated playlists have somewhere between 400 and 700 tracks.

I often switch between my playlists depending upon what's going on in my day and where I need my "headspace" to be. When I'm in frenetic code-euphoria mode, I'm cranking out my drum-n-bass list. When I'm in a more contemplative place, I might be listening to traditional jazz. So over the course of a single day, I might spend an hour-or-two listening to as many as 10 different playlists.

Here's the problem:

When I switch to a new playlist, I want to come into that playlist as though I've just switched the radio dial to a targeted genre station. That station doesn't know "where I left off". That station doesn't know what I might have heard yesterday. The station just keeps cranking along, oblivious to whether I'm listening or not.

The station has an expansive list of tracks they'll play. And they play those tracks, more-or-less randomly, over the course of several days. And I want my Spotify experience to mirror this.

But Spotify stubbornly, angrily, obstinately, pig-headedly refuses to let me have this experience. This refusal comes in the form of their utter disregard for their so-called "shuffle" function.


Alt Text

A Shuffling Fraud

If you've ever used Spotify yourself, you might be thinking:

But Spotify has a shuffle feature. It's a button that looks like two crossing arrows.


And of course, you'd be right. Spotify does indeed have such a feature. But the feature has nothing to do with a "shuffle". It's a lie. Spotify does "shuffle" the same way that Republicans do "civil rights". It's a button that does... something. But whatever it's doing, it has no relation to the label.

You see, in a perfect world, "shuffling" implies a true randomization of the data set. As I covered in the previous article, "random" doesn't mean that it will satisfy what every layperson views as "random". "Random" means truly damn random.

In other words, when you truly randomize a data set, it will have no bearing on any previous results. "Random" can, in fact, contain "trends" (although they are trends that will evaporate once you try to track them).

But when you use Spotify's "shuffle" feature, you'll find that those trends pop up all-too-often. You'll find that certain songs, somehow, keep creeping up to the top of your playlist. And other songs never seem to get played.

If you understand probabilities the way I do (and as a high-stakes poker player, I have some serious experience with this), at first you'll brush these repetitions off as the kind of fleeting coincidences that can occur in a truly random data set. But after you spend hundreds of hours listening to your playlists, you'll eventually come to understand that these strange coincidences have nothing to do with the vagaries of randomness.


Alt Text

The Goal

I thought my "quest" was simple. I didn't think I was chasing the Holy Grail. All I wanted was to get a fresh SHUFFLE of my playlists any time I desired.

What do I mean by "shuffle"??

Well, think of it just like a deck of cards. Between every poker hand, the cards are thoroughly shuffled. (In any modern context, this is done by an automatic shuffling machine.)

This means that every hand is a completely new, completely independent event. Yes, it's possible that you'll hear the same song that you heard in your last session. And it's possible that you'll "miss" other songs over multiple sessions. But I'm perfectly fine with that. I just want my playlists to be played in a truly random manner.

I want to know that, every time I "shuffle" a playlist, the Humpty Dance could come up as the first song in the mix. Or... I may not hear it again for awhile. That's the true nature of randomness.

But Spotify doesn't work this way. How do I know that??? Well, I'm glad you asked...


Alt Text

Know-It-Alls

I'm not the only one annoyed with Spotify's not-so-randomness. Many others have noticed that some of their songs get played repeatedly. While other songs simply never get played.

If you wanna get a sense for the scope of the problem, just google "spotify shuffle sucks" and behold the massive menu of rage posts. Their own "community" forum site has many threads complaining about the issue. One of those threads has 189 pages of ongoing comments, spanning back over years.

Is this a case of a tone-deaf company completely ignoring an issue? Not exactly. This is a case of an arrogant company swearing that they've fixed the issue. They published this cheeky explanation of their approach way back in 2014 where they graciously congratulate themselves for their high-minded brilliance:

https://engineering.atspotify.com/2014/02/28/how-to-shuffle-songs/

They acknowledge that the "shuffle" algorithm isn't at all random. They brag about how they've supposedly fixed it by implementing a better algorithm that accounts for peoples' misconceptions about randomness. And for the last 6+ years, they've stubbornly refused to do anything else about it - even though there are thousands of ongoing complaints across the internet about their super-janky faux shuffler.

But their shuffle algorithm doesn't even work the way that they say it does. If you spend excruciating amounts of time diving into the behavior of their application, it quickly becomes quite clear that some songs just get repeatedly ignored.

This isn't a case of me seeing nonexistent patterns in the noise. I can pretty much prove that their "improved", better-than-random algorithm just can't be bothered to play certain songs. In fact, I put up a repeatable use-case in their own forums. You can read it here:

https://community.spotify.com/t5/Ongoing-Issues/Please-stop-marking-shuffle-complaints-as-quot-not-an-issue-quot/idc-p/1783738#M49827

You'll also notice that I titled the post in their community forums as Please stop marking shuffle complaints as "not an issue" or "implemented". I gave it that title, because that's exactly what they do.

User after user after frustrated user complains about the exact same thing. And their response is simply to mark the complaint as "not an issue" or "implemented". For the post above, in which I gave them a detailed write-up of how to recreate the issue, they answered:

We understand your situation! We're looking into it and we're working on our shuffle algorithm. Keep an eye on any updates soon. Take care.


Then... they marked the ticket as "Not An Issue".


Alt Text

A Frustrating Problem

This probably feels like it's just a long angry rant about a particular company that can't be bothered to fix its own software. But I'm writing this up on Dev.to because there are valuable lessons for us to take from this example as programmers.

Spotify went down this path because people inherently misunderstand randomness. I get that. But they decided to fix a "problem" - by introducing another problem.

Most people just don't grok random sequences. They have 100 songs in their playlist. Five of those songs are by Justin Bieber. After the playlist is randomly shuffled, they hear two Justin Bieber songs in a row. And they start thinking: "Heyyy! That's not random!" But... it is.

If you shuffle your 100-song playlist that has 5 Bieber tracks, it's perfectly possible that you might end up hearing 2 of those tracks in a row. The same concept is at play when you thoroughly shuffle a deck of playing cards and two aces are dealt out in a row. It's absolutely possible. And it doesn't mean that the shuffle wasn't "random".


Alt Text

Don't Be Like Spotify

To be clear, Spotify was justified in trying to rig their "shuffle" feature. Because if your users repeatedly perceive that there's a problem in your app, then there is a problem in your app. It won't do any good to yell at them that they just don't understand randomness.

The mismatch between perception and reality is often most acute whenever we try to implement random features in our apps. It could be a music playlist. It could be a "quote of the day". It could be a game where the damage incurred by your character is calculated as a random die roll. In all these examples, it's tempting to just slap a random number generator on it and call it a day.

But if too many of your users perceive that the process isn't random, they may become frustrated to the point that they're no longer your users. In fact, if they're really frustrated, they may even complain to your potential future users. In the most extreme cases, you may reach a situation where you simply have no users - even though your random algorithm was mathematically flawless.

So if randomness carries the risk of being misinterpreted by your users, how can you solve the problem? Well, you could choose to follow the patented Spotify Method:

  1. Make an obtuse change to your algorithm and brag about it in a blog post.

  2. Offer no options to the user in the UI.

  3. Any time someone complains about the new algorithm, mark their complaint as "Implemented" or "Not An Issue" - without making any changes.

If this approach doesn't appeal to you, then, congratulations! You're not a douchebag. So what other options do you have?? Well... here are some thoughts:

Don't make monolithic decisions for your users.

Whenever possible, give your users options. I don't mind that Spotify felt it necessary to implement some kind of "enhanced" shuffle algorithm. That's fine. But give me the option to turn it off. Or maybe, somewhere in the "Settings", allow me to actually choose which algorithm I prefer when shuffling.

Don't treat your API as a fix for UX problems.

I bring this up because Spotify does have an API that will allow tech-types like us to build our own shuffle features. I eventually solved this by writing my own custom shuffler that leverages their API. There are a handful of other "Spotify shufflers" out there on the web.

But this should never be the "answer" to problems inside your app. It's wonderful if you can manage to supply a robust API that allows users to extend your app's functionality. But the vast majority of your users will only ever use your app... inside your app. They either don't know how to build API integrations - or they can't be bothered to.


Be transparent with your algorithms.

We tend to protect our algorithms more than we protect our children. But when you have a feature that frustrates your users, that frustration can be multiplied by their ignorance of how the app is actually working. I'm not saying that you need to hand over your complete code base. But for something as "magical" as shuffling, it would go a long way toward mollifying your users if you just explain to them - clearly, accurately, and concisely - exactly how the sausage gets made.

The Spotify experience is especially aggravating because, after extensive research and testing, I was able to repeatedly demonstrate that their algorithm does not work in the way they claim it works. And yet, they refuse to do anything about it. In fact, they refuse to even acknowledge the issue in any way.

Give users a history of past results.

This can go a long way toward alleviating user frustration. It's only natural that, when I'm using your battle simulator, it feels to me like I lose at a disproportionate rate. But if I can view a history of my last 500 battles, it's at least possible that I may look back over that history and realize that the world (your app) isn't truly tilted against me.

Carefully consider if randomness is what you truly want in your app.

Once you understand that users inherently misunderstand randomness, it's reasonable to ask yourself whether you really want to use randomness at all.

For example, imagine that my app is an online media player that continually streams a selection of video highlights from local high school athletics. Let's also imagine that I have a library of 10,000 such clips to choose from.

It would be incredibly simple to just load up the IDs for all 10,000 and then randomly select one after another after another. But I can almost guarantee that this will lead to complaints from my users.

You see, it's inevitable that, in my random video queue, I'll eventually play two, or three, or four highlights all in a row from the same high school. It's also inevitable that some of my viewers will start griping about the idea that my app is "biased" toward one school, or against their favorite school.

It probably makes more sense to spend some time categorizing the video clips by school, by sport, by player, etc. Once they're categorized, I can write a more tailored "randomization" algorithm that will take these factors into account before building the video queue. Yes, that requires more work, and more forethought. But if it fosters the long-term success of my application, it's well worth it.


Conclusion

In the end, there are some times when "true" randomness is absolutely necessary. But be warned, it's almost impossible to implement a feature based on randomness that won't lead at least some of your users to complain about the non-randomness (that they perceive). How you choose to address those perceptions will go a long way toward determining the success, and the public acceptance, of your application.

Discussion (9)

pic
Editor guide
Collapse
camerenisonfire profile image
Cameren Dolecheck

Great explanation of your thoughts. It taught me a lot about an aspect of a service I hadn't thought too deeply about.

I certainly get your sentiments, but overall I think Spotify is probably doing the best thing for their business the way the algorithm works now. How they control randomness now seems to satisfy a vast majority of their user base. Those who dislike the current algorithm probably complain disproportionately loud (like this entire blog post) for the number of folks who truly dislike it.

I don't think it is the right product decision to create more options, most of the time. There certainly are use cases for options, but those come at a cost. Not only is there an on going development cost with the increased complexity, but there is also a usability cost. Spotify specifically has done a great job of trimming down their UI to be the bare essentials. I still remember when there was a built in addon marketplace in the app.

Adding these settings probably does not warrant a large enough ROI to persue. I mean look at yourself, you clearly care a lot about this feature, but is that going to lead you to a new streaming music application? Probably not.

Also, you made the comparison of wanting switching playlists to work like switching radio stations, but those are even less random even in the most free and indie stations. I use to be a music director for a large college radio station, and we scheduled our music, for when no one was DJing, with weighted randomness.

I'd be curious how other streaming music platforms handle shuffling.

As a side note, the political jab in your post is a bit unfounded and unappreciated. I think dev.to should be mostly free of political friction. Clearly that isn't a true rule, as everything is political now adays, but blatant things like your Republican comment I think should be discouraged.

Collapse
thepeoplesbourgeois profile image
Josh

Life is Strange 2 had the greatest response I've ever heard to a heartfelt gripe about how talking about politics messes so much stuff up. (The "stuff", in this case, being two boys' lives in a Seattle suburb with their father, whose own life was decidedly less messed-up in the moments before he was no longer alive, compared to how his life goes throughout the rest of the game, which is not at all.)

Kid, everything is politics.

— Brody, Life is Strange 2

That out of the way, I would be remiss if I didn't also spurn this particular political reference of Republicans' handling of civil rights, when Democrats have historically been all too willing to uphold decorum before observing humanity

Collapse
miketalbot profile image
Mike Talbot

A brilliant write up and I totally get your frustration. Obscure algorithms often make us wonder about bias I guess - are they skipping those songs for a reason? Financial? Their own moral code... You can make a conspiracy out of everything.

It's not just random though. For instance, our application tries to present records in a sensible order for users. The problem is that the inputs to what makes an ideal order are simple to propose but have "unintended consequences".

So in our case, we provide a service where users can prove their credentials to perform certain hazardous and semi-hazardous actions and demonstrate that they have the right levels of insurance. There is a legal requirement in many jurisdictions to vet external parties before they have access to a worksite.

What order do we put the results in? We have a Google-like search, so I can search for "Bob Plumber Air Con" near some location and it will respond in order. Now with geography, it will use a basic drive time calculation to order the results, and then it will score based on where matches were found and if they were exact matches or "sounds like" ones.

We also want to rank based on factors like "is their insurance info up to date" and then you have salespeople wanting to rank people higher if they are new or up for renewal. Those kinds of moral decisions have to be removed because they just pollute the whole thing with no meaningful purpose for the user. Even without them you can end up in some strange result sets that the user thinks are totally broken, even though they are absolutely working fine.

I guess the moral of that is: if the user thinks it's broken, it's broken. If two or more users would have conflicting views you have to give them the ability to solve the problem in a way that works for them.

Collapse
bytebodger profile image
Adam Nathaniel Davis Author

Obscure algorithms often make us wonder about bias I guess - are they skipping those songs for a reason? Financial? Their own moral code... You can make a conspiracy out of everything.

Exactly. I went through multiple mental cycles trying to determine if there was some kinda underlying motive to the rigged shuffling. In the end, it doesn't really matter whether there is or isn't something nefarious. The critical point is that obfuscated processes can foster conspiracy theories.

Those kinds of moral decisions have to be removed because they just pollute the whole thing with no meaningful purpose for the user.

I've been through a similar scenario. I worked for years on applicant tracking systems. We had this fancy comparison engine that would try to do a "smart match" between a job description and the applicants' resumes. Then it would assign a score and sort the applicants from best-matched (theoretically) to least-matched.

For some of our big corporate clients, we had to disable this feature. The reason was that, to comply with federal hiring statutes and liability concerns, the companies had to keep records of tangible qualifications that had led them to choose one candidate over another (as a counterpoint to the idea that they may have hired the applicant because they were male, or white, or whatever).

But if they were sorting candidates by our magic (meaning: obtuse) algorithm, there was no way that they could satisfy the audit requirement. In fact, their lawyers informed them that merely having this feature enabled in our app represented a liability to their company. Because if it was enabled, and some hiring manager sorted by that "magic" number (whether it was by accident or on purpose), that could theoretically bias the hiring manager in favor of a criterion that they could not define.

I guess the moral of that is: if the user thinks it's broken, it's broken. If two or more users would have conflicting views you have to give them the ability to solve the problem in a way that works for them.

Absolutely. That's definitely my biggest frustration with the Spotify anecdote. I couldn't care less that they wanted to create their own fancy "better" shuffling algorithm. But when they did that, they removed the basic algorithm - the one that did real shuffling.

There's an overall air of condescension there that I've actually seen in many other companies/apps. It's this mindset that says, "We've decided that this is the best approach for you. You're welcome."

To me, it's particularly galling on the shuffle algorithm. They changed it because so many people didn't understand/appreciate what was happening when it was just a simple shuffle. I get that. But I do understand/appreciate it. And I definitely want to have the option for a real shuffle.

Collapse
thepeoplesbourgeois profile image
Josh

I've quite appreciated iTunes (which is what I will call Apple's Music app [which is not to be confused with Apple Music {which, itself, is not to be confused with Apple Records}], now and forevermore) and its smart playlist feature, for the fact that I have one such playlist, containing all of the songs in another playlist1 that I haven't heard in at least 25 days. I also have another playlist of all of the songs in my library that I haven't heard in over six months. This one gets... slightly less play, mainly for the fact that I have a lot of musical soundtracks, video game soundtracks, and many other songs from earlier years that, for better or worse, fit under the umbrella category "dork music", and the shame of those songs weighs heavy on me.

BUT, ANYWAY, with my "not heard in nearly a month" smart playlist, I keep abreast with any algorithmic biases that may be present in Apple's shuffle algorithm, and tend to be pleasantly surprised at how well it manages to have me hear all 400+ songs in that playlist fairly regularly.


  1. (which — you wanna talk about "so improbable as to be impossible" some time — has, for the past two years and counting, shuffled in such ways, that the song playing at any given moment has underscored what has been happening to me or around me in that moment. Yes, I'm saying that my life has had its own theme music. for the past two. years.)) 

Collapse
bytebodger profile image
Adam Nathaniel Davis Author

I'm not an "Apple guy", but I totally appreciate the utility of a "smart playlist" feature. I don't have any problem with Apple, or Spotify, or anyone else choosing to manually tweak an otherwise-random process. I get it. And quite frankly, it makes sense.

My primary annoyance stems from two factors:

  1. Labels matter. Spotify doesn't have anything called a "smart playlist". They have... "shuffle". As a poker player, I know what "shuffle" means. And what Spotify does when you click that button most certainly is not a shuffle. Don't tell me that this button will shuffle my playlist if it does no such thing.

  2. Features matter. Having the ability to truly randomize a playlist (i.e., shuffle) is a nice feature. It's a feature that's desired by a great many Spotify users. I know this because I've seen the forum threads that stretch on for thousands of messages from other users who are exasperated by Spotify's failure in this matter. So I would argue that any service that purports to playback your own lists should always offer the option to do a true, simple shuffle. If they want to offer alternatives way to "shuffle" the playlists weighted on other factors, that's great. But don't use those alternatives to completely replace the basic shuffle feature.

Collapse
thepeoplesbourgeois profile image
Josh

I fully agree. The current behavior that they call shuffle should be called something truer to what it actually does, which sounds more like an auto-DJ.

Collapse
tomfern profile image
Tomas Fernandez

Great! Now you've ruined the shuffle feature for me, I'll never be able to use it again without thinking about this post 😛

Collapse
bytebodger profile image
Adam Nathaniel Davis Author

Just think of it now as the "Ordered In A Spotify-Approved Way" button!