Skip to content

Writing

Notes from seventeen years of building and running software

Long-form engineering notes — on designing software that is pleasant to operate, running Linux in production, and the decisions behind the products I build. Newest first.

Engineering

Seventeen years on both sides of the line

Most organisations separate the people who build software from the people who run it. I have spent my career doing both. Here is what that taught me about designing systems that survive contact with production.

Read

Security

Letting AI agents near production, carefully

AI agents are becoming colleagues with keyboards. After years of managing who can do what on servers, I've applied the same principles to them — least privilege, explicit actors, approvals and honest boundaries — across four tools I build.

Read

Rust

Native Linux apps in Rust with GPUI

Building Sysman's desktop app on GPUI, the GPU-accelerated framework behind the Zed editor — why I chose it, the charts I had to write myself, and what it takes to ship a native Linux binary that installs cleanly everywhere.

Read

Operations

The last reading before a crash

A monitor is most useful at the exact moment the machine dies — which is when most of them lose their data. Designing Sysman's collector around one rule, and what it took to keep that rule.

Read

Operations

Release scripts that refuse to half-ship

The worst release is the one that stops halfway — a tag pushed, a package published, the documentation still describing last week. Every project I ship uses the same pattern to make that impossible: check everything, ask once, then do it all.

Read

Linux

A lock screen that cannot lock you out

Theming a login screen means writing to system directories as root; theming a lock screen means one bug can lock someone out of their own machine. How Darwan handles both — a supervised lock, and a root helper that trusts nothing it is given.

Read

Product

Why this site runs on a CMS I built

Every developer eventually writes a content management system. I did it on purpose, after years of installing, patching and rescuing other people's. These are the decisions that made Nibble — and the one I got wrong first.

Read

Engineering

SQLite is enough (for most of us)

For most of my career, "which database?" meant "which database server?" Today my default is a file. Here is how to run SQLite in production properly — WAL, backups, honest limits — and when to move on.

Read