Craig had a pen, a scrap of paper, and twenty minutes of muttering under his breath before he slid the tally across the table like he was presenting evidence in court.
It was a BBQ not long after lockdown lifted, my old football team back together and a bit more merry than usual for it. Two of my mates started arguing about who was the better FPL manager. One had won our mini-league twice and thought that settled it. The other reckoned career points were the real measure, more seasons, more consistency, more proof.
Two grown men, both closer to 40 than 25, decided this was worth a bet. Not just any bet. A drinking-game bet, the kind you only agree to when you've just been let out of a two-year lockdown and the novelty of arguing with someone in person hasn't worn off yet.
They agreed to settle it on cold hard facts: whoever had more career points across 20-odd years of FPL would win. Craig, our spreadsheet guy (he's obsessed), was stuck doing it the hard way, by hand, with nothing but pen and paper at a party.
I won't go into what happened to the loser. Let's just say it got messy.
The Split-Second Correction
What I will go into is what happened after. Watching Craig hunch over pen and paper manually totting up two decades of seasonal scores for two different people planted an obvious question: why is anyone doing this by hand? I'd dabbled with the FPL API before, so I knocked together a quick script to add up both totals properly.
It ran in a fraction of a second. And it turned up something Craig hadn't planned on: in his rush, he'd got the totals wrong. Luckily for him, it didn't flip the result, or there would have been serious, and frankly deserved, retribution heading his way.
That was the whole thing. A script to settle an argument between two mates. It should have ended there.
Evenings, Broken Gameweeks, and a Project That Wouldn't Stay Small
Except then I ran it for the rest of our mini-league, and that felt worth keeping. Then it got stale, because keeping it updated by hand wasn't exactly calling to me after a day spent coding for a living. Some evenings I'd chip away at it anyway, chasing FPL data without hammering their API too hard, and inevitably something would break the moment a new season started, or a gameweek came back blank, or two gameweeks merged into one.
It was a genuinely useful project to be bad at, in the right way. My day job was building high-converting websites, not wrangling large, messy datasets. I'd started as a front-end developer, so my database instincts were thin at best. This forced me to actually learn what Laravel could do with real data, not just render a nice page around it.
The Part That Was Actually Fun
The best part, by far, was building the algorithm to rank people properly.
I wanted it to reward the managers who kept finishing inside the top 1k, top 10k, season after season. But I didn't want it to demand 20 years of history just to be taken seriously, because that shuts out anyone who's newer and genuinely good. If Manager A has 5 top-10k finishes scattered across 20 years, and Manager B has 4 top-10k finishes out of 4 seasons played, Manager B should rank higher. That's not a marginal call. That became one of the earliest, firmest decisions in the whole build: reward consistency over longevity.
Getting that balance right took a long time, and it's genuinely subjective in places. Is a manager who won outright once, then spent every other season outside the top million, better than someone who's never broken the top 100k but has never dropped out of the top 500k either? I've had that argument, in various forms, more times than I can count, usually with myself, at 11pm, staring at a spreadsheet of my own.
Then FPL Got Harder
FPL has also got dramatically harder over the years, simply because more people play it now. A top 10k finish today is a different achievement to a top 10k finish when the game had a fraction of the managers it has now. That pushed me towards a recency factor: managers who've performed well in the last 3 to 5 years get rewarded for it, which keeps the rankings alive instead of calcifying into an untouchable top 100 that nobody new can crack.
At the same time, I didn't want a single good season to catapult someone to #1 overnight. A flash in the pan doesn't get to skip the queue. Fifteen top-100k finishes have to count for something, or the whole exercise stops meaning anything.
Everything, at every stage, came down to that same balancing act.
What Google Taught Me About Ranking People
More than once I thought I'd nailed the metric, then looked at the data from a different angle and thought: that doesn't seem fair. That's when reverse-engineering Google's old approach to search started to feel relevant. Early PageRank was crude enough to game, which is exactly why Larry Page and Sergey Brin kept adding factors and retuning the weighting for years afterwards, hunting for something harder to abuse. I was doing a small, personal version of the same thing, just with FPL managers instead of web pages.
Thirteen Million Managers Later
Version 1 held up fine on small leagues. Proving it at scale was the harder problem. Pulling and computing data for the full FPL manager base, somewhere around 13 million people, wasn't something I'd ever had to do in my day job at 5and3. It was new territory, and it took real effort to get right.
Once I had the full dataset, a few more weighting tweaks were needed, because something still felt off. The moment that stood out: Fábio Borges wasn't in the top 10. I'd always rated him as a genuine contender for the top spot, so seeing him missing told me the model was wrong somewhere, not him. After more fine-tuning, the usual names landed roughly where you'd expect, with a handful of good surprises mixed in. Which, honestly, is the entire point of building something like this. If it just confirmed what everyone already believed, it wouldn't be worth building.
Where It Sits Now
This whole thing sat as a side project for years, held together by evenings and stubbornness. It's only really become viable now because it's tied into the new WFCMS build, with AI doing a lot of the heavy lifting that used to eat entire weekends.
It started as a way to stop one mate lying about his career points at a BBQ. It's ended up as one of the more interesting things I've built. Funny how that works out.
Curious where you'd land? Check the FPL Hall of Fame yourself.