About
I build things, and I think about
why they work
I'm a senior software engineer with 6+ years of experience and a master's in artificial intelligence. That's the summary. The longer version is that I'm mostly interested in the gap between a system that demos well and one that holds up.
This page is the story rather than the résumé — if you want dates and titles, the PDF has them.
How I got here
The beginning
A spreadsheet that got out of hand
I started programming because I wanted to settle an argument about basketball. I had a spreadsheet tracking player efficiency, it grew past what spreadsheets should do, and someone told me the word for what I actually needed was “a script”. I have been chasing that feeling — the problem being slightly bigger than the tool — ever since.
Early career
Learning that shipping is a skill
Backend engineering
My first few years were backend work: APIs, queues, databases, the unglamorous machinery under other people's features. I learned that writing the code is the easy half, and that the engineers I admired were the ones whose systems were still comprehensible a year later.
The turn
Why I went back for the AI degree
M.S. in Artificial Intelligence
I kept hitting problems where the answer was statistical rather than deterministic, and I could feel myself guessing. A master's was the slow, expensive way to stop guessing — and the part that stuck was not the models but the discipline of evaluation: how you know whether something actually works.
Since
Building where the two meet
Senior Software Engineer
Most of my work now lives at the seam between machine learning and the systems that keep it honest — data pipelines, feature correctness, serving infrastructure, and the interfaces that let people tell a good prediction from a confident one. It turns out the backend years were the prerequisite, not a detour.
Now
What I'm chasing
I want to build products where the intelligence is invisible and the usefulness is obvious. The best compliment a system of mine has ever received was someone not noticing it was doing anything clever.
How I like to work
Make the mistake impossible
Conventions decay and vigilance has bad days. If something must not happen, the system should refuse it, not remind you.
Optimise for the second reader
Code is read far more than written, usually by someone with less context — often me, later.
Be suspicious of good news
Every genuinely surprising result I've produced has, so far, turned out to be a bug. Look for the leak before taking the credit.
Outside of work
The things that fill the rest of the week — several of which have quietly turned into projects.
Golf
A game that punishes overthinking, which makes it excellent practice for someone who does a lot of it.
Basketball analytics
The original reason I learned to code, and still the domain where I test every new idea first.
AI, applied
Less interested in what models can do in a demo than in what they can do reliably, on a Tuesday, with real data.
Automation
If I've done something tedious three times, the fourth time is a script. This is occasionally a net loss and always satisfying.
Reading
Mostly non-fiction, mostly outside software — the useful ideas tend to arrive from somewhere else.
Learning in public
Writing things down is how I find out whether I actually understood them. Usually I didn't, at first.
Let's talk
I'm always happy to talk about engineering, AI that has to work in production, or whether a spreadsheet has finally become a database.