Principal Engineer · 16+ years

Helping senior engineers think and design like architects.

I write about system design, mentor engineers moving toward staff and principal, and teach what I've learned the hard way.

Or go deeper: the live cohort
Live cohorts on Maven500+ articlesThe Breakpoint podcast

What engineers say

29+ engineers and colleagues, sharing what changed after we worked together.

Ehsan gave me really clear and practical advice on my resume and career direction. His feedback helped me focus on what actually matters to recruiters and improve how I present my skills. Super helpful and easy to talk to !!
Ankit Dani
Full Stack Software Engineer
The session was amazing and so informative covering a lot of topics like reviewing linked profile, CV and GitHub profile. Thank you so much for your time, Gaz.
Ahmed Abdelhamed, Software Engineer
It was a great session with Ehsan. I really admired the way he made me understand about so many things. I got to learn a lot from him
Nihit Moolaney, Student
Read all 29+ testimonials →

More ways to learn

Latest writing

View all →
Semantic Caching for AI Requests, Explained Simply
Artificial Intelligence

Semantic Caching for AI Requests, Explained Simply

Your users ask the same question in different words, and you pay for every one. Semantic caching answers from meaning instead of exact text. Here is how it works and how to build one, from scratch.

The Algorithms Worth Knowing in Code Review: Cutting Big O Without Being Clever
Algorithm

The Algorithms Worth Knowing in Code Review: Cutting Big O Without Being Clever

The small set of algorithm changes that actually come up in code review, each one shown as before and after, with the Big O it removes.

TypeScript Anti-Patterns That Cost You Twice: Build Time, Runtime, and the Interview
TypeScript

TypeScript Anti-Patterns That Cost You Twice: Build Time, Runtime, and the Interview

The TypeScript patterns I keep deleting in code review, what to write instead, where the cost lands, and the interview question each one turns into.

How I Find Problems Worth Solving
Leadership

How I Find Problems Worth Solving

Staff engineers are judged on whether a problem was worth solving, not just whether they solved it. I do not find those problems by thinking hard. I collect them, let them pile up, and wait for the shape.

Everything Is Being Rewritten in Rust. Is It Time You Learned It?
System Design

Everything Is Being Rewritten in Rust. Is It Time You Learned It?

The kernel dropped the experimental label, Cloudflare rewrote its proxy, and your JavaScript build is already Rust underneath. That is the case for learning it. The case against is that the most important TypeScript tool of the decade picked Go. Here is how I read the trade-off, and where I would still not leave TypeScript.

Situational Awareness: The Decade Ahead to AGI by Leopold Aschenbrenner
Reviews

Situational Awareness: The Decade Ahead to AGI by Leopold Aschenbrenner

A short, simple review of Leopold Aschenbrenner essay. He says AI will reach human-level smarts around 2027. Here is what he gets right, what he gets wrong, and what it means for you.

Popular this week

What other engineers have been reading in the last seven days.

Situational Awareness: The Decade Ahead to AGI by Leopold Aschenbrenner
Reviews

Situational Awareness: The Decade Ahead to AGI by Leopold Aschenbrenner

A short, simple review of Leopold Aschenbrenner essay. He says AI will reach human-level smarts around 2027. Here is what he gets right, what he gets wrong, and what it means for you.

Lefthook vs Husky: Why I Switched and Never Looked Back
DevOps

Lefthook vs Husky: Why I Switched and Never Looked Back

Lefthook replaces Husky and lint-staged with a single Go binary, parallel hook execution, and built-in file filtering. Here is why I switched and kept going.

OAuth2 Sequence Diagrams, Demystified
System Design

OAuth2 Sequence Diagrams, Demystified

OAuth2 stops being black magic once you draw it. The authorization code flow explained step by step as a sequence diagram, with every token and redirect.

oxlint vs ESLint: Why I Replaced ESLint with oxlint
TypeScript

oxlint vs ESLint: Why I Replaced ESLint with oxlint

Replaced ESLint with oxlint in a React TypeScript project and cut lint time from 12 seconds to under one. What I traded away and whether it was worth it.

How I Find Problems Worth Solving
Leadership

How I Find Problems Worth Solving

Staff engineers are judged on whether a problem was worth solving, not just whether they solved it. I do not find those problems by thinking hard. I collect them, let them pile up, and wait for the shape.

Everything Is Being Rewritten in Rust. Is It Time You Learned It?
System Design

Everything Is Being Rewritten in Rust. Is It Time You Learned It?

The kernel dropped the experimental label, Cloudflare rewrote its proxy, and your JavaScript build is already Rust underneath. That is the case for learning it. The case against is that the most important TypeScript tool of the decade picked Go. Here is how I read the trade-off, and where I would still not leave TypeScript.

Where to start

The deep dives I'd point a senior engineer at first, grouped by topic.

All 16 topics →