Blog
Notes on product, AI automation, and technical decisions. No editorial gloss.
2026-07-14
Async job queue patterns in production: retry, dead letter, and concurrency
Production job queues: exponential backoff retry, dead letter queue, worker idempotency, graceful shutdown, and minimum metrics to monitor.
Read2026-07-07
Automatic PR code review with Claude Code: custom commands and project rules
Automatic PR review with Claude Code: CLAUDE.md, /review-pr in .claude/commands, local pre-push workflow, and limits versus human review.
Read2026-07-01
Signals your production LLM stopped behaving like before
Production LLM drift: deterministic metrics (schema validation, output length, fallback, latency) to catch silent degradation without LLM-as-judge.
Read2026-06-25
Claude Code: a practical guide for Italian software teams
Claude Code for dev teams: code review, refactoring, tests, and CLAUDE.md. Operational patterns, limits, and workflow integration without skipping human review.
Read2026-06-19
Transactional outbox on Postgres: how not to lose an event when the server crashes
Postgres transactional outbox: write events in the same transaction as business data, publish with a SKIP LOCKED worker, at-least-once delivery and consumer idempotency.
Read2026-06-16
LLM regression protocol: golden sets, deterministic matchers, and update policy
How to structure a golden set to catch regressions on prompt and model changes without an LLM-as-judge: file format, matcher tiers, CI policy, and update rules.
Read2026-06-13
Advisory locks and connection pools: the silent leak (and how to avoid it)
Why session-scoped pg_advisory_lock survives COMMIT and breaks transaction-pooled connections, how to reproduce with psql and pg_locks, why SKIP LOCKED is the wrong tool to serialize one known job key, and a production-ready blocking query.
Read2026-06-10
Partial indexes in PostgreSQL: EXPLAIN ANALYZE proof and a negative control
Deterministic dataset, same EXPLAIN in phase A and B: what to look for in EXPLAIN (ANALYZE, BUFFERS) before and after the partial index, plus a sample plan for the negative control on rows with status closed.
Read2026-06-07
Prompt caching: structuring prompts and measuring savings
How to package stable system/user prompts where providers support caching, and how to estimate token savings.
Read2026-06-04
better-sqlite3 without blocking the event loop: workers and Nitro
Worker-thread patterns for synchronous SQLite queries in Node/Nitro apps and what to monitor in production.
Read