Skip to content

#performance

6 posts on this topic, newest first. all tags →

.2026

6 posts, newest first.

Hybrid search with pgvector got worse until I added BM25

The hybrid query most tutorials show, Postgres full-text search fused with pgvector, scored worse on two public benchmarks than vector search alone. With a real BM25 index as the keyword half, the same fusion gave the best result I measured, in under 3 ms a query. Here are the numbers for seven ways to search, and the query shapes that made the fused one 15 times slower until I found them.

postgresqlsearchrag+2 more
18 min read20 min listen

TypeSafe's Jev in production: thresholds and two bugs

Jev is a decision model: it picks, rates and judges, and writes nothing. I wired it into ten places on this site and measured what it cost. The model was the easy part. The hard part was choosing a threshold for each decision, giving moderation a token budget nothing else can spend, and finding out the counter meant to cap the whole thing had never counted anything. These are the eleven thresholds, the two bugs, and the rule I kept.

llmai-agentsarchitecture+2 more
19 min read24 min listen

How camouflage.nvim masks secrets in Neovim without leaking a frame

In Neovim, a pasted secret can reach the screen for one frame before the mask catches up, and a recording keeps that frame. I measured what cloak.nvim, shelter.nvim and camouflage.nvim draw while you type and paste, what they cost, and which files they can read.

neovimluasecurity+2 more
11 min read12 min listen

UUIDv7 and the end of the random primary key

PostgreSQL 18 ships uuidv7() in core. It looks like a small convenience function, and it ends a decade-long argument about UUID primary keys. The numbers from a 200 million row table show why. The migration path is included, along with the one gotcha around the timestamp you can extract.

postgresqldatabaseperformance+1 more
11 min read14 min listen

Free-threaded Python in production: what actually broke

Python 3.14 made the no-GIL build officially supported, and the single-thread penalty fell from 40 percent to single digits. I moved a CPU heavy ingestion service across. The 3x speedup on the hot path was real, and so were three bugs that only exist without the lock. Tests caught none of them.

pythonconcurrencyperformance+1 more
8 min read11 min listen

I deleted every useMemo and nothing happened

The React Compiler is stable, on by default in new Next.js apps, and supposed to make most manual memoization redundant. I removed 212 useMemo and useCallback calls from a production app to see if that was true. It was, with four exceptions, and the exceptions show what those hooks were really doing.

reactperformancefrontend+1 more
8 min read10 min listen