0%

Retries are easy to add. With SQS and Lambda you do not even add them: they are on from the first deploy. Safe retries are the hard part, and they are your job, not the platform's.

This post walks through where the second run of a message comes from, how to keep one bad message from replaying a whole batch, how to make the second run harmless, and how to keep the messages that never succeed in a state you can actually replay.

Read more »

Most RAG tutorials start by setting up a vector database. For a lot of projects that is the first piece of infrastructure they did not need yet. For others it is the right call, and knowing which group you are in saves a migration later.

This post covers what a vector database actually does, how far plain exact search gets you, what Postgres can do with pgvector, and the point where a dedicated store earns its place.

Read more »

A model API is simple: text goes in, text comes out. Every real application then rebuilds the same plumbing around that one call. LangChain is that plumbing, packaged once.

It helps to know which problem each part solves, because that also tells you when you do not need it. Here are the six problems, in the order most projects hit them.

Read more »

The plan that didn't survive the first afternoon

I set out to do one useful open source contribution a day, with a coding agent doing the legwork and me approving every comment and pull request before it went out. The plan was the classic one: find a small, fresh bug in a project I use, fix it, send the PR.

By the end of the first afternoon I had a problem. Almost every small, fresh bug I found already had a fix waiting.

Read more »

The problem with letting agents run unattended

I run several coding agents headless on my workstation. One reviews pull requests, one implements tickets from a written plan, one watches repositories and regenerates documentation when the code moves. They are started by timers and scripts, so nobody is sitting at a terminal when they finish.

Most of their work is safe to do alone: reading code, running tests, writing a report to disk. A few steps are not. Posting a review comment under my name, pushing a branch, opening a PR, deploying to a shared environment. Those are outward facing and hard to take back, and I want to see them before they happen.

A permission prompt needs a terminal. Email is too slow to act on. A web dashboard is one more thing to keep running. What I already had open all day was Telegram on my phone, and Telegram bots support buttons under a message. So every risky step became a message with Approve, Show and Skip under it.

Read more »