2025: Year in Review
I started keeping more deliberate notes in January 2025 — a daily log of what I worked on, decisions made, things I read. Looking back through it for this post, the year was more eventful than it felt at the time.
What I shipped
The SQLite reporting service. Described in more detail here. This replaced a fragile combination of a scheduled Python script and a shared Google Sheet that had become the de facto source of truth for some metrics nobody should have been getting from a Google Sheet. It's been running since June without incident and nobody has asked me to change anything, which is either a good sign or means nobody is using it.
An internal Go library for structured logging. We had three services each wrapping slog slightly differently. I consolidated them into a shared library that standardizes log fields, adds request ID propagation, and wraps the context handling. Small thing, but the kind of small thing that compounds across codebases.
This site. I launched it in November, later than I intended, with fewer posts than I planned. Both of those things are normal.
What I broke
A migration on the reporting service in August. I ran it against production without testing it against a production-sized dataset first. The migration did a full table rewrite on a table with 2.3 million rows, which took 40 minutes, during which the service was effectively read-only. Nobody was using it at 2am on a Saturday, but that was luck, not engineering. I added a migration test that runs against a production backup before any migration is deployed. I haven't needed it yet, which means it's working.
Also: I accidentally deleted a branch with two days of work on a side project. I had not pushed it. The work was not important, but the lesson — push to remote more often — was delivered clearly.
What I read
The things that actually changed how I think about something: A Philosophy of Software Design by John Ousterhout (finally, after years of it being recommended to me). The sections on deep vs. shallow modules are the ones I keep thinking about when I'm designing interfaces. Also: the SQLite documentation, more thoroughly than I'd read it before. It's remarkably good documentation for a project that old.
Tools that changed my workflow
Neovim (wrote about that separately). Tailscale, which I added to my self-hosting setup and immediately wondered why I hadn't done it earlier. uv for Python, which made me stop dreading the Python parts of my work. delta as a git diff pager — better color, better line numbers, better side-by-side view.
What I'm carrying into 2026
More deliberate writing. I have notes from 2025 that would have made decent posts but didn't get written up. The friction between "I have thoughts about this" and "I have a publishable post about this" is real and I haven't solved it.
Finishing sshq, my SSH config manager. It's been "almost done" since October.
Reading Database Internals properly, not just the chapters that seemed immediately relevant.
Writing less code that I don't understand. This sounds obvious. It turns out to require active effort.