Writing & Ideas

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

A close-up of a padlock securing a door
September 30, 2026

Multi-Tenant RAG: Metadata Filtering Without Leaking Data

A multi-tenant RAG system has a failure mode that single-tenant systems don’t: it can produce an answer that’s fluent, well-cited, and …

RAG AI Engineering Backend Development
A yellow dead end road sign
September 28, 2026

Why Your RAG Retrieves the Wrong Chunks

“The model is hallucinating” is the default diagnosis when a RAG system gives a wrong answer, and it’s usually the wrong one. …

RAG AI Engineering Backend Development
Laptop screen displaying performance analytics graphs and data visualizations
September 26, 2026

Evaluating a RAG Pipeline: Recall@k, MRR, Faithfulness

Most teams “evaluate” their RAG pipeline by asking it a handful of questions, reading the answers, and deciding whether it feels right. …

RAG AI Engineering Backend Development
Close-up of a stopwatch face against a dark background
September 25, 2026

Reranking in RAG: When It's Worth the Latency

“Add a reranker” has become the default answer to “our RAG answers aren’t great,” in roughly the same way “add an …

RAG AI Engineering Backend Development
A magnifying glass resting beside a gray laptop computer
September 24, 2026

Hybrid Search: Combining BM25 and Vectors in Postgres

The pitch for vector search is that it understands meaning, not just keywords — ask about “canceling a subscription” and it’ll find …

RAG PostgreSQL AI Engineering
Diagram of ticket text entering the Jev model and leaving as a typed billing decision with 0.91 confidence
September 19, 2026

Jev by TypeSafe: Typed AI Decisions for Backends

Most of the LLM calls in a production backend aren’t asking for prose. They’re asking for a decision: which queue does this ticket go to, …

AI Engineering LLM AI Agents
A neatly organized stack of printed paper sheets
September 18, 2026

Chunking Strategies for RAG, Benchmarked on Real Documents

Most RAG postmortems start in the wrong place. Someone swaps the embedding model, adds a reranker, tunes the prompt, and the retrieval quality barely …

RAG AI Engineering Backend Development
Extreme macro close-up of a computer RAM memory module's circuit board and chips
September 13, 2026

Celery + Redis Gotchas Nobody Warns You About

Redis is the default broker for most new Celery projects, and for good reason — it’s already in the stack for caching, it’s fast, and …

Celery Redis Python
A vintage twin-bell alarm clock with Roman numerals on a plain white background
September 12, 2026

Celery Retries, Backoff, and Dead-Letter Queues

The default retry behavior most teams ship with Celery is max_retries=3 and nothing else — no backoff, no jitter, no distinction between “the …

Celery Python Task Queues
Abstract network graph of connected nodes representing a LangGraph multi-agent state machine
September 10, 2026

Migrating from LangChain to LangGraph, CrewAI, Pydantic AI

Search interest tells a consistent story right now: LangChain is sliding while LangGraph, CrewAI, and Pydantic AI climb. That’s not a branding …

LangChain LangGraph AI Agents
A rubber stamp resting on a stamped piece of paper
September 9, 2026

Making Celery Tasks Idempotent

The support ticket usually reads the same way: “customer says they were charged twice for one order.” Someone pulls the logs, finds a …

Celery Python Distributed Systems
A glowing red kill switch cutting an AI agent's circuit trace on a dark background
September 9, 2026

Why Your AI Agent Needs a Kill Switch

Google Trends spiked this week for “rogue AI agents,” “agent executing unowned code,” and “agent contacting outside …

AI Agents AI Engineering Backend Development