Blog (1 of 18)
-
Does remote require seniors?
The question is being asked again, now with an AI twist. My answer is the same as it always was: no. Remote does not require seniors. It requires self-directed people. Seniority is a loose proxy for the trait that actually matters, and confusing the two costs you good juniors and saddles you with seniors who cannot work this way.
Wednesday, 28 October 2026Read more ➞ -
Business Continuity: From Black Friday to Semester Start
After years of business continuity management for large e-commerce platforms I cannot build systems without infrastructure as code, full automation, and a tested recovery story any more. Nobody requires ISO-27001-grade operations for a university research platform. We do it anyway, because it is cheaper than the alternative. But the discipline does not transfer unchanged: What is critical inverts, peak season has a different name, and the platform must be built to be handed over.
Wednesday, 21 October 2026Read more ➞ -
Remote first: What sucks?
Most complaints about remote work are about things that are either solved or were never real. Clear those away and there is a smaller set of things that do not work remotely. Pretending a video call fixes them is how remote-first loses the people it could have kept.
Wednesday, 14 October 2026Read more ➞ -
Cross-Team Collaboration
When you start hearing "we can't deliver because of another team" on a regular basis, something has already gone wrong. Usually you have optimised each team's own velocity so hard that you killed the company's. The work that would fix it, one team unblocking another, is invisible to every metric you are using, so it quietly stops.
Wednesday, 7 October 2026Read more ➞ -
The Sidecar That Shouldn't Exist
Data mesh gives every data product a sidecar: the logical home of cross-cutting concerns like policy enforcement, audit, and quality. I tried to find the sidecar a place in our repository and concluded it must not have one. Some architecture concepts are useful as vocabulary, not as structure, and telling the two apart is a design decision of its own.
Wednesday, 30 September 2026Read more ➞ -
The Layer Nobody Should Have to Import
My book describes an architecture in one sentence: Controller → Service → Gateway → Storage. It never says what to put in the HTTP box. I published the thing I have been putting there for fifteen years, mostly so I stop copying it between projects, and writing down why it is shaped like that turned out to be the interesting part. A framework should be the dependency almost none of your code imports.
Friday, 25 September 2026Read more ➞ -
Visible Actions Are More Important than Speech
I have watched a manager give a speech about a value and then, in the next small meeting, act exactly against it. People notice. They read what you do as the real message and treat what you say as noise on top of it, and they replicate the behaviour, not the speech.
Wednesday, 23 September 2026Read more ➞ -
Leaving DigitalOcean Took One Day
I have been a happy DigitalOcean customer for years: stable, simple, never a surprise. Then they put three million dollars into DHH's Omarchy, and I moved everything to Hetzner. The interesting part is not the outrage, it is that leaving took one day and almost no thought, because the whole setup is infrastructure as code. Being able to walk away from a provider on principle is something you build long before you need it.
Friday, 18 September 2026Read more ➞ -
Hierarchy Exists
A lot of managers want to be friends with the people who report to them. It does not work, and worse, it is dishonest, because there is a power imbalance everyone in the room already feels. Being kind is not the same as being friends. Pretending otherwise is the actual unkindness.
Wednesday, 16 September 2026Read more ➞ -
Designing a dbt Pipeline for Consent Withdrawal
When a student withdraws consent, their data must disappear from our learning-analytics platform. Irreversibly anonymised statistics may legally remain. Making both true at once is an architecture problem, not a cleanup script: two strictly separated lanes through the warehouse, a dependency rule between them, and materialization choices driven by deletion semantics instead of query performance.
Wednesday, 9 September 2026Read more ➞ -
How to Guarantee You Never Ship
I have written a run of posts arguing against multi-repo layouts, long-lived feature branches, reflexive microservices, dedicated QA, blanket coverage targets, and pull-request review. Each is bad on its own. Stack them together and you get something worse than the sum: a machine, built entirely from respectable best practices, optimised to make delivering a single change impossible.
Wednesday, 2 September 2026Read more ➞ -
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 ➞
Subscribe to updates
There are multiple ways to stay updated with new posts on my blog: