A BUILDER
OF systems.
portrait here.Drawn, 2024 —

Edited for length.
I build the quiet parts of software — the ledgers, the pipelines, the platforms that have to keep running while the product team iterates on top of them. Work that rarely shows up in a screenshot, but that every screenshot depends on.
My education was Computer Science; my actual training was eleven years of watching clever systems fail in production. The lesson I keep re-learning: elegance is a property of what you chose not to build, and the best architectures are the ones a tired engineer can still reason about at 3 AM.
These days I take on four or five engagements a year — founding teams, platform rewrites, AI systems that need to graduate from demo to dependable. I work alone, or as the technical spine of a small team, depending on what the problem needs.
Six operating principles.
Not rules. Rules get broken. These are the defaults — the things I reach for before any other approach, and the things I talk clients out of abandoning.
Boring beats novel.
The tool that's been in production for a decade has fewer surprises than the one on Hacker News this week. Reach for novelty only when the boring version genuinely can't do the job — and be honest about which side of that line you're on.
Make migrations boring.
Big-bang cutovers are a failure of planning. Strangler-fig, dual-write, shadow-read — pick the pattern that lets you ship changes on a Tuesday afternoon and roll back before lunch. No drama.
Observable or it didn't happen.
If a service can't tell you where its last 300ms went, it doesn't ship. Logs, traces, and a single OpenTelemetry pipeline aren't a nice-to-have — they're the only way incident retrospectives stop being fiction.
Idempotency is a love language.
Every write that matters should be replayable. Keys on ingestion, event sourcing for the ledger, retries that don't double-charge. It's less glamorous than the feature work, and it's what lets the feature work exist.
The model can say no.
In AI systems, the most important output is a confident "I don't know." Hallucinations aren't a model problem — they're an architecture problem. Build refusal in at the schema level, not as an afterthought.
Write for the tired engineer.
Assume the person reading this code at 3 AM is smart, competent, and operating on four hours of sleep. Name things accordingly. Leave a comment where the reason isn't obvious. Future-you will be that tired engineer.
Currently.
Updated monthly, always behind reality. Useful if you want to know what I'm thinking about before you write.
Reading
Building
Listening
Press & speaking.
Other interests.
Forty kilometers a week, mostly along the Tagus. The only time code design actually happens is mile four onwards.
Pentax K1000, Portra 400. An expensive way to slow down. The film bill is a feature.
Terrible at openings, patient in endgames. Probably says something about how I build software.
Niche Zero, La Marzocco Linea Mini. Past the point of diminishing returns. Still adjusting.