Thinking Off, Handoffs Missed: What I Measured Moving an Agent to Claude Haiku 5.5

Claude Haiku 5.5 thinks by default, and the obvious migration move is to turn that off. I ran 960 support conversations to see what it costs. With thinking off, the agent skipped a quarter of the handoffs it should have made. With thinking on at the lowest effort, none.

ArdiQ 1.0: I Was Wrong About Celery

In May I wrote that Celery was the safe default and migrated our backend to it. Three months later Celery broke our async code in production, and we replaced it with the Rust-core queue I'd been building on the side. This is what that cost, and what it taught the queue.

I Stopped Needing Cursor and Didn't Notice

I replaced VS Code without ever deciding to. What kept me there was never the editor, it was the agent living inside it, and ACP is what took that away.

Code Is Cheap, Judgment Is Not: What AI Can't Automate in Software Development

Any AI can generate code that works. Deciding if it makes sense in your system is a different skill, and it's the one that actually matters now.

What Writing a Rust Extension Taught Me About Python

PyO3 from the brain of a Python dev learning Rust: where the two languages disagree, what hurts first, and what stuck.

Celery Is Not Always the Answer: A Real Comparison of Python Task Queues

I migrated from ARQ to Celery at work. During that process I tested every serious Python task queue out there. Here's what the benchmarks say, and what they don't.

How Bad Authorization Design Put 200,000+ Students at Risk

How I discovered a chain of IDORs in a public education platform used by every FP student in Catalonia, chained them into a full account takeover, and reported it responsibly.

The Python Toolchain I Use in Production: uv, ruff, and ty

Why I replaced pip, black, flake8, and mypy with a single stack from Astral, and how I integrate it in CI/CD with GitHub Actions.

How I Structure FastAPI Projects in Production: and Why

What most FastAPI tutorials skip: how I structure routes, services, transactions, exceptions, logging, multi-tenancy and background tasks in production, and the reasoning behind each decision.