On 5 July a single commit arrived with a long name: "Add Jackson Model v2-v9".
The first week had borrowed other people's ideas. Jackson was Andrew's own: a power ranking of every team, built on an algorithm he designed. How it works is the one thing in this story that stays in the workshop. What doesn't stay there is everything it predicts - and how every one of those predictions turned out.
Rankings like these learn from every result. Which is exactly where the trouble started.
The rankings that moved on their own
Before the new season had kicked off, the Premier League rankings were climbing. Every hour. With no matches being played.
The job that updated the rankings looked back over the most recent finished matches each time it ran - and applied every one of them again. And again. The fix was a ledger: each result is written down when it's applied, and a result already in the ledger is never applied twice. The rankings were wiped and rebuilt from scratch.
Two days later Andrew spotted the Premier League moving again. "There haven't been any games played." A second bug - some results being counted twice. Fixed.
On 8 July, in the middle of all this, the project made the decision the rest of the story depends on. Accuracy tracking was reset to start from that day. Nothing was deleted - but from 8 July, every prediction counts. The record starts here.
Out of the chat window
The next morning, the way the project was built changed too. The first two weeks had happened in a chat window, with code copied out and saved by hand. On 9 July the work moved into Claude Code, where Claude could read the whole project, change the files itself, test them and push them live.
Andrew's first message in the new setup, at 07:01, was three words: "read claude doc" - the handover document from the chat sessions.
Within two hours the rhythm that built everything since was set. Andrew describes what he wants, in plain words. Claude builds it, tests it and explains what it did. Andrew tries it, and says "push it". By 09:11 he'd had enough of being asked: "Yes, stop asking to push. Just push it."
92% for the underdog
Then came the prediction that made no sense. A team ranked well below its opponent was given a 92% chance of winning, because it was on a hot scoring streak and the goals were outweighing everything else. The power rankings - the whole point of Jackson - were being drowned out.
Andrew's correction was short. "The main driver for results will always be the power points."
From 9 July, the rankings come first. And if a team has no ranking, Jackson makes no prediction at all, rather than faking one.
The 38% question
On 10 July Andrew spotted something else. A prediction gave the home side 38% - the most likely single result - and the pick went on the home win. His question was the right one. The other two results added up to 62%. "Would we predict a win with only a 38% chance?"
It's the question at the heart of everything that follows. A pick is not a probability. Confidence has to be measured, not assumed.
It's also the partnership at its best. Claude can read every line of the system in seconds. Andrew looks at one number on one match and asks the question that matters.
Keeping score
The rest of the week built the scoreboard. On 9 July Andrew asked for Model vs Model: "I want to pit each model against each other and track this over time, to see which model returns the most money for a £1 hypothetical wager." Every model would pick its own five-team accumulator every block, and every result would be kept. The same morning he asked for a Brier score for every model - the measure this series keeps coming back to, because it scores the probabilities, not just whether the favourite won.
And on 10 July a new model appeared. Alix is a self-learning version of Jackson: once a week it studies its own settled predictions and adjusts itself. Andrew set the terms on day one. Alix would stay private - no posts - until it could prove it was more accurate than Jackson. "Then we will release it and share the story."
This is that story. Alix hasn't earned its release yet.
The lab book
- Tested: blending other people's expected-goals data into Jackson. Replaced on 10 July with Jackson's own measures, learned only from results.
- Didn't work: letting a goals streak decide who wins. The 92% underdog ended it.
- Didn't work: one home advantage for every team. Replaced by each team's own - then turned down when Andrew said it was "too high".
- Didn't work: a live bet builder for televised games. It returned one prediction - there wasn't the data on corners, cards or tackles yet. Removed later that month.
- Found and fixed: rankings that drifted forever; results counted twice; and matches decided on penalties or after extra time, invisible to every "is it finished?" check in about nineteen files - common in World Cup knockout games.
- Still testing: the settings Jackson runs on. Many started as educated guesses, marked as such in the code. Testing them against results is Alix's job.
Next stop: a train.