What a Year...

The past year or so has truly been a decade. Many things that probably should have deserved a post of their own at the time, but not for the state of the world and what I’ve been dealing with…

What a week, meme from 30 Rock

I generally don’t like talking about myself — part of the reason this site goes untouched for so long, I don’t know what I even want to say. I know I live an incredibly privileged life, so talking about me, even my problems, makes me feel… guilty? Perhaps normalizing this discussion is part of the solution.

So I apologize for this long simmering catharsis, but I promise you there’s some good news waiting for you at the end, though if you follow me on socials, you may already know the basics.

January 2025

I got a “meets most” performance rating for the previous year at Meta, due to a combination of factors, including pivoting from planned projects to assist IG in rolling out Ruff formatting, getting excluded from meetings in which other teams assigned me work but never informed me, a new manager not caring about why my developer tooling work was important, and my own general distaste for chasing “shiny” projects. All of my peer feedback was glowing, but I’ve learned the hard way at Meta that positive peer feedback rarely affects your final performance rating.

I was moved onto a different developer tooling project that AI teams did want, but between needing to learn Rust, and what I had planned for March, there wouldn’t be much time for me to make progress on that project’s goals. All the while, I was periodically receiving emails from my manager that felt like they were building a PIP without actually putting me on a PIP. I’ve been through one many years ago at Facebook Meta, successfully passed it, and saw a promotion on the other side. But everything changed after the layoffs in 2021.

March 2025

I had GC surgery from one of the best doctors in the business, paid in full by Meta and MZ, a month before my 40th birthday. 💃 🎉 It was the best present I could have ever asked for.

The hardest part was dealing with the literal insanity the pain killers put me through in the first few days, but once I was down to just ibuprofen, the healing process went really smoothly. I took two months off work for recovery, spent a lot of time on the couch and with friends, and came back just in time for PyCon US.

May 2025

PyCon US! The second year in Pittsburgh, and it felt otherwordly to finally be there as me. I gave a reprisal of my “Or Else!” talk from North Bay Python, marking the first time I’d been on stage at PyCon US under my true name, and the only speaker who included an emoji in their name 😹.

My PyCon US speaker card

The talk went well — certainly better than the technical disaster of my 2022 appearance — though the audience was far less engaged in my shenanigans than the beautiful folks at NBPy.

I also talked to a friend and former coworker about my concerns over where Meta was heading, and applied for a new job after 13 years working at MPK…

I then finished out May participating in my first-ever endurance road race, as a driver for the “Electric Turtle” team running a 2018 Chevy Bolt in the 25 hour Lemons race at Thunderhill. Temperatures reached well over 100°F in the shade, but the car provides a unique driving challenge, including how we “tow charge” during each race, and I’ve gone back for three more races with them since.

July 2025

At the start of the month, after an amazingly humanizing interview process, I accepted an offer from Astral with plans to join them in August, working on the Ruff linter. I was excited to work on a small team again, and even moreso to work at a small company, without planning my life around six month performance review cycles and repeatedly convincing managers that what I worked on was important enough to keep me around.

I did not tell anyone at Meta.

At the end of the month, I got my final performance review from Meta — the feeling was mutual. I didn’t even get to say farewell to my team mates before being locked out of internal tools, though of course we had side channels where I could finally give them the good news:

I've been officially terminated y'all

August 2025

I had three weeks of gardening leave, and promptly caught COVID on day one. 💀

I’d managed to avoid it for five years, until my luck ran out. This was during the “razor blade throat” era, but thankfully it wasn’t severe, almost certainly the result of diligently seeking out every round of vaccine I could get my shoulders into. It still turned those three weeks into unending exhaustion and discomfort.

In the background of all this, the relationship with my spouse was slowly disintegrating. After twenty years of loving and affectionate marriage, we were in couples therapy.

October 2025

They started working again, for the first time in over a decade. Therapy ended due to scheduling conflicts. They admitted to me that they had been cheating on me with someone from our car club. I’d never had a panic attack before.

Through this, I was somehow shipping bug fixes and small features in Ruff, including some major refactoring to treat fatal panics as diagnostics alongside lint errors. I would lose a morning or afternoon here and there to grief. That became the new normal.

I began planning and design to implement new system for “ranged” suppression comments. For so many reasons, this would take longer — and involve more back-and-forth discussions and code review — than any of us had ever expected.

November 2025

