By mid-May the dump had moved on. The WATMM thread was openly discussing what should be on a hypothetical official compilation, and Richard had dropped a line in his SoundCloud account description about “lots of other releases planned on warp” alongside the suggestion he might do a “best of/faves” if there were “some sort of poll”.
The thread caught the hint:
“i think if there were some sort of poll or something, I would get the best of/faves mastered & pressed up/backed up.” come on, people please. don’t you see this is an invite! someone should set up a poll this instant. i’d do it but i lost my fingers in a masturbatory incident last night.
I’d already written a small Python tool that scraped the SoundCloud API for the account so I could track plays, likes and comments locally. So when the thread started turning toward “someone should build a poll”, I had most of the hard bit done. The first proof-of-concept went up at catstick.com/django-mantionvote/frontend on 20 May 2015, five days after the thread asked the question and four days before the public launch.
I can probably whip up a voting thing (with it grabbing up to date tracks from the soundcloud api) pretty easily. Y/N? (I’m being serious BTW, already built something against the SoundCloud API earlier to pull down comments for archival)
The thread was supportive but split on timing. A few people thought voting while the dump was still growing was premature.
I really think it’s too premature to do a voting thing. Tracks are still coming. We could end up with 1000 tracks for all we know. Let the man do his thing! When he finishes (yes, he has to stop someday…I hope he goes on forever but that’s impossible!), THEN we can do a vote.
Fair concern. The answer I was trying to describe on WATMM was a dynamic poll, not a one-shot: new tracks get added as they’re uploaded, votes can be changed at any time, rankings update continuously. I was not proposing a final tracklist while the dump was still moving.
There were already polls before mine. The most-discussed was an EasyPolls vote someone set up on 17 May 2015 with all 227 then-current tracks loaded in. Static poll, no edit-after-the-fact, no tracking new uploads, single-shot voting. I’d already been working on something more involved and posted to say so:
i’m already working on a dynamic voting system! hoping to get something up tonight after work…
“Hoping to get something up tonight” was optimistic; it took the rest of the week.
To be clear, I think doing some sort of final vote now doesn’t make any sense… but I have some ideas about how to approach this assuming the dump is ongoing. … and I said I’ll see what I can do over the weekend, doesn’t mean I’ll have a fully working voting system with all bells and whistles finished, but no better time to start!
Within a couple of hours Joyrex, WATMM’s admin since 1999, had shaped the brief from his end:
What if as he added new tracks to the SoundCloud, they’d appear on a page to be voted on? It would be kind of neat to have a dynamic page where at any time the top SoundCloud tracks could be seen, either by community votes, or by plays/favourites from SC…
I’d already been talking to Joyrex about helping out with admin work on WATMM, so the direct messages were part of an existing conversation. He messaged me to offer the watmm.com subdomain and forum-side coordination, and we agreed it’d run as a WATMM thing, branded under the forum’s banner, even though the hosting was mine. That’s why the URL was user18081971.watmm.com despite registering the domain you’re on now, and why every press write-up described it as a “WATMM-hosted poll”.
A roadblock and a SoundCloud DM
Two days into building the prototype I hit a wall. The plan was to use SoundCloud’s own play and like counts as a starting signal. But about 80 tracks weren’t reporting stats at all:
guh, roadblock. so i’ve started off by making a scraper and a page that grabs all the track info + displays it in a way that we can sort by plays/comments/likes/etc. (i figured that would at least start to give some sort of indicator of most popular tracks that i can extrapolate from to assist with voting) many of the earlier tracks seem to have this stuff turned off though…
oh god so i just uploaded a track to my own SC to see what it looks like from that end… and noticed this: “Quiet mode”, “Hide stats”. Which according to the right you need a Pro account to unlock…
The Pro account I’d gifted in January had unlocked a feature that let him hide stats per-track. He’d been using it. The fix had to come from him, so I messaged him on SoundCloud ostensibly about the stats:
His reply turned this from a thread-side-project into a real design conversation. Once it landed, the WATMM thread got told, and the rest of the build week happened in public:
been chatting with afx on sc about this, relevant bits of what he said regarding voting/a release. that said, i’m fairly convinced he at least lurks here (he hasn’t said that but given WATMM’s involvement with the caustic window release et al, I’d say it’s a safe bet, so hi rich :) and yes, i am already implementing this how he suggested (except more like ~top ~20 or so tracks, voting can be changed/updated at any time and it updates as tracks are uploaded, and i’ll leave it up for a long time…)
Indeed, lots of xf-enhanced goodness coming soon…
The design conversation
SoundCloud’s interface, a scrolling feed of waveforms, couldn’t sort or compare, biased plays toward the earliest uploads, and made the “likes” counter self-influencing. There was no way to engage with the catalogue as a catalogue. Richard’s first useful direction was that a final, static poll would miss the point. People change their minds, the dump was still moving, and the poll needed to stay live long enough for people to actually digest the material.
In the same reply he framed the site less as a ballot box than a bigger version of a process he’d already used privately:
He also wanted the poll to have time to breathe:
So the plan I sent back was minimum-viable: every track, sortable by various stats, pick your top 20, change your selection any time, votes update continuously so newer tracks aren’t permanently disadvantaged. Once the prototype was in shape I sent through the URL:
The reply was brief:
I noted the visual design was binaryfold4’s, not mine, and asked a few open questions: lock down the votable tracks or vote on everything; what happens as the dump grows. His next message, a day or two later, had the whole shape of what eventually shipped:
The first sentence (more votes, longer release) became the eventual top-30 cap. The middle paragraph (a single fanatical vote shouldn’t look the same as a casual top-twenty pick) became the starring concept I spent the next year iterating on. He was thinking compilation curation, not statistics. A flat top-30 wasn’t going to tell him what to press to vinyl.
The hidden stars
I floated a two-tier system: public top 30, plus a smaller starred-track vote on top, five stars, with heavy expected overlap but useful for surfacing high-conviction picks. Then, separately, an idea I was less sure about:
He was into the hidden-results idea, and wanted the private layer to include more than stars. He then doubled down:
I pushed back on “make everything invisible” for one reason: if nobody can see anything, nobody comes back, and a poll without engagement is a form people fill in once.
He settled the numbers:
So: top 30, public, sortable. Five stars, hidden, allocatable however the voter wants, five on one track if you really mean it, or spread across five tracks if you don’t.
The “don’t likes”
A day or two later, almost as a postscript:
This surprised me at the time, but shows you how he was thinking. He wanted to know which tracks shouldn’t be on the record as much as which ones should, and asked for it almost apologetically. It shipped after a renaming round; garbage (an earlier suggestion) didn’t feel right to either of us, can’t get into did.
binaryfold4 turns up
The prototype I had ready on the night of 17 May was, charitably, a very generic Bootstrap page. Sortable table, checkboxes, login button, dirty blue-grey on white. Functional, but ugly. I posted a screenshot into the WATMM thread anyway. Within a day, a member I hadn’t spoken to before, from binaryfold4, replied saying he and his colleagues were huge aphex fans and wanted to put a real front-end on it for free. I said yes within ten minutes, decoupled the frontend, uploaded it to GitHub and shared the repo. Two weeks later, with some back-and-forth, the site looked incredible.
Launch, 24 May 2015
The site went into beta around 22 May at a staging URL shared with a handful of WATMM regulars. chatmm (the forum’s chat channel) was the test bed for the first day, mostly checking the SoundCloud OAuth flow worked across browsers. The first vote in the database is logged at 2015-05-23 14:19 UTC, from one of those early testers.
Joyrex posted the public launch thread on 24 May, giving the site the WATMM banner that turned it from “something xf is working on” into “the WATMM voting site”:
Yep rdj has seen it and gave positive feedback. This will probably run for some time (likely many months) as he knows it’ll take time for people to properly ingest all the tracks (people can go off tracks, change their mind etc), and I’m hoping dearly we see many more. I’ll host this thing for years if I need to.
(That line was more of a commitment than I realised at the time. The original VPS ran continuously from launch day to 2024, and the dataset this archive is built on is everything that site logged in those nine years.)
The thread got excited, overthought the rules immediately, started tactical-voting, and posted design feedback that got rolled into the live site over the next day or two:
fantastic ! thanks XF you’re the man !
I was thinking about tactically voting, obv there are the ones like Organ and Ibiza Spliff that everyone will go for, they are amongst my favourites too but I feel that everyone will pick them and some of the other great tracks won’t get represented so much…
btw xf i like the minimalistic design of the page and the font choice, nice :-)!
Richard had seen the staging URL before chatmm did. I’d sent it to him for sign-off, he registered a real account (the Django auth_user table has it at 2015-05-23 17:28:01 UTC, the second account on the system after mine), clicked through the voting flow, and gave the OK. What shipped at launch was the public vote only, top-20 rather than top-30.
28 organ
The track that won, comfortably, across four years of voting on a catalogue that stopped growing in December 2015:
2,041 top-30 votes, 120 loveds, 18 not-loveds, ahead of 14 Cornish Spreek5b in second place by a margin that grew rather than shrank. Popularity curve over time, top two:
Public and hidden votes agreed on this one, which is the case the starring system was meant to surface.
The hidden polls and the rename from “stars” to “loved” and “don’t-likes” to “can’t get into” went live on 5 July, in the same release that introduced multi-poll support and the ability for a poll’s results to stay private to Richard and me (the live FAQ at the time confirmed it publicly: “the ‘results page’ user18081971 will see is different to what the public sees”).