Available for select work

Software engineer building boring, reliable web infrastructure.

I help product teams make their systems fast, observable and dull — the kind of software nobody has to think about at 3am. Eleven years in, most of that spent removing things rather than adding them.

11
years shipping software
38
projects delivered
4
open-source tools
99.98%
median uptime, last 3 years
Diagram of a small production stack: edge, app instances and datastores

Selected work

Three projects that shipped and stayed shipped

All work
Northwind analytics dashboard interface
2024·Lead engineer

Northwind

Reporting for a logistics fleet that had outgrown its spreadsheet. p95 went from 4.1s to 380ms without adding a single server.

TypeScript Postgres Litestream
Atlas route planning map interface
2023·Backend lead

Atlas

Route planning API for field-service crews across 14 countries. Sub-100ms responses on 40 million road segments.

Go PostGIS Redis
Relay event pipeline interface
2022·Architect

Relay

An event pipeline that moves 40 million messages a day and has been paged twice in three years. Both times were DNS.

Rust NATS ClickHouse

Writing

Notes from the unglamorous side of software

Longer pieces on performance, databases, design systems and the operational habits that keep things running.

All posts
·9 min

Boring infrastructure is a feature

Novelty has a carrying cost. A case for choosing the technology you can debug at 3am over the one that looks best on a conference slide.

Engineering

·12 min

Shipping a design system in six weeks

How a three-person team replaced four competing button components with 64 documented ones — and why the tokens mattered more than the components.

Design systems

How I work

Four habits that do most of the heavy lifting

01

Measure before you rewrite

Almost every rewrite I have been asked to lead was solved by an index, a cache header and deleting a synchronous call. Numbers first, opinions second.

02

Prefer one box to five

A single well-understood machine with backups beats a distributed system nobody can reason about. Scale when the graph tells you to.

03

Make the default path safe

If the correct thing is harder than the wrong thing, people will do the wrong thing. Pitfalls of the API are documentation problems first.

04

Write the runbook early

If I cannot describe how to recover a system in one page, I do not understand it yet. The runbook is the design review.

Current toolkit

TypeScriptGoRustPostgreSQL SQLiteRedisClickHouseNATS DockerGitHub ActionsTerraformOpenTelemetry GrafanaPlaywrightViteLinux

A longer, annotated list lives on the uses page.

Next step

Got a system that needs to be less exciting?

I take on two engagements a quarter — usually performance work, database cleanups or rescuing a service that has become the thing everyone is afraid to deploy.