I spent a Saturday afternoon modelling an AFL match as a typed event stream. There was no client. There was no product. The Crows were on, my laptop was open, and I had a question I wanted to answer for myself: what is the smallest set of event types you need to describe a game of footy in a way that you could replay the match by reading the file?

The first attempt had about forty event types. Possession changes, marks, free kicks, ball-ups, fifty-metre penalties, goals, behinds, the lot. After a quarter of watching and writing I’d reduced it to fifteen by noticing that most of the granular events are derivable: if you know who has the ball and where, a great many things follow.

The interesting bit was modelling spatial information. A football field isn’t a grid; it’s an oval with positional zones that overlap. I landed on a coarse fifteen-zone model — forward 50, midfield wings, defensive arc, etc — and a flag for which end the team was kicking to. Crude, but sufficient to reconstruct field shape from the stream.

It is, as far as I can tell, completely useless. No analytics platform needs this. I learned three things, none of them about football: that modelling discretisation tradeoffs is fun, that the act of describing a familiar thing rigorously makes you see it differently, and that the best side projects are the ones with no possible audience.

Recommended. Pick any sport you watch instinctively. Force yourself to write down what’s actually happening, in a form a computer could read. It will be more interesting than it sounds.