Blocking calls in async code
A synchronous library called inside an async endpoint, which quietly serializes every request on the worker.
[ Development / Python & FastAPI ]
FastAPI gives you type validation, async handling and generated documentation almost for free. Most of the value is in using those properly rather than reproducing older Python habits inside a newer framework.
Typed and tested · Docs generated · Fixed scope
[ What I fix ]
Python is not slow. Blocking calls inside async handlers are slow, and they look identical in the code.
A synchronous library called inside an async endpoint, which quietly serializes every request on the worker.
Dictionaries passed around untyped, so malformed input surfaces deep in the call stack as a confusing error.
Queries in loops and missing indexes, unnoticed until data volume grows past a few thousand rows.
No lock file, so the environment differs between machines and a rebuild changes behavior.
Report generation and model inference handled inline, so requests time out under load.
Print statements instead of structured logs, so production issues are diagnosed by guesswork.
[ How it works ]
Endpoints, data model, expected load and integrations agreed in writing, with a fixed price and delivery date before development starts.
Typed models, async where it genuinely helps, tests alongside the code, and generated API documentation from day one.
Containerized and deployed through a pipeline with health checks, metrics and structured logs already in place.
[ What actually changes ]
Typed at the boundary and observable in production. Everything else is application detail specific to your problem.
[ Example engagement ]
A service handling a fraction of its expected traffic. Every endpoint was async, but a blocking client library serialized all of them onto one worker thread.
Illustrative example of a typical engagement. Figures vary with the state of your systems and are not a guarantee of a specific outcome.
[ Free · no obligation ]
Describe what the service needs to do and the load you expect. You get a written scope, a fixed price and a delivery date.
[ Pricing ]
Tell me the number you have to work with. I'll tell you honestly what's achievable within it — and if it isn't enough, I'll say so before we start rather than halfway through.
Scope agreed in writing, price agreed in writing, before any work starts. No hourly creep and no invoice you haven't already approved.
For ongoing work — maintenance, monitoring, updates and small changes. Month to month, cancel whenever, no minimum term.
For a single bug or a short task where writing a full scope would cost more than simply doing the work.
Budget too tight for the whole thing? I'll often suggest doing the highest-value part first and the rest later, rather than doing all of it badly.
[ Questions ]
FastAPI for APIs and services, where typing and async are worth real money. Django when you want an admin interface and a full framework out of the box. Flask mainly when a codebase already uses it.
Yes, and it is a common arrangement — they own the models, I build the service around them so inference runs reliably in production with sane latency and failure handling.
Yes, including containerization, pipeline and infrastructure. Since I do the AWS side too, the service and its environment are designed together.
For the overwhelming majority of APIs, yes — the bottleneck is almost always the database or an external call, not the language. If you genuinely need raw throughput, I will say so rather than pretend otherwise.
Yes. I start with a review and an honest assessment of whether to improve or replace it, with the cost of each option laid out.
[ Related services ]
[ Let's talk ]
Describe it in a few lines and you'll get a straight answer on scope, cost and timeline — same working day, from the person who'd actually build it.