Reading a query
Read a SQLAlchemy query and know, before running it, what it will ask the database and how many times.
Production performance diagnosis for Python engineers
Layer by layer, from the API down to the database.
The course is being built. Leave your email and I will tell you the day it opens.
No payment now, and no email other than the one announcing the opening.
Written by a backend engineer: ten years of Python, five of them freelancing, at Alma, Back Market, among others.
First, find where the problem comes from. Measure, isolate, prove: you point at the cause and show the numbers behind it, instead of arguing about likely suspects.
Then, fix it, with the limits stated. No course covers every possible fix. What you get: pointers, the notions each fix rests on, and the bottlenecks that come up again and again.
Throughout, chapters that stand on their own, each recapping what it needs. Quizzes, real cases on your own stack, cheat sheets to keep.
The method
Five steps, always in that order. Skipping one is how a week disappears into the wrong layer.
Find where the time actually goes, before forming any opinion about it.
Narrow it down to one layer, one component, one call. Rule the others out with a number.
Confirm the hypothesis with a profile, a query plan or a trace. A plausible cause is not a cause.
Make the smallest change that moves the measurement, then measure again.
Who it is for
A real investigation
Same data returned, same machine, same code path. The only difference is that someone looked at where the time went instead of guessing.
GET /stories/naive?limit=50
The query count follows the page size:
21 queries at limit=20
51 queries at limit=50
101 queries at limit=100
A slope of exactly 1 per row is the signature of an N+1.
One SELECT for the list, then one more per author.
No need to read the code to know that.
GET /stories/fast?limit=50
Measured with ab -n 600 -c 10 against FastAPI over PostgreSQL 16, 500,029 rows. Commands and raw output are the ones used throughout the course.
Learn the vocabulary, measure, find the component at fault, fix it on real cases, then instrument so it never surprises you twice.
Chapter 01
Before measuring anything: what a p99 is, what wall clock time hides, and where the time can go between a click and a row.
Chapter 02
Deterministic profilers record every call and slow the run down. Statistical ones sample and cost almost nothing. Knowing which to reach for is the skill.
Chapter 03
You do not learn to diagnose by watching someone else do it. This chapter hands you broken endpoints and you fix them, one at a time, measuring before and after.
Chapter 04
The profile is clear: your code is not the problem, the database is. Now what? This is where you learn to read what the engine actually did, and to change it.
Chapter 05
Instrument once, and stop hunting. A request that crosses several services should tell you where its time went before you have to go looking for it.
Chapter 06
A load test tells you where the tail sits and what gives way first. It does not tell you what your users are living. This chapter is about that difference.
Chapter 07
The things that do not fit a chapter of their own, and the toolkit you keep after the course.

Who wrote it
Backend engineer, ten years of Python
@teva_krief
Ten years of Python, five of them freelancing: a payments company, a marketplace, a Swiss insurer, and my own SaaS products shipped end to end. Different stacks, different team sizes, the same recurring scene: an endpoint slows down, everyone has a theory, and a week goes into the wrong layer. What I teach here is what I ended up doing instead, on real production systems: measure first, isolate, prove it, and only then change the code. I build my own tooling for backend analytics and API response times, and I teach diagnosis the way I run it.
It gets less scarce every year. Plenty of people can write a FastAPI endpoint, and plenty of tools will write one for them. What almost nobody can do is take an endpoint that is slow in production, work out where the time actually goes, and prove it with a number.
For you
Being the person who finds the cause of a slowdown is rare, and it shows immediately. In an interview, in a performance review, on a freelance quote: you are not saying you know Python, you are saying you take an endpoint apart and come back with the layer, the number and the fix. Python runs in production almost everywhere — payment systems, marketplaces, insurers, data platforms, internal tooling — so none of this is tied to one company. Learn it once, use it on the job you have now and on the one after that.
Checkout went from 2.1 s to 140 ms. The profile showed the request sitting on send_email, and nothing in the response depends on that mail leaving: it moved to a FastAPI background task, fire and forget. Here is the profile before, and here it is after.
For your team
If you run engineering, the cost is not the slowdown itself: it is the three engineers investigating three different hypotheses, the infrastructure added to buy silence, and the one person every performance question ends up on. Training the team on one shared method is how that stops.
Performance problems become expensive when teams debug them without evidence.
2 days
A slow endpoint looks like a database problem. You add indexes, rewrite queries, and change the ORM. The real bottleneck was somewhere else.
€400 / month
The service is slow, so you scale the infrastructure. It gets better until it doesn’t. You are now paying for capacity instead of understanding the bottleneck.
4 engineers
Everyone has a theory about what is slow. Without the right profiling and observability skills, the team is debugging blindly.
Every time
Nothing was instrumented and nothing was written down, so the problem comes back six months later and one senior engineer is pulled off their roadmap to find it again.
In preparation
The same recorded course sits under both. One you take on your own; the other is run with your team, with the sessions and the questions that go with it.
For individual engineers
Stop guessing. Learn how to work out where the time in a slow back end actually goes, and how to prove it.
€890
Self-paced. Lifetime access, every update included.
Thanks, I have your address. I will come back to you.
That did not go through. Try again in a moment.
Nothing to pay today: the course is being built. Joining the list holds the launch price for you.
For engineering teams
Train your engineers on one shared method for diagnosing production performance problems, instead of one opinion per engineer.
From €7,500
Final pricing depends on team size and training scope.
This is a proven core training with live support around it, not a course written from scratch for your company. The videos and the learning path stay the same for everyone; what adapts is the examples discussed, the exercises, and the problems you bring to the sessions.
Thanks, I have your address. I will come back to you.
That did not go through. Try again in a moment.
Tell me the size of the team and what you are running. I answer with a scope and a price.
Not against hours of video. The unit of comparison is the senior days nobody spends in the wrong layer, and the instance nobody upgrades.
Lifetime access and every update. The stack moves, and you keep the version that matches what you actually run in production.
It buys access to the instructor: live sessions, private Q&A, and your own slowdowns taken apart with the method in hand. That is the part a recording cannot do.
The same recorded material, under both offers.