Once in a while, I write longer form articles on technical subjects like APIs, Go, or Postgres:| brandur.org
Introducing River, a Postgres-based job queue designed for resilience and correctness through strong transactional guarantees.| Articles — brandur.org
How and why we started annotating all our Go tests with t.Parallel(), and why you might want to consider doing so too.| Articles — brandur.org
The traditional soft deletion pattern using deleted_at columns leaks into code, curbs the usefulness of foreign keys, and makes data removal difficult. Luckily, there’s an alternative.| Articles — brandur.org
The text type in Postgres, why it’s awesome, and why you might want to use varchar anyway. Also, a story about trying to get string parameters bounded at Stripe.| Articles — brandur.org
A privacy and GDPR-friendly approach to producing basic and complex site analytics, and one which is more accurate in an age when adblockers reign supreme.| Articles — brandur.org
Databases shed important RDMS features as they get big. Examining why this tends to be the case, and some ideas for preventing it.| Articles — brandur.org
Making the sorting speed of network types in Postgres twice as fast by designing SortSupport abbreviated keys compatible with their existing sort semantics.| Articles — brandur.org
In the spirit of the continued production of independent content, I’m running a two-week photography and writing project in Berlin called Sequences.| Articles — brandur.org
A walkthrough of the design of a live reload feature for the static site generator that builds this site, touching on fsnotify, WebSockets, and the curious case of file 4913.| Articles — brandur.org
Using the design principles of a 10,000 year clock to build a program that’s intended to run on a macro timescale.| Articles — brandur.org
Why it makes sense to model APIs as graphs, and what GraphQL can do for us to help with discovery, batch operations, and gradual enhancement.| Articles — brandur.org
Flattening a single very hot vertical Redis node into a horizontal Redis Cluster at Stripe.| Articles — brandur.org
A detailed look at the frameworks, concurrency model, error handling, middleware constructs, and testing strategies of a web service written in Rust.| brandur.org
Why Ruby’s scheme for memory allocation doesn’t play nicely with copy-on-write, and how a compacting garbage collector will help.| brandur.org
A safe, succinct test data fixtures pattern using sqlc and validator.| brandur.org
Avoiding the pgcrypto extension and its OpenSSL dependency by generating cryptographically secure randomness through gen_random_uuid().| brandur.org
Implementing rate limiting using Generic Cell Rate Algorithm (GCRA), a sliding window algorithm without a drip process.| brandur.org
As of Go 1.21, Go fetches toolchains automatically, and it’s easy to not be running the version that you thought you were running.| brandur.org
Using a two-phase data load and render pattern to prevent N+1 queries in a generalized way. Especially useful in Go, but applicable in any language.| brandur.org
Maximizing Postgres connection economy by using a single connection per program to receive and distribute all listen/notify notifications.| brandur.org
Using Go’s DisallowUnknownFields option to improve an API’s integration experience by making paramter naming mistakes faster to resolve.| brandur.org
A lightweight and technology agnostic operational technique for easy and near realtime visibility and live querying into production systems.| brandur.org
How a seemingly minor enhancement in Postgres 11 fills one of the system’s biggest operational holes.| brandur.org
Touring the ORM and Postgres landscape in Go, and why sqlc is today’s top pick.| brandur.org
How Postgres makes sorting really fast by comparing small, memory-friendly abbreviated keys as proxies for arbitrarily large values on the heap.| brandur.org
Hitting the limit for maximum allowed connections is a common operational problem in Postgres. Here we look at a few techniques for managing connections and making efficient use of those that are available.| brandur.org
Building resilient services by identifying foreign state mutations and grouping local changes into restartable atomic phases so that every request can be driven to completion.| brandur.org
A logging format used inside companies such as Heroku and Stripe which is optimal for easy development, consistency, and good legibility for humans and computers.| brandur.org