XRAPH/Writing

Notes from
the machine room

Long-form, irregular, and mostly about the parts of a system that only reveal themselves in production.

Posts
53
Cadence
Irregular
Topics
Systems / Agents / Go
01

All Writing

Newest first
Dec 2025

Four backend frameworks in seven years

A TypeScript template, two Rust frameworks and one in Go. What each got wrong in order, and the two ideas that survived all of them.

Read →
Oct 2025

Durable execution without running another service

Checkpointed workflows, leader-elected cron and a dead letter queue, imported into the process you already deploy. What the model gives you and where it stops.

Read →
Sept 2025

API keys you can actually rotate

Rotation that requires a coordinated deploy happens once, at audit time. A grace window where both keys validate is what turns it into a background process.

Read →
Aug 2025

An immutable log and the right to be forgotten

A hash chain makes tampering detectable, which is the point. It also makes deletion impossible, which is a legal problem. Per-subject keys resolve it, with conditions.

Read →
Jul 2025

Three authorisation models behind one check

Roles, attributes and relationships answer different questions and most systems need all three. Fixing the precedence rule up front is most of the design.

Read →
Jun 2025

Letting the gateway build its own routing table

A manifest published by the service, consumed by the gateway. Why the configuration belongs with the service, and what putting discovery on the critical path costs.

Read →
May 2025

The lowest common denominator is where ORMs go to die

Generating each database its own dialect instead of a portable subset. What that buys, what it costs, and the benchmark numbers with their caveats.

Read →
Apr 2025

Multi-tenancy you cannot forget to write

Every cross-tenant leak I have looked at came from one query missing one clause. Making the boundary structural means the mistake stops being available.

Read →
Mar 2025

The outbox pattern is boring, and I should have used it two years earlier

Four stores, one handler, no transaction. How I ended up with a reconciliation job nobody owned, and what a single transactional write path actually costs.

Read →
Feb 2025

Why almost everything I ship is a library

Job queues, webhook delivery, authorisation and billing as libraries you compile in rather than services you operate. The reasoning, and the three places it fails.

Read →
Jan 2025

I wrote an opinionated framework on purpose

Minimalism does not remove decisions, it relocates them. Twenty-three things I decided before serving a single request, and the two the framework got wrong.

Read →
Nov 2024

The model is the small part

Training code is a fraction of a production machine learning system. The rest is data validation, serving, monitoring and the debt that accumulates when those are afterthoughts.

Read →
Load 12 more12 of 53 posts