BlogProjects

Shut up and... build. A 4-week release

July 19, 2025 • Sam Wilson

Image: Lots of ideas, little action

At the start of 2025, Sam and I published Bookmark to the iOS and Android app stores. It was a project that took us over 4 months of developing in our evenings and weekend, and despite its simplicity, one I'm still very proud of. Sam even published a a great lessons learned blog on the process.

At the time, we both excitedly discussed what was next. We had a couple of brainstorming sessions over the following weeks and started shortlisting new ideas.

But then, well to be honest, not much. Sam and I both work IT jobs that often go 8-8, 5 days a week and we live on opposite sides of the world. There was travel, weddings and life. In the absence of a compelling project, I picked up the excellent *Build an interpreter in Go* book by Thorsten Bell and new apps sat on the back-burner.

Weeks went by, and then months and we had made no further progress. Our weekly Discord calls became fortnightly and then monthly. Our once seemingly scintillating idea backlog either looked too ambitious, too far-fetched or simply uninspiring.

Stop talking, start doing

When Sam and I next spoke in June there was very little discussion, the answer to our lack of meaningful activity was clear. We needed to set a deadline and build something, fast.

With a deadline of four-weeks set, deciding on a project became significantly easier. Suddenly the decision wasn't about what would be the most fun, or the most useful, or the most beneficial for us to develop new skills.

It was simply, what can we build in four weeks that would be a minimum valuable product?

Kevin Bacon and Compromise

When I pitched 'Seven degrees of Bacon' but with professional footballers to Sam, he was (probably rightly) a little sceptical.

"Will that be fun?"
"How will we get the data?"
"How will we find the links?"
"How will we work out the shortest path?"
"How will we get users?"

All good questions, but this was the joy of the 4-week self imposed challenge I reasoned. Maybe we couldn't find ALL the data, maybe we couldn't work out the shortest path, maybe (definitely) we'd end up with no users.

Compromise was going to be at the heart of this project. We'd have to work things out as we went, be willing to adjust our ideas, even cut corners where we needed to get something out.

With this spirit of compromise, the handbrake came off, the creative cloud dissipated and we were off. We were building 'Player Links'.

Moving fast

From our previous project, Bookmark - Sam and I had learned that in a two man team we could build cohesively at speed, even in different timezones across the world. Using Miro, WhatsApp and Figma to communicate ideas and tasks, we had sketched the initial journey and game design, built the backend, a skeleton GUI and the core game logic within days of starting.

We wanted speed and a familiar toolchain, so we opted for
- NextJS for the web application
- Supabase as managed Postgres
- Go for data ETL
- Vercel as our hosting and serverless platform

Graph databases were new for both Sam and I, so we opted for Neo4j and used Aura to accelerate loading and querying data to build complete puzzle solutions.

Adaptation and pivots

With our speed also came immediate compromise - a laundry list of features pushed to the backlog as we relentlessly cut scope. All players became Premier League players only, a slew of fancy animations turned into pragmatic designs. The concept of a puzzle library became a Wordle style 'once-a-day' challenge.

We iterated repeatedly on the core game concept, but found ourselves repeatedly reigning each other in, bound to our deadline. "Will it be fun" hung over us as a cloud of uncertainty.

Our codebase shifted and morphed, hasty rewrites and refactoring to paper over the core logic and engine as we got closer to our 4-week deadline. Code quality, conceptual separation, state management and rational thought were all sacrificed at the alter of progress. Claude and ChatGPT were more and more frequently relied on to troubleshoot a perplexing error, write a complex Cypher query, or rapidly prototype a new feature.

With just days to go before our ship day, our app resembled a shoddy mess of jumbled code, half-baked UI and game-breaking bugs.

🚀

After several late nights, early mornings and some caffeine-fuelled programming rampages, we released 4-weeks to the day from the start of our challenge.

The application is full of compromise.

It works on both mobile and desktop, but is heavily optimised in looks and feel for mobile. We didn't manage to release the 'shortest path' feature, despite having built all the code and database for it. We launched and then realised our code only showed one challenge that repeated every day (we promptly hotfixed that).

Many other issues we didn't hotfix. These were simply left as reminders of what this exercise was. It was about building something that delivered a minimal valuable experience, not a perfect one, from scratch.

We shared this application with a dozen friends and family that had a moderate, to fanatical, interest in English football.

The feedback, much like our app is simple. It's a fun game and people want to play more of it.

And?

Player Links is finished, we'll never touch it again. Or at least, we can choose not to.

We delivered an MVP in 4-weeks, a game that people find fun and that they can revisit, should they choose. There's a healthy backlog of challenges and we're pretty confident that the application has no critical bugs that would require ongoing maintenance or patching.

The infrastructure it sits on is all free, or could be paid for at a very low monthly cost if the free tier is removed in the future. We could similarly re-platflorm to alternate services with little hassle.

We may never work on Player Links again. To me, it is already a finished project.

However, despite my tongue-in-cheek condemnation of the code quality we produced, the application is actually pretty stable. There is a solid foundation to build on, and a small user base that may genuinely appreciate additional features and tweaks.

The app is available here should you want to test your knowledge: https://player-links.vercel.app - we may have even updated it since this article!