In February, Tactiq was an idea. By the summer it was a product running on four operating systems. The most important work happened before I wrote a single line of code.
Two months before the editor
For the first two months I stayed out of the codebase entirely. That time went to deciding what the product was actually for, who it created value for, and how the system would hold its shape as it grew.
There was no rush, and that was the point. A clean foundation is cheaper than a rebuild, and I was not chasing speed. I was chasing the right direction, which is a different thing and much easier to lose.
From late March to the end of June the work settled into one rhythm: measure, plan, build, ship, then stop and read the data before deciding what came next. The same loop every week. What shipped next was decided by what the numbers said, not by what I assumed while writing the previous thing.
What it runs on
Tactiq is a football match analysis product that pairs live match data with generative analysis, designed and built end to end by one person.
- Clients. One Flutter codebase across iOS, iPadOS and Android, with a separate Flutter Desktop target for macOS. Thirty-two interface languages.
- Backend. Serverless and active-active across three AWS regions: a hundred and seventy-six Lambda functions in production, forty-three of them distinct functions replicated to all three, with DynamoDB Global Tables and EventBridge carrying synchronisation.
- Analysis. A statistical engine, a separate learning layer, and generative tactical analysis on Amazon Bedrock. Every prediction is graded against the real result afterwards and tracked by a calibration system, so the product has a record of where it was right and where it was not.
- Security. Layered rather than perimeter: app attestation, HMAC request signing, signed short-lived tokens, TOTP, a KMS-encrypted database, audit logging and anomaly detection.
- Commerce. Cross-platform subscriptions reconciled server-side, priced per country from purchasing-power data rather than by flat conversion.
That list is the part people ask about, and it is the least interesting thing that happened.
Four roles, one head
Building alone meant holding four positions at once, and they do not naturally agree.
In an organisation those four people disagree out loud, and the disagreement is the safeguard. Working alone, the disagreement still has to happen or the decision is not real, but there is no room, no minute and nobody to notice when one of the four quietly gets skipped.
The one I had to watch was the engineer overruling the other three. Building something is the most immediately satisfying of the four jobs and the easiest to start before the other three have finished their argument.
What it taught me
Ambitious ideas only stand on clean foundations. The right direction beats raw speed, and the two are easy to confuse when the work is going well. Measurement comes before the fix, because a fix applied to a symptom you have not measured is just a change. Every step becomes the ground the next one stands on, which is why the cheap shortcut is rarely cheap.
Three months after launch there were more than fifteen thousand users, across almost every country in the world. That was a beginning rather than a finish line, and the next version was already being prepared for the tournaments opening in August.
And then it was time to take a breath and turn to the next thing, which I was already building quietly: a daily guidance product that starts from one birth record and works from computation rather than from generation.