Skip to content

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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.