5 posts on engineering, design, and building software that lasts.
Every architecture decision you make in the first six months will still be there in year three. Here's how to think about the ones that compound.
Most performance problems I've debugged trace back to application code — not the database. Here's how to stop blaming Postgres and start reading query plans.
Self-documenting code is not about avoiding comments — it's about making the code itself tell the story clearly enough that comments become optional.
Not the clever tricks — the boring, readable patterns that appeared again and again across every large TypeScript codebase I've worked in.
An API is a contract. When the contract is vague, everything downstream breaks — slowly and in ways that are hard to debug. Here's how I think about API design that actually holds up.