Origins: sketches, principles, and a v1 worth wrapping

prologue origins, match-engine

The first commit in this repository is not the first day of the idea. Long before Initial ME version landed, I had a conviction about how a football match engine ought to behave — and I spent a stretch of time trying to earn that conviction rather than invent it in a vacuum.

I started with sketches: rough models for how possession, chance creation, and finishing might interact. I looked at open-source projects on GitHub to see how others had framed the problem, not to copy a codebase, but to understand which abstractions held and which collapsed under realism. In parallel, I went back through the football management games I had played over the previous eighteen years — FIFA’s arcade clarity, Football Manager’s depth, Hattrick’s weekly rhythm, Trophy Manager’s online league pressure — and tried to distill their match simulation philosophies into a short set of principles. From those principles I tried to marry pragmatism with realism: enough levers to drive believable outcomes, not so many that the model became unmaintainable folklore.

Then came the empirical half. Using publicly discussed Opta-shaped frequencies for real-world football over roughly two decades, I estimated how often various in-game events should appear. Combining those frequencies with the levers I had chosen let me build a personal match-engine model. I tested it the hard way: crude simulation functions, run over and over, tuned until the outcomes sat in a band that felt somewhat believable rather than cartoonish or coin-flip random. That work was not yet “the match-engine as we know it now” — it was a laboratory for whether the idea deserved a product around it.

At some point I stopped. Day-job gravity won for a while. The itch returned later, and when it did I came back with a clearer brief: build a v1 engine cleanly, then build a game world around it. If the world attracted interest, I could invest in a much more realistic engine later. That trade — ship a coherent loop first, deepen the simulator when the loop proves it matters — is how The Dugout as a project came to life.

In the weeks leading into the repository record of 2025-04-16, I cleaned up the match-engine work, moved it into a new home, and started documenting what I would need from a game before I could leave Trophy Manager and play something of my own consistently. The commits that day — passing numbers, shot selection, set pieces, weather, substitutions, ratings, a CLI contract — are the first public footprints of that renewed vigour, not the whole journey that preceded them.

Paths not taken include shipping a pure UI prototype with mocked results, or chasing a fully Opta-faithful simulator before any managerial loop existed. Either would have satisfied a different ambition. The path taken was deliberately narrower: a portable engine envelope first, then a world that could hang seasons, transfers, and inbox drama off outcomes I was willing to stand behind.

What it unlocked was permission to build outward — Nest, a client, seed data, clubhouse surfaces — knowing the centre of gravity was already a match that could be argued with in tests.

← All entries