Blog

Thoughts & Insights

Writing about software engineering, system design, and lessons learned from building systems at scale.

All Posts

The Job Is Not What You Think It Is: Notes on Technical Leadership

Technical leadership is less about making the right architectural calls and more about creating conditions where a team can make them without you.

LeadershipEngineering Management
Feb 202617 min read

GraphQL vs REST: You're Asking the Wrong Question

The GraphQL-vs-REST debate is a false binary that obscures the actual question: what data access pattern does your system need, and what operational complexity can your team absorb?

GraphQLREST
Feb 202615 min read

TypeScript’s Type System Is a Language You Haven’t Learned Yet

Most TypeScript usage stops at type annotations. The real productivity gains live in making entire categories of bugs unrepresentable.

TypeScriptType System
Jan 202611 min read

Serverless Is a Billing Model: When the Trade Is Worth It

Serverless is a specific exchange of control for convenience, and evaluating it requires pricing both sides honestly.

ServerlessCloud Architecture
Jan 202615 min read

Microservices Are a Tradeoff, Not an Upgrade

Microservices exchange one hard problem for a dozen harder ones. The question is whether you can afford the operational tax and actually need what it buys.

MicroservicesArchitecture
Jan 202614 min read

Functional Programming in JavaScript: You’re Already Doing It (Badly)

Every JavaScript developer who writes .map() is already functional. The question is whether they understand the principles well enough to use them deliberately.

JavaScriptFunctional Programming
Jan 202613 min read

Code Reviews Are a Design Problem, Not a Checklist

Code review dysfunction is almost always a design problem (wrong size, wrong scope, wrong incentives), not a discipline problem.

Code ReviewEngineering Culture
Jan 202616 min read