Writing & Ideas

Thoughts on AI engineering, LLM systems, and building software that scales.

An automated guided vehicle carrying stacked racks of components through a factory warehouse, with more loaded racks lined up in the background
September 8, 2026

Choosing a Python Task Queue: Celery, Dramatiq, RQ, arq

Most teams don’t choose a Python task queue — they inherit one. Someone bootstrapped the project three years ago, Celery was the obvious name, …

Python Celery Task Queues
A bridge under construction at night, illuminated by work lights, with construction workers in high-visibility gear and an excavator below
September 7, 2026

Zero-Downtime Postgres Migrations

The migration that takes down production is almost never the one anyone was worried about. It’s rarely a DROP TABLE — everyone reviews those …

PostgreSQL Database Migrations Backend Development
Abstract minimalist composition of overlapping cream and beige geometric planes forming diagonal, arrow-like shapes
September 5, 2026

pgvector or a Dedicated Vector Database?

Every “pgvector vs Pinecone” comparison online eventually turns into a benchmark chart of raw queries-per-second at some fixed vector …

PostgreSQL Vector Search Backend Development
Rows of server racks with mesh doors, behind which orange and teal network cables loop between switches in a dim data center
September 4, 2026

Connection Pooling for Python: PgBouncer and Async Pools

“Just add PgBouncer in front of it” is the reflexive answer to almost any Postgres connection problem, and it’s right often enough …

PostgreSQL Python Backend Development
Aerial view of a circular hedge maze in a park, with concentric rings of pathways converging on a bare tree at the center
September 3, 2026

N+1 Queries in Django ORM: Find Them, Then Kill Them

The Django ORM’s biggest strength is also its biggest trap: order.customer.name reads like a free attribute access, but behind that dot is a …

Django Python Backend Development
Close-up of library bookshelves packed with books, shot at an angle down the row with the far end of the aisle blurred
September 2, 2026

Picking the Right Postgres Index: B-tree, GIN, GiST, BRIN

Ask most developers what a Postgres index is and the answer is “a B-tree that makes WHERE clauses fast.” That’s true for maybe 80% …

PostgreSQL Database Design Backend Development
A close-up photo of a computer monitor displaying a line graph
September 1, 2026

Reading EXPLAIN ANALYZE Without Guessing

Most developers run EXPLAIN ANALYZE the same way they run a stack trace on an error they don’t understand — paste it into the query, get a wall …

PostgreSQL Database Performance Backend Development
Blue fiber optic cables radiating outward with glowing light traveling through them
August 31, 2026

Streaming in FastAPI: SSE vs WebSockets vs Polling

Every team building an LLM-backed feature hits the same decision point: the model streams tokens as they’re generated, and the frontend needs to …

FastAPI Python WebSockets
Abstract green streaks of light and code forming a glowing digital tunnel
August 29, 2026

Async SQLAlchemy Sessions in FastAPI, Done Right

sqlalchemy.exc.MissingGreenlet: greenlet_spawn has not been called is the error that greets almost every team migrating a FastAPI app from sync …

FastAPI SQLAlchemy Python
Metal components moving along an industrial conveyor belt on a factory assembly line
August 27, 2026

FastAPI BackgroundTasks vs Celery: Picking the Right One

BackgroundTasks looks like it solves the same problem Celery does — run some work after the response goes out, without making the user wait for it. …

FastAPI Python Celery
A person's hands holding two puzzle pieces together, about to connect them
August 27, 2026

FastAPI Dependency Injection: Patterns and Anti-Patterns

Depends gets introduced in every FastAPI tutorial as “how you get the current user,” and most developers never look past that one use …

FastAPI Python Backend Development
A close-up of a computer screen displaying colorful lines of programming code
August 26, 2026

FastAPI Project Structure That Survives Growth

Every FastAPI project starts the same way: one main.py file with a handful of routes, a Pydantic model or two, and a database call inline in the …

FastAPI Python Backend Development