Writing
Engineering principles, architecture trade-offs, and why boring technology usually wins.
Start here
-
Boring Technology Wins
I've watched companies chase shiny technology for nearly two decades. The pattern is always the same: promises of elegance, delivered complexity, and teams that can't sustain it.
-
Why rescue projects fail even when you do everything right
I used to leave snarky comments in code criticizing my coworkers. Years later I came back and realized I'd been wrong. That's when I learned how to actually do rescue work.
-
The IC Choice
After twenty years, people assume you either moved into management or failed to. There's a third option: you chose not to, because that's not where you have the most impact.
Latest writing
2026
-
Guardrails, Not Fewer Problems
When someone proposed replacing the Kubernetes platform I'd built with something simpler, I didn't argue in meetings. I wrote 60 pages. The argument that won wasn't about features — it was about what happens when things go wrong.
-
Building Four Emulators Without Writing a Line of Rust
I needed emulators that could script input and capture screenshots on demand. Nothing on the market did that. So I built four of them with AI — in a language I don't know — guided by decades of knowing what correct looks like.
-
The IC Choice
After twenty years, people assume you either moved into management or failed to. There's a third option: you chose not to, because that's not where you have the most impact.
-
Building Quizzie: A Real-Time Quiz App in Boring Technology
I needed a quiz app for corporate training. Three npm packages, vanilla JavaScript, and a polling fallback later, it works everywhere - including networks that block modern web features.
-
Shipping Three Projects (and What Opus 4.5 Made Possible)
An assembly education platform, an iOS card game, and an artillery game I've been trying to build since the early 2000s. Claude finally got them over the line.
-
Building for the Failures You Can't Control
Early in my career, I built ticketing systems for arts venues. Our platform could be bulletproof - but if the client's backend fell over, the on-sale still failed. That taught me how to build resilience around dependencies I couldn't control.
-
Six Years After Warning About Microservices
In 2020, I wrote a theoretical warning about microservices. Then I spent three years inside 120 of them. Here's what the theory didn't prepare me for.
-
Sustainable Software, Revisited
In 2023, I wrote about sustainable software development. I focused on engineering practices. I should have focused on whether the business underneath could survive.
-
Boring Technology Wins
I've watched companies chase shiny technology for nearly two decades. The pattern is always the same: promises of elegance, delivered complexity, and teams that can't sustain it.
-
Build for Today, Design for Tomorrow
Most failed systems I've rescued weren't too rigid - they were too flexible. Built for futures that never arrived. I've spent years untangling the results.
-
Process Theatre Kills Teams
I've worked in PRINCE2 environments where weeks were spent on documents nobody read. I've worked in 'Agile' shops that were just as ceremonial. The best teams I've been on had almost no process at all.
-
Write It Down or Watch History Repeat
I've spent years rescuing systems with no documentation. Weeks reverse-engineering logic someone could have explained in ten minutes. The cost of not writing things down is paid over and over.
2025
-
Building a ROM Collection Manager: Where Domain Knowledge Meets Multi-Threaded Rust
The technical challenges were solvable. The harder part was understanding how collectors actually work - the DAT ecosystem, verification workflows, and organisational patterns that had to shape every architectural decision.
-
Shipping a Rails 8 Book Tracker in a Day (With Claude Code Doing the Heavy Lifting)
AI-assisted development is fast. Surprisingly fast. But 'fast' hides decisions that AI can't make for you - scope, taste, and the stuff that only matters when you're the one who has to use it.
-
Teaching Assembly Programming (With AI Writing the First Drafts)
I'm building an assembly programming education platform. AI generates the first drafts. Every lesson will be rewritten. The honesty is the point.
-
Building Shiki Highlight API: How Development Workflow Saved My Syntax Highlighting
From 389 console errors to zero: building a high-performance syntax highlighter with CSS Custom Highlights API, Shiki, and Claude Code—and learning that workflow matters more than I thought.
-
Why rescue projects fail even when you do everything right
I used to leave snarky comments in code criticizing my coworkers. Years later I came back and realized I'd been wrong. That's when I learned how to actually do rescue work.
-
Building Rachel Part 2: Themes, Polish, and Production Deployment
From functional card game to production-ready web application: implementing a dynamic theme system, fixing critical bugs, and deploying to the world with bank-grade security.
-
Building Rachel: A Phoenix LiveView Card Game - Part 1
How I turned a 30-year-old family card game into a modern web application using Phoenix LiveView, complete with AI opponents and real-time multiplayer.
2023
-
Sustainable Software
Sustainable software development isn't just about clean code or green energy. It's about people, pace, and pragmatic decisions that last.
2020
-
Microservices, and why they're not always the answer
Microservices were supposed to save us. For most teams, they just moved the pain around — and made everything more complicated in the process.
2019
-
Lead Developer London 2019
Lead Dev London 2019 brought together 1400+ engineers and leaders for two days of inspiration, practical advice, and community — still my favourite conference.
-
Containers
Containers like Docker transformed how we build and run software — offering reproducibility, isolation, and a path to modern deployments. Here's why I changed my mind.
2018
-
Moving on from Guru Systems, joining Divido
After a great run at Guru Systems, I’m heading to Divido — a fintech company where I’ll be building out their consumer lending platform with PHP, Golang, and containers.
-
Deus Ex
Thoughts on Deus Ex: Mankind Divided, moral choices in cyberpunk, and why sneaking around is more fun than shooting.
-
Spectrum Next Update
Eighteen months after my last update, I'm still waiting for my Spectrum Next to arrive. Once it does, I'll be diving back into ZX Spectrum development.
2017
-
Joining Guru Systems
After two years of contracting with Guru Systems via Siftware, I’m joining their team to keep building their platform and expand into new areas.
-
Getting started with ZX Spectrum Development
Inspired by Revival 2016 and the Spectrum Next Kickstarter, I set out to build a ZX Spectrum dev environment on macOS using Pasmo, Atom, and ZXSP.
-
Not a Ninja
On choosing proven technologies, writing maintainable code, and avoiding hype like microservices for the sake of it.
2016
-
Revival Solstice 2016 and the ZX Spectrum Next
Reflections from Revival Solstice 2016, featuring talks by legendary developers and a look at the ZX Spectrum Next prototype.
2015
-
Joining the team at Siftware
After nearly two years at Impact Applications, I’m making a move to join Siftware, where I’ll be helping modernise legacy PHP systems.
2014
-
Elite: Dangerous
Why I'm so excited about Elite: Dangerous
-
Why I like Ruby on Rails
Reflecting on how I discovered Ruby on Rails and why it continues to be my go-to for personal projects.