The Astral team traveled to New York City for semi-annual planning, and I got to finally meet my team mates in person. They were all lovely and so welcoming, and it provided a glimpse of what the Python Foundation team used to feel like at Meta. We even trudged through the bitter Brooklyn cold to get ice cream after a team dinner.

Astral folks bundled up in the cold eating ice cream

As luck had it, my former team from Meta was also in town the same week, so I packed a fancy dress for the trip to join them at a very nice restaurant in Manhatten. It was the perfect opportunity to spend time with friends that I rarely got to see in person after the remote work diaspora.

December 2025

The first pieces of range suppressions became available in Ruff’s preview mode. Matching # ruff:disable and # ruff:enable comments could be used to cover arbitrary blocks of code, using a new comment syntax that would finally be distinct from other linters.

Meanwhile, my spouse told me they wanted to try living on their own, and would start looking for places in the new year. I had another panic attack. I couldn’t believe there wasn’t a way to turn things around, to save our marriage.

They were upset that I got them presents, because then they felt obligated to get me something in return. I spent most of Christmas day alone while they celebrated with the other one and his mother. I was trying everything I could to convince them to stay, to try and find a way forward together.

January 2026

I shipped the remaining pieces of block-level range suppressions, mostly focused on consolidating overlapping diagnostics, and improving performance of the new system. It was scheduled to get stabilized with the next major release in February.

That project had taken too long to get shipped though, and I was given a choice between quitting with severance, or being put on a PIP. I chose the PIP. The acceptance criteria was getting Markdown code block formatting implemented and shipped. I got the feature prototyped and merged by the end of the month.

My spouse said the words “when I’m gone”.

February 2026

The next major release of Ruff shipped, stabilizing the range suppression system, and bringing the Markdown code block formatting to preview mode. I would then ship support for the feature in the LSP, improve the parser and code block language detection, and support pycon interactive console style, achieving the stretch goals of the PIP within three and a half weeks.

I wouldn’t get a definitive resolution until my manager got back from a month-long vacation, so I started working on the next project in our shared backlog: replacing Flake8-style error codes with human readable rule names. While the prototype was simple and straightforward, finding the right way to ship this feature to users was not; there was major overlap with other pending work, including the new default rule set, and potential changes to configuration.

LLM generated issues and pull requests were beginning to take a toll on my love for open source. Being part of such a big project was absolutely overwhelming, and constantly trying to decide whether contributions — and contributors — were legitimate or just slop was an unwanted tax on both my time and my emotions.

March 2026

I officially passed the PIP. And then Charlie told us that he accepted an acquisition offer, from OpenAI of all companies.

Even worse, because I was still “new” to Astral, I would have to interview with OpenAI for my own job — coding, systems design, and behavioral. We were given space to spend a couple weeks focusing on interview prep, and I legitimately tried to prepare, even though I was extremely conflicted about the entire situation. I did mock interviews for all three types, though no one could truly prepare for the behavioral.

The public announcement did give me some interesting conversations at PyCascades though. And of course, Vancouver was incredible as always.

Post by @amethyst@n7.gg
View on Mastodon

Oh, and I was voted to be the newest board member for the Bay Area Python Association, the group that runs and oversees the PyBay conference, as well as the SFPython, BayPIGgies, and Pyninsula meetup groups.

April 2026

The interviews happened. Coding and systems seemingly went off without a hitch, though the behavioral turned out to really be asking “how AI pilled are you”. While I’m not sure if it was the behavioral or the PIP that did me in, I did not receive an “offer” from OpenAI — the only engineer to not receive one. I’m sad to have missed the paycheck, but I’m glad I wasn’t given the option to work at another soulless megatech, particularly that one.

With the deal closing at the end of the month, I was free to work on whatever I wanted to. I took the time to build on top of the range suppression system, adding statement-level # ruff: ignore and file-level # ruff: file-ignore suppressions types, truly giving Ruff its own identity from # noqa.

The company gathered in Montreal for one last outing as an independent team — I dubbed it my farewell tour — and yet again Canada delivered beautiful weather, and excellent public transit. I rode more trains in one short week than I do in most years. The week was bittersweet, knowing it was the last time I could call such an excellent group of colleagues my team mates.

I got home just in time for my favorite regional barn cat conference, ExcavaCon North Bay Python. The talks were excellent — clearly because I helped pick them — and cats were everywherew both in person and in slides, and the ice cream selfie included many amazing friends.

