ℹ️ TL;DR I taught my software test suite to record training videos. They star the real application, they narrate themselves with captions, and when the app changes, I rebuild them with one command instead of re-filming anything. The system was invented in an evening to teach one person her own custom software; the next night it made a forty-nine-video library for LocallyGrown.net. This is the…
ℹ️ TL;DR The technical companion to part one . If your web app has a Playwright end-to-end suite, you already own most of a training-video studio. This post walks through what it takes to turn one into the other: a small helper vocabulary, an injected overlay, honest fixtures, and a build pipeline, with the lessons I picked up at each step. Part one told the story; this post is the how. The pitch,…
A quiet week of absorbing at work, with the end of a years-long campaign suddenly in sight. Shipped Nothing major shipped this week, unless you count the expense reports from my Austin trip. Otherwise the work week was spent quietly processing everything I took in while I was out there and preparing to move into a brand new domain. Read Reading has really taken a back seat somehow. I’ll get…
Traveling for work on my own terms, balanced against a rich home life, is what I want every week to look like. Shipped Last week I signed off saying I’d booked a focused few days in Austin, and this week I went. With a relative lull in deliverables, and my team starting to map out our next major initiative, it was a good time to be in the room with everyone face to face. Austin is an easy…
A restorative week, with the play recharging me about as much as the work paid off. Shipped At work I keep leaning into the part of the job that suits me best, which is spotting where things could connect better and then doing something about it. There are a lot of small teams here moving fast on tight timelines, and each one solves its problems in whatever way works for that team on that…
ℹ️ TL;DR One email address, support@locallygrown.net , quietly turned into a pipeline that reads, sorts, and drafts replies before I ever see a message: it skips the noise, runs a spam gate that fails open , untangles forwarded threads to find the real sender, figures out which market they belong to (with a plain-English database as backup), and hands the whole thing to Sage , the same expert…
In the late 1970s my parents had friends we’d visit for dinner now and then. I’ve lost their names and how the families knew each other, all of it, but I remember their house was full of books, and while the adults talked I’d sit and read, as happy as a kid could be. We moved from Indiana to Missouri in 1979 and saw them only once or twice after that.
We’re shifting from a jam-packed spring into the lazy days of summer, though there’s nothing actually lazy about them. Shipped I voted in the statewide primaries this week. There were plenty of state and local races on the ballot, and I did my part to push the best candidates through to the next round. It was a good week for LocallyGrown.net. I shipped a range of improvements, from…
Taking a breather and catching up on all the thises and thats that have piled up over the last couple of months. It was a boring week, and I mean that in the best way. Routine has been a rarity around here lately, so a week full of ordinary tasks felt almost luxurious. Juniper has a few weeks of school left and it’s coming down to the wire, so we’re helping her push through to the end.…
A quiet week of recovery and vigilance after launch, with two bright spots: medieval cosplay at a craft fair and a midnight show that I think genuinely rewired my kid’s brain. Launch week is over, and this week was mostly about coming down from it. The round-the-clock in-person shifts ended once we got back off-site, but we’re still rotating through 24-hour support, answering user…
Relief. Quiet pride. A team that pulled off something genuinely hard, and a launch boring enough to celebrate. We launched. And it was, mercifully, kind of boring. Trust me when I say boring is the best possible outcome a software launch can have. We got the final go-ahead about half an hour before our planned cutoff. When the time came we threw a switch, and that was that. The new platform is…
Taking a breather and trying to relax — next week will be either triumphant or a world of hurt, and exhausting either way. This was the calm before the storm. Except before we could even get to the storm, we had to make it through a gauntlet of gatekeepers. We’ve built a whole new software platform to replace a production system that is firmly entrenched, FDA-certified, and critically…
A week in Austin that turned into something different than planned, my first time leading a steering committee, and discovering that grackles run that town. Shipped I spent most of the week in Austin for work. What had been originally scheduled as end-to-end testing of our new software turned into training and on-site team building when the lab wasn’t quite ready for full testing yet. So I…
A breather week between two work trips, slow-walked around Juniper’s spring break, with three days in Asheville to see what a year of recovery looks like. Shipped Not much, and that was the point. Juniper’s spring break lined up with an exhausted post-San Carlos me, so I took one workday off entirely and slow-walked the rest. Long lunches, catching up on appointments, the kind of week…
Spent most of the week in a new city among people I’d only seen online, providing tools we created together to scientists in a histology lab who will help even more people through a time where they need as much help as science can give them. It was a good week. Shipped The production deployment of our new lab management software to the Natera histology lab in San Carlos went flawlessly. Real…
A flurry of last-minute code changes and travel preparations, mixed with meaningful local outings, before flying off into the unknown next week. Shipped Code freeze hit at end of day Monday, which meant a morning of squeezing in quality-of-life features right up to the wire. Once the gate came down I shifted focus entirely to building out performance and logging dashboards — the kind of…
Three weeks at Natera under my belt, and it totally feels like I belong. Shipped Another full-speed week. I’ve moved past the bug fixes and last-minute features from the previous two weeks and started expanding into the larger ecosystem of services surrounding our application. Getting comfortable with the whole system, not just the piece I’ve been focused on. Three weeks in now, and…
Settling in as well as I can in my second week, and being proactive in setting my route forward. Shipped The original plan was reasonable enough: explore the code, ask questions, meet the immediate team one-on-one, expand outward to stakeholders, and then start contributing. Instead, at the end of last week there was a pivot. I was put on the team about to launch a new internal application across…
This week has reminded me of my days as a sprinter, on a 4x100 relay. Everyone is running full speed and I need to use a very short runway to match them and seamlessly grab that baton and go. Shipped I survived week one at Natera. The firehose metaphor has never been more apt. The company provided a locked-down laptop that requires VPN access to do anything at all. I’ve never worked this way…
📝 Originally published on the Infinity Interactive blog This post originally appeared on the Infinity Interactive blog . Reprinted here with minor edits. I spent 2 hours and 10 minutes actively supervising the construction of a complete web application. Twenty-one tickets, 53 story points, 21 pull requests merged, roughly 8,500 lines of code. During one epic I was in the kitchen making biang…
One door closes. Another opens before I’ve had time to take off my coat. Shipped You could say I shipped this stage of my career. Friday was my last day at Infinity Interactive after more than ten years. I squeezed in one final client task just under the wire and then spent the rest of the week building out a hands-on training program for my team on effective use of Claude Code for building…
Carnitas on the stove, noodles on the counter, goodbyes in the virtual conference room. Shipped I completed the back end work on a university’s community engagement portal this week, wrapping up the bulk of the development effort. The client is, and I quote, “over the moon” with the results. I want to get all the way to the finish line before the end of the month, and this puts…
Post-con crash meets career pivot. Tired in a good way, anxious in a productive way. The Con, Concluded Saturday was the full sprint of CONpossible — costuming panels all day, the costume promenade winding through the entire convention space (other panels included, because why not), and then me up front emceeing the costume contest. I’d been apprehensive about even having a contest this…
A joyful stress — managing everything necessary, letting go of the things I wanted to do but couldn’t, and looking forward to being around people I love who I only see once a year. This week was all about getting ready for CONpossible , an Atlanta steampunk convention that’s expanded into “all the punks.” I’m the costuming track director, and this year’s theme…
One day you’re watching fire dancers in a hotel ballroom transformed into a Polynesian paradise. Three days later you’re on back-to-back video calls while ice encases everything outside your window. Convention weeks do that to you. Saturday was the last full day of Inuhele, and it delivered. Panels all day, then a spectacular evening show where MeduSirena and her husband once again…
The week started with chlorine and ended with rum. In between: international grocery exploration, storm anxiety, and a fire-eating mermaid who made me want to do more with my life. Saturday I spent at UGA’s competition pool watching Juniper swim her way through another big high school meet. She’s a sophomore, solidly JV, but this was a personal-records kind of day—first place heat…
Everything around me seems to be in motion this week. Kids moving through milestones, colleagues moving on to new things, seasons shifting. Even the birds are starting to come back. Shipped Saturday I attended a UGA swim meet with my youngest, who’s on her high school team. She’s lucky enough to practice at the UGA natatorium, a genuinely world-class facility, and it was fun to watch…
The chair arrived. I backed a Kickstarter back in April, maybe, from a Ukrainian woodworker for a reclining chair and desk combo. A reward for finishing the LocallyGrown conversion, I told myself. I work almost exclusively at a standing desk these days, but sometimes you need to sit for reading, ketamine treatments, or experimenting with multiple giant monitors in VR. The chair finally showed up…
The craft is in the decisions. The tool just handles the transcription. I use AI tools almost every day. I also have serious concerns about AI as an industry. These positions might seem contradictory, but I don’t think they are. I want to be clear up front: this is a personal statement about where I’ve landed after a couple of years of thinking about this while actually using the…
The five minutes before standup cost more than the meeting itself—and I didn’t realize it until I stopped paying. I’m three lines away from fixing a bug that’s been nagging me all morning. The solution finally clicked, I’m typing it out, and— Slack ping. “You coming to standup?” I thought I had fifteen minutes. I’m already a minute late. So now I’m…
Our time-shifted Christmas week was really peaceful. A couple more days before going back to work on Monday, and I’m trying to make the most of it. Shipped Took most of the week off for the holidays with both kids here. Still managed to nearly complete a new client project we’d budgeted the entire month of January for, in about ten hours of work. Our first status call isn’t until…
My kids were home together this week for what we call “second Christmas”—the post-holiday stretch when everyone’s schedules finally align. While planning the dinner menu, they made a request: a Yule log cake. We used to get one every year from Linda Johnson of Sylvan Falls Mill , a miller and baker who sold at my farmers market. She made a gluten-free version, which mattered…
Slow, like the world was on pause. Everyone else off celebrating while I hung out in the quiet of home. Shipped Built a pantry inventory app to track dry goods, herbs, and spices. It already proved useful when it reminded me about a bag of self-rising flour I needed to use up. Also finished a five-video series of fairy-themed foods for CONpossible (this year’s theme: “Through the Fairy…
I found three opened bags of rice flour this week. Also two of tapioca starch. And a potato starch I’d forgotten existed entirely. Gluten-free baking has always been my organizational weak spot. The flours all look similar, they come in bags that don’t stack well, and I’m forever buying “just in case” because I can’t remember if I have any left. We have shelves…
I started with a $12 droplet and YunoHost. Four years later, I run my entire social media presence on it. In November 2021, I spun up a $12-a-month DigitalOcean droplet and installed YunoHost on it. I just wanted to play around, see what self-hosting felt like these days. Four years and two server upgrades later, that experiment runs my entire social media presence: Mastodon, Pixelfed, BookWyrm,…
Most developers name their AI sub-agents things like stripe-agent or security-checker. I named mine George, Agatha, Ray, and Helen. This isn’t whimsy; it’s how I remember who the work is actually for. When I need to focus on payment integrations, I don’t invoke stripe-agent or payment-flow-optimizer . I invoke George. George Washington Carver spent his life transforming…
After forty years of writing code, I finally realized the thing that made me feel like an impostor had nothing to do with my ability to code—and everything to do with my fingers. TL;DR ℹ️ The Bottleneck After 40 years of coding while terrible at typing and spelling, I discovered the bottleneck wasn’t my brain. It was my fingers. Using AI-assisted development tools didn’t replace my…
Why saving a 23-year-old farmers market platform matters more now than ever—and how modern architecture enables the next chapter of local food systems TL;DR ⚠️ The Path Forward Six weeks post-launch, I’m still squashing bugs daily, but the existential crisis is over. The platform that was one hardware failure away from extinction now has a solid foundation. With a clear niche (community-run,…
Advanced Developer Tools, Real Tradeoffs ℹ️ Important Context This isn’t about the “AI” that generates blog spam or copies artists’ styles. This is about a new generation of developer tools that understand code structure, maintain consistency, and amplify human expertise rather than replacing it. TL;DR I didn’t use “AI” to write my app. I used code-aware…
Three thousand passing tests don’t mean your system works 📝 Note This is based on actual production issues from August 2025. These were the real bugs that affected real users running real businesses. TL;DR ⚠️ The Production Reality Check I launched with 3,000 passing tests, weeks of manual checks on production data, and a two-month beta—and still hit two weeks of real-world bugs: DNS…
How I migrated decades of complex ActiveRecord relationships, subdomain multitenancy, and business logic to a modern stack without losing a single feature 📝 Note on Code Examples All code samples in this post are simplified, illustrative examples to demonstrate concepts, and not actual production code. They’re edited for clarity and brevity. Please don’t point out all the bugs! 😊…
How a platform serving thousands of farmers and customers nearly died from its own success—and the impossible choice I had to make to save it TL;DR 🚨 Platform in Critical Condition By 2025, the LocallyGrown.net platform was dying from technical extinction: Running Rails 3.0.20 and Ruby 2.0.0 (both over a decade obsolete) Critical: Ruby 2.0.0 won’t compile on modern systems - couldn’t…
How a failed wholesale experiment in Athens, Georgia became the foundation for nationwide local food systems TL;DR ℹ️ The LocallyGrown Story in Brief What started as a failed restaurant wholesale cooperative in Athens, GA accidentally became what I believe was the world’s first online farmers market platform. A simple innovation—letting customers pre-order exactly what they wanted before…
Years ago I was given my first prescription for daily brain meds. I have a hard time getting new habits to stick, so early on I hit upon the idea of giving Charlie a treat at the same time, and in no time he was in charge of reminding me it was time to take my meds. It was a job he took very seriously. Eventually other cats joined the family and it wouldn’t do to have only Charlie get treats. And…
I lost my best boy Sunday morning. For the last eight years, he was never far from my side and we took care of each other. I tended to his physical wounds he had as a tiny foundling (in the parking lot of a liquor store in the middle of a thunderstorm) after I adopted him and he took care of my mental wounds, which ran just as deep. He wanted to be wherever I was, always watching and preferably…
The Twitter archiver that @darius made is really neat. It takes the zip file of your archive from that site and it spits out a fully searchable static website of all your public tweets (that aren’t replies to someone else). It was super easy to integrate right into this Hugo -powered website, right here . Most of my tweets are shite, going right back to 2007, but there’s some gold in…
Tonight was the annual Athens Christmas parade, also known as (by a friend of mine, anyway) “Athens Annual Let’s Do Weird Shit Day”. I’ve been regaled for years with tales of the strangeness at this parade, ranging from “Rotisserie Jesus” (a bloody live human Jesus on a spinning cross) to last year’s hippy who thought it would be a good idea to use a roadkill…
The Advent of Code is upon us once again. Every year Eric Wastl weaves together a daily series of clever challenges into a delightful story. They can be solved in any language and method you want, including brute force, and I look forward to it every December. Which is an odd thing to say maybe considering I’ve never made it further than a dozen days in. It just seems like every year the…
It was a day full of good things. Here they are, in chronological order: read two chapters of Dan Moren’s book “ The Bayern Agenda ” while drinking coffee in the hot tub before work the things that didn’t work in my new project yesterday started working attended my first standup with my new teammates ate a delicious chicken pot pie for lunch returned a library book that was…
As a software developer that gets loaned out to other companies, I tend to have quite a few “first day on the job” days. Today was one of them, joining a team working hard to get a new bio-lab robot on the market. As is typical with joining a new project, I spent the entire first day trying to figure out why nearly nothing in the README actually worked. Computers are the worst.