jcrenshaw.dev
john
writing / Unretired

no.20 · code

Unretired

I retired in April 2024. I was in San Francisco, on what turned out to be my last trip to the new Salesforce Tower, carrying all the years of compromising what I knew were solid design decisions for managers who only wanted to hear yes. Don't get me wrong, when I started with Salesforce it was a dream job. They handed me a task, build an SMS sending engine that could scale, gave me what looked at the time like unlimited resources, and turned me loose. My project, my decisions. Somewhere along the line that changed, and I couldn't tell you the day it did, but on that trip it hit me. I was done. I called Ben that night (Ben is not just my husband, he is my best friend and my safe place) and said I'm done. I had planned to work until I was seventy. I was sixty-seven. All Ben said was do what you need to do, we will be fine, come home. The next morning I resigned, handed back the laptop, and flew home. I told everyone who asked that I was done. That lasted about a year, which several people predicted at the time, to my face, and I'd like the record to show I argued with every one of them.

It took me most of that year to figure out what I was actually tired of, because it was never the code. The code was the good part. It was the good part in the 80s when I was writing EPROM tooling against Intel silicon that hadn't shipped yet, and it was the good part on my last day. What I was tired of was the handover. Everything I ever built belonged to someone else the moment it worked. The retinal scanners went to the DoD. The payment rails stayed at Fort Knox National, moving debit and credit and ACH without me. The SMS pipeline at Salesforce is the one that stings, because that one started out mine in every way except the one that counts. It's still pushing messages at platform scale as far as I know, and it is Salesforce's pipeline, it was Salesforce's pipeline while I was building it, that was the deal, I knew the deal, I took the paycheck. I'm not filing a grievance against employment. But four decades of building things you surrender the second they breathe adds up, and what it adds up to is a man who thinks he hates the work when what he actually hates is the shelf it disappears onto.

I didn't know that yet. I just knew I was empty, and when you're my age and empty you call it retirement and everyone congratulates you.

The year mostly held. I don't golf, I hate fishing, and my relationship with exercise is best described as a rumor, so I gamed, probably too much, and spent entire evenings tweaking overlay configs and comparing RAM usage between Windows and Linux, and if you're wondering whether anybody needed that report, nobody did. It was fine. And fine, it turns out, is the word you use for something you're waiting on to end before you know you're waiting.

I was testing the COSMIC desktop beta and went looking for a weather applet.

Weather is a solved problem. The data is free, the APIs are public, and the applet I found wanted me to enter my longitude and latitude by hand. No city lookup, no zip code, no use-my-location. Raw coordinates, like it's 1981 and I should feel lucky the screen has color. Somebody took a solved problem and shipped it half-done because good enough to compile was good enough to release, and everybody installed it anyway, and nobody asked why. I told that story when it happened. What I didn't say then is how familiar the feeling was. I'd been staring at that exact gap my whole career, the one between looking finished and being finished, and I'd never once managed to look away from it.

I griped about it to Ben until he handed me the fix (thirteen years of marriage, he knows exactly when to stop sympathizing). Learn Rust and do better. He wasn't wrong. I'd spent a career getting paid to solve exactly this kind of problem, and there I was griping about it instead of fixing it. I learned Rust because nobody was paying me to, which turns out to be the best reason I've ever had for learning anything, and I wrote Tempest. A weather applet that asks a free API for the weather and shows you the weather. It's at 2.11.2 now, with real error handling, translations through Weblate in languages I don't speak, and flatpak packaging so people can actually install it. Every bit of that growth serves the one job. The weather alerts layer, the historical trends, the plugin system, all the features some corner of my brain kept pitching while I worked, those don't, and they aren't in there. Saying no is the job. It has always been the job.

That's the pattern, and I've been watching it since the 80s. Bloat on one end, half-done on the other, the same disease underneath both, nobody asked why. Over-engineering wears the costume of diligence. Conventional wisdom hardens into something nobody remembers deciding. I spent a career building greenfield systems, new things where nothing stood before, and the enemy on every one of them was never the hard problem. The hard problem is why you showed up. The enemy was the pile of easy features trying to bury it, and the meeting where somebody said yes to all of them because no is awkward.

The other half of the pattern is me, because questioning everything has to include my own positions or it's just a personality defect with good branding. I left GitHub on principle and argued myself back in public when I finally did the homework I'd skipped, which was good for my humility and terrible for my ego. When the facts change, I move. Slower than I'd like, but I move.

Which is the honest answer to why I came back. Not restlessness, not money, and not because retirement failed. Retirement did exactly what it promised. It gave me time that belonged to me, and then it showed me what I wanted to spend it on, and the answer was the same thing it's been since I built my first machine. I see a gap, I can't unsee it, and I have to close it. The only thing that ever changed was who owned the call. My whole career somebody else assigned the ticket, owned the output, and could overrule the no. Now nobody can. If a fix takes three weeks of refusing features, no roadmap meeting on earth can make me say yes.

Tempest was mine. Cadence is mine too. I spent my last decade at Salesforce driving test-coverage gates into deploy pipelines, check-in gates that blocked merges, deploy gates that held the line at 85 percent, because raw talent ships bugs at scale and the gates are what stand between talent and a pager going off at 2 AM. Cadence is that same conviction pointed at AI coding agents, which have all the raw talent in the world and none of the habits. Plan first. Prove it after. The tools are new. The discipline is older than most of the people arguing about the tools. Cadence is a bigger story than this post has room for, and it'll get its own. More on that later.

There's no subscription under any of this, no growth plan, no exit. I'm building because seeing a problem and walking past it is a thing I lost the ability to do a long time ago. I wrote once about my friends, and I said their names, the ones who died while a press room laughed. Part of what I promised the living in that post is that I'd keep watch. A weather applet is not a plague, and I'm not pretending it is. But it's the same muscle. You notice what others walk past, or you don't, and once you've spent years noticing the thing nobody wanted to see, you don't get to turn it off for the small stuff.

They didn't get the years. I got the years, and the quiet voice that comes with them still asks what I did to deserve them, and I still don't have an answer. What I have is work I chose, problems I can see, and for the first time in my life, time that belongs to nobody but me.

The call is finally mine. I answered it.

← index next: It Felt Like Being Me →