Helping senior engineers think and design like architects.
Principal Engineer with 16+ years of real-world architectural decisions. I write about system design, mentor engineers moving toward staff and principal, and teach what I've learned the hard way.
Latest writing
artificial-intelligence
Soon Everyone at Your Company Will Be an Engineer
AI is tearing down the wall around engineering. Why everyone becomes an engineer, org charts flatten, and every function turns into an engineering role.
typescript
The Frontend Toolchain Is Now Written in Rust and Go. What That Means for You
tsgo, Vite 8, Turbopack, OXC, and now the React Compiler in Rust. The tools you build with are quietly being rewritten in native languages. Here is the pattern, and which of your skills survive it.
artificial-intelligence
Ship and Learn Are Two Different Metrics
AI defaults close your task, they do not keep you sharp. Used without intent it bills you in cognitive debt. The posture that keeps you learning while you still ship.
system-design
The Capacity Estimation Numbers Every Engineer Should Carry Into a System Design
I built a single reference page of capacity estimation formulas and latency numbers for my Senior to Staff cohort. Read it before you design anything, and walk into your next system design interview knowing exactly when to scale and how to say so.
leadership
I Built a Tool to Compare Senior Engineer Salaries Across 17 Cities, and I Want Your Take
I built an interactive dashboard that compares senior software engineer compensation across 17 cities through four lenses, not just headline pay. Here is what I built, how I modelled it, and the questions I would love your opinion on.
system-design
Notes From My First Cohort: System Design Is Trade-offs, Not Answers
Tonight I taught the first live session of my Senior to Staff cohort. The lesson I kept coming back to: system design is not about the right answer, it is about reasoning along the axes and owning the trade-off.
artificial-intelligence
The Broken Window Theory of Code, and Why Cheap AI Rewrites Don't Save You
One unfixed broken window lowers the standard for everything that follows. AI is making rewrites cheaper than ever, which raises an uncomfortable question: are we still going to understand our code, or just keep rebuilding it?
Popular guides
SQL, from SELECT to subqueries
Worked SQLZoo solutions, joins, aggregates, GROUP BY vs HAVING, and subqueries — the queries interviewers actually ask.
Start reading →Database performance & scaling
Indexes, query optimisation, sharding, replication and normalization — how to make a database fast and keep it fast.
Start reading →Modern TypeScript tooling
Why oxlint replaced ESLint, pnpm vs npm, Lefthook vs Husky, and the Rust/Go shift in the frontend toolchain.
Start reading →Data structures in TypeScript
Arrays, linked lists, stacks, queues, trees, tries, graphs, heaps and hash tables — implemented and explained in TypeScript.
Start reading →Sorting & searching algorithms
Insertion, selection, merge and quick sort, plus binary and substring search — the classic algorithms, step by step.
Start reading →Design systems in practice
What a design system really is (per Atlassian), how Dropbox and Netflix build theirs, and how to roll out an internal UI component library.
Start reading →Scaling & system architecture
Horizontal vs vertical scaling, capacity estimation, resilience patterns and the architecture principles behind systems that grow.
Start reading →X vs Y: engineering trade-offs
Head-to-head breakdowns — oxlint vs ESLint, REST vs GraphQL, SQL vs NoSQL, Svelte/Preact vs React — with the trade-offs that decide it.
Start reading →