Principal Engineer · 16+ years

Helping engineers take LLM and agent systems from demo to production.

Architecture, evaluations, observability, failure handling, cost and latency: the parts a demo never has to answer for.

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 is a great developer who brings a wealth of experience and skill. He is very self-motivated and can deliver any piece of work, regardless of complexity. Ehsan has a real passion for learning and sharing what he knows with everyone else in the team. He's a real asset to any organization
Daniel Niknam
Senior Software Engineer at Envato
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

Coding

AI writes it now. Keep your hands in the code.

Ten minutes and one TypeScript problem, written from memory against hidden tests, on a schedule that brings each one back just before you would have forgotten it. Free, and no account needed to try one.

Latest writing

View all →
I Use AI Every Day: Why I Built a Place to Practise the Old Problems
Leadership

I Use AI Every Day: Why I Built a Place to Practise the Old Problems

I use AI every day, I enjoy it, and I am not going back. What it quietly took is the part of me that produces code from an empty file: the best practices I used to apply without thinking, and the problem solving underneath them. Why the existing practice sites did not fit, and what I built instead.

LLM Tracing vs Evals: Which One Tells You Why Your Agent Broke
Artificial Intelligence

LLM Tracing vs Evals: Which One Tells You Why Your Agent Broke

Your agent gave a bad answer and you cannot say why. Tracing tells you what happened on one request. Evals tell you whether quality moved across many. They answer different questions, and if you only build one this quarter, build the one that makes the other actionable.

The Innovator's Dilemma: Why Doing Everything Right Gets You Killed
Reviews

The Innovator's Dilemma: Why Doing Everything Right Gets You Killed

Clayton Christensen showed why good engineering teams build irrelevant products. The paradox of listening to your best customers, and how to stop ignoring the toy technologies that will eventually replace you.

Containers vs Cloudflare Computer: There Is Not Enough Compute for One Box Per Agent
Artificial Intelligence

Containers vs Cloudflare Computer: There Is Not Enough Compute for One Box Per Agent

Nearly every agent framework decided that one agent means one container. Cloudflare says there are not enough computers on earth for that to work, and has flipped it around: the agent lives in a tiny sandbox with a filesystem that stays behind, and a container is only borrowed when Linux is truly needed. Here is the argument in plain words, why Cloudflare made it, and where I would use it.

Graph Engineering: Every Edge You Draw Takes a Decision Away From the Model
Artificial Intelligence

Graph Engineering: Every Edge You Draw Takes a Decision Away From the Model

Agent graphs are state machines with a new name on them. The engineering question is not what a node is, it is which routing decisions you take away from the model and which you leave to it. The rule I apply: only draw edges for decisions you can make better in advance than the model can at runtime.

When Your Data Is Really a Graph: Write the Recursive Query First
System Design

When Your Data Is Really a Graph: Write the Recursive Query First

Some questions cannot be answered by adding one more join, because the number of joins depends on the data rather than on the query. That is the moment your data has become a graph. Here is how to tell, what a graph actually buys you, and the two costs nobody mentions until you are already paying them.

Popular this week

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

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.

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.

Using Vitest, MSW, and Faker in TypeScript
Testing

Using Vitest, MSW, and Faker in TypeScript

Three tools that changed how I write tests: Vitest for speed, MSW for API mocking, and Faker for realistic data. How to wire them together in TypeScript.

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.

Containers vs Cloudflare Computer: There Is Not Enough Compute for One Box Per Agent
Artificial Intelligence

Containers vs Cloudflare Computer: There Is Not Enough Compute for One Box Per Agent

Nearly every agent framework decided that one agent means one container. Cloudflare says there are not enough computers on earth for that to work, and has flipped it around: the agent lives in a tiny sandbox with a filesystem that stays behind, and a container is only borrowed when Linux is truly needed. Here is the argument in plain words, why Cloudflare made it, and where I would use it.

Where to start

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

All 16 topics →