Most of my writing is about the technical decisions and tradeoffs that shape long-lived systems: migrations, architecture, testing culture, technical debt, and how teams scale software over time. The posts below give a good sense of the problems and decisions I keep coming back to.

All blog posts were written without the assistance of AI.

2026

2025

2024

2022

2021

2018

2017

2016

2015

2014