About

I write programs. Remote. The parts of software that show up after the first working version.

I got into building software because I wanted things to exist that didn’t. That part hasn’t changed. What has is how much of the job sits after the first working version: the data that has to stay consistent, the error that only appears on a machine I don’t own, the second year of a codebase when the clever bits start to cost.

I work across the usual layers: the screens people use, the services behind them, the data that has to stay true. The interesting problems are usually in the joints — a screen that looks done until you ask what happens when the save fails, a schema that seemed obvious until the product had to tell the truth about an awkward case. I care about those unglamorous parts. They are the product, once anyone besides me is using it.

I work on macOS, Windows, and Linux. That isn’t a flex. Clients have machines. Deployments land somewhere I didn’t pick. The people who inherit the code will not have my laptop, my editor layout, or my patience for a README that assumes too much. If it only runs where I developed it, it isn’t finished.

What I actually do

  • Front-end UI. Pages, components, and states that have to stay readable after the visual pass is over — including empty, error, and “this field is missing” cases.
  • APIs. REST endpoints with contracts you can rely on, not a pile of special cases that only make sense if you wrote them.
  • Data modeling. Schemas that match how the product actually works, including the awkward parts people hope they can paper over.
  • The glue between them. Validation, errors, auth, migrations — the wiring that keeps the rest from falling over once real users show up.

Working together

I work better in writing. A short note that names the problem, the constraint, and the deadline is more useful than a call that doesn’t. I want scope before I write code — what’s in, what’s out, who it’s for.

I will say when something is a bad idea. That isn’t obstruction. It’s cheaper to disagree about a plan than to unwind a month of the wrong implementation.

If you want to work together, start on the contact page. How this site handles data is on the privacy page.