Blog (1 of 16)
-
Don't Do Code Reviews
In the last post I argued against quality assurance as a separate activity. The same argument applies, almost word for word, to code reviews, and I am even less comfortable making it: at Qafoo we built a code review tool. On an internal product team the asynchronous pull-request review has become the default, and it is the wrong tool for almost everything we use it for.
Wednesday, 1 July 2026Read more ➞ -
Don't Do Quality Assurance
I co-founded a consultancy that sold software quality for roughly a decade. The advice I am most certain about after those years sounds like a contradiction coming from me: do not do quality assurance as a separate activity. The moment a dedicated QA role appears, the developers quietly stop owning the quality of their own work, and that is the wrong direction.
Wednesday, 24 June 2026Read more ➞ -
HTMX and Web Components Instead of React
Our data platform's frontends are catalogs, dashboards, and detail pages: request/response-shaped applications. We build them with server-side rendering, HTMX, and vanilla web components. The question is not "why not React", but which of our actual problems a client-side framework would solve. Walking through the inventory the answer was: none, at a price we would pay for a decade. As a bonus, making components an explicit opt-in turns accessibility from discipline into the default.
Wednesday, 17 June 2026Read more ➞ -
Style the Document, Not a Component Tree
BEM and CSS Modules solve scoping at the cost of making every element a one-off, and a pile of isolated components is not a design language. We style semantic HTML elements directly, constrain every color and distance to CSS variables, and use a small web-component base class instead of a framework. These old-fashioned rules matter more than ever now that LLMs generate frontend code faster than any human team could.
Wednesday, 10 June 2026Read more ➞ -
Nothing Shared, Everything Gained: What It Cost to Finish
I left the start-up world not because I failed, but because I'd optimized for the wrong metric — I was building systems that scaled while being the system that wasn't. This is the post I wasn't sure I'd write, about why "Nothing Shared, Everything Gained" needed me to stop before it could be finished.
Wednesday, 20 May 2026Read more ➞ -
Nothing Shared, Everything Gained: Boring Scales
Every few years our industry discovers a new way to make software development complicated, but most web applications are not technically interesting — the interesting part is the domain. My book is deliberately boring: four layers, strict dependency direction, stateless services, and it worked the same way for five engineers and for seventy.
Wednesday, 13 May 2026Read more ➞ -
Nothing Shared, Everything Gained: The Architecture
The entire architecture in the book fits into one sentence: Controller → Service → Gateway → Storage, with strict dependency direction and one job per layer. It isn't a new methodology, it's a distillation of practical experience into four concepts that, put into perspective, prevent most structural problems from ever appearing.
Wednesday, 6 May 2026Read more ➞ -
Nothing Shared, Everything Gained: The Thesis
Writing testable code is essential, but writing tests is not — at least not immediately, because comprehensive suites for code that might get cut next sprint are waste, not discipline. The actual non-negotiable is pushing side effects to the edges so that the code between them stays stateless, local, and changeable without fear.
Wednesday, 29 April 2026Read more ➞ -
Nothing Shared, Everything Gained: The Problem
A team that hadn't shipped anything in six months, controllers with NPath complexity causing integer overflows, 2000-line methods, and session arrays nobody understood — and twenty-five days later they were shipping again. The same pattern repeated across more than a hundred teams over seven years, and the common thread was always side effects.
Wednesday, 22 April 2026Read more ➞ -
Nothing Shared, Everything Gained: The Origin Story
Ten years ago I started writing a book about software architecture and then life happened: I co-founded a company, scaled it to seventy engineers, got acquired, and burned out. The decade in between didn't make the book obsolete, it proved the ideas worked, and the finished result is now available at codethatships.com.
Wednesday, 15 April 2026Read more ➞ -
Fast Fashion for Code: How the Power Grab Masks a Quality Crisis
AI code generation isn't the industrialization of software development that vendors promise. It's fast fashion: cheap, disposable, and hiding a massive structural shift in power from the people who build software to the companies that control the means of generating it.
Tuesday, 31 March 2026Read more ➞ -
From Commerce to Campus: A New Stack, A New Purpose
After fifteen years of founding companies and scaling commerce platforms, I'm now a software architect at FernUni Hagen, building a Learning Analytics data platform that helps students succeed, with a Modern Data Stack and consent-first design for highly sensitive data. I made the switch for meaning and work-life balance, and found both, plus an amazing team to work with.
Thursday, 19 March 2026Read more ➞
Subscribe to updates
There are multiple ways to stay updated with new posts on my blog: