Blog (1 of 17)
-
Tests and product market fit
I watched a team write a careful test suite for a feature, then kill the feature two weeks later because nobody wanted it. The tests were wasted effort, and worse: they made the feature harder to kill. How much you should test is not a constant. It moves with where you are on the road to product market fit.
Wednesday, 26 August 2026Read more ➞ -
A Boolean PII Flag Is Not Enough
Every data catalog lets you tag a column as PII, true or false. For a platform processing student data under GDPR this single bit drops the questions a data protection officer actually asks: Does the column identify on its own or in combination? Is it raw, pseudonymised, or anonymised? Did a human assert the classification, or did a tool infer it? We classify on two axes plus provenance and propagate the result through lineage.
Wednesday, 19 August 2026Read more ➞ -
Innovation Tokens
Dan McKinley's "Choose Boring Technology" gives you a budget of innovation tokens to spend on novel choices. I agree with all of it, and I want to refine one thing: a token is not denominated in how novel the technology looks from the outside. It is denominated in what your team already knows.
Wednesday, 12 August 2026Read more ➞ -
Hexagonal Architecture vs. Microservices
Bounded contexts deserve boundaries. But a boundary is a code concern, and putting a network between two contexts because you want them separate is a mistake. In-process interfaces are far easier to debug and to keep consistent than network ones, for a concrete reason: one compiler spans both sides and will not let them drift. Nothing spans the network.
Wednesday, 5 August 2026Read more ➞ -
Why 3D Software Visualisation Keeps Failing
A zoomable 3D scene of your architecture, with domains as planes, services as boxes, and data flows as glowing particles, demos beautifully, and WebGL makes it a weekend project. But 3D software visualisation never failed for technical reasons. It fails for perceptual ones, and those have not changed: occlusion, an arbitrary Z axis, label degradation, and depth being one of the weakest visual encodings we know of.
Wednesday, 29 July 2026Read more ➞ -
Feature Flags Over Branches
A while ago I promised to write more about feature flags. Here it is, as one flat rule: develop on main, and use feature flags. Long-lived feature branches are a problem you create for yourself, and most of the structural contortions teams adopt to cope with merge hell are there to solve a process problem with architecture.
Wednesday, 22 July 2026Read more ➞ -
Always Go With a Monorepo
I made this argument to my team again last week, while a neighbouring team was busy splitting their monorepo into around eighty repositories. People reach for a second repository when what they actually want is a boundary, and a repository is a ruinously expensive way to draw a line you can draw for free in the filesystem.
Wednesday, 15 July 2026Read more ➞ -
There Is No Audience-Independent Architecture View
Every team eventually asks for "the architecture diagram", singular, the one picture which explains the system to everyone. That diagram cannot exist, because usefulness and audience-independence trade off by construction. The standards knew this in 1995. The answer is one model, many audience-specific views, and a clear separation between structural views and cross-cutting perspectives.
Wednesday, 8 July 2026Read more ➞ -
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 ➞
Subscribe to updates
There are multiple ways to stay updated with new posts on my blog: