Writing
Notes from building.
Essays on the actual work of full-stack development — the trade-offs, the unglamorous details, and the lessons that only show up after you ship.
Building fast Next.js interfaces: lessons from three years of shipping
Speed isn't a setting you switch on at the end. Here's how I think about performance from the first component — hydration, images, fonts, and the traps that quietly make React apps feel slow.
Read the article →How I structure a Python data pipeline that won't fall over
Most pipelines don't fail because the transform was wrong — they fail because nobody could tell where it went wrong. A practical structure for ingest, transform and load that survives contact with messy data.
Read the article →React or Django? Choosing a stack for a new product
The framework debate usually asks the wrong question. What actually decides a stack is your team, your content, and how much of your product is an interface versus a system. A decision framework I use.
Read the article →What a CTO actually does at an early-stage startup
The title sounds like strategy and whiteboards. In practice, being CTO of a small team is mostly about protecting focus, choosing boring technology, and writing the code nobody else wants to. What I learned leading engineering at AI3.
Read the article →Practical performance budgets for web apps
A performance budget turns "the site feels slow" into a number you can defend. How to set one that your team will actually respect, and how to keep it from rotting the moment the deadline pressure arrives.
Read the article →From frontend to full-stack: the path that actually worked
Going full-stack isn't about learning every technology — it's about learning to reason across the boundary between the interface and the system. The order I'd learn things in if I were starting again.
Read the article →