The next day I celebrated my 41st birthday, and the day after that the Astral acquisition deal closed, leaving me as a free agent for the first time in over fourteen years.

Post by @amethyst@n7.gg
Yesterday was my last day at Astral, as the acquisition by OpenAI closed. It’s unfortunate that my time there was short, but I’m proud of what I’ve accomplished…

May 2026

This was the beginning of my “early retirement” moment. I was blessed with a healthy financial runway courtesy of my tenure at Meta, which while not enough to enable an actual retirement, gave me the space to take time off and not rush into an immediate job search, though I did apply for a couple roles at the PSF.

Unfortunately, I was forced to spend a significant amount of energy harrassing Astral/OpenAI to get my COBRA insurance set up, and I’m still extremely unhappy about everything relating to that, but that is perhaps better to be shared with friends over a drink or two, so I can rant about it accordingly.

I went to PyCon US, mercifully still on Astral’s dime, thanks to the good graces of Charlie and prebooked travel reservations. I took the Coast Starlight train from San Jose to Long Beach, in the company of a friend, though the mood for the week was killed before I even boarded the train. The night before leaving, my spouse had informed that they wanted to start talking to lawyers… and somehow thought it better to tell me before the conference rather than after. I almost didn’t even go at all.

This colored most of my week there, making for one hell of a roller coaster of emotions. If I looked or acted out of character, this is why. I’m sorry. Though, as always, I appreciated the opportunity to catch up with old friends, meet new people, and this year most of all, it was therapeutic to bask in the sunlight of Long Beach — literally. I made a habit of swimming in the rooftop pool every night until it closed. I’m glad I went.

Me basking in the bay window of the hotel in Long Beach

Thankfully I did not need to give a talk this year, so instead, I volunteered where I could: registration, the information desk, and the PSF booth to name a few. I also hosted an LGBTQ+ Social open space again, which was well stocked with plenty of excellent people, and I attended a number of other open spaces, including one about space! I visited the aquarium with some friends, and I attended a rooftop happy hour overlooking the Long Beach street circuit before realizing that I’d literally walked past the circuit’s iconic fountain section the day before without even realizing it! 😅

The journey home was once again on the Coast Starlight, though this time alone. I managed to successfully “bid” for a roomette, giving me a more private space to take in the scenery while thinking about the week and zoning out to some podcasts and youtube videos. Once again, the views were spectacular, and I even took a turn at #train tooting.

Post by @amethyst@n7.gg
View on Mastodon

July 2026

The owner of Electric Turtle, the Lemons racing team I drive for, got me in touch with a local startup that he had invested in. It’s a hardware company, building a really cool product squarely targeted at my own interests. They were looking for someone to join their small software team to help prepare the product to attract further investment and bring it into production.

I had a couple chats with the CEO, and then they invited me to come onsite, take a look at the product first hand, and do some light interviews with their engineers and the other cofounder. It was a really great experience, and everyone there was quite friendly and excited to meet me. The last interview with the cofounder had me nervous though, as he asked about how I use “AI”. I did my best to answer truthfully — I just don’t — and explain how I feel about LLMs, and why I don’t find them helpful, although I skipped most of my usual rant about ethics. 😅 I went home at least satisfied that I’d been honest, and would earn the job on my own terms.

The week before this, my spouse stayed the night at their new place, a single rented room further away from where they work. They haven’t lived here since then. It still hurts that they feel that is better than the house and life we spent all these years building together. It’s now just me and the cat in a house full of reminders.

Now

I got email from the startup CEO. He asked when was a good time for a phone call. I could only assume this was for a soft letdown. But I’m extremely excited to announce that they made me an offer, and that I’ve accepted their offer!

Starting on Monday morning, I’ll be the newest engineer working at Telo Trucks. 😸

The Telo MT1 is a battery electric mini-truck the size of a modern Mini Cooper, and yet still seats four adults, has a 5’ bed, and is rated to tow over 3 tons. Again, firmly targeted at this Bay Area car chick who desperately wants a small EV that can tow her sports car to the track while carrying a full set of extra wheels and all of her track day gear. If that sounds interesting to you too, then you can reserve your own Telo MT1 for just $152.

I’m looking forward to working on a combination of backend services, in-car components, and perhaps even a mobile app. Anything I can to help bring this lovely little truck to serial production. I’ve never worked on anything like this before, and that’s honestly kind of exhilarating. I’m optimistic for once.

Thank you for listening.