From the Terminal
The Joy in Building
The last year in software engineering has been transformative and that is understating the obvious. After spending 23 years of my life coding about this time last year I started to play around with using language models to code. Before that my attempts at coding with them left me bewildered and frankly dismissive. I was not against AI at the time or anything like that. I had even played with Stable Diffusion locally for image generation in years past however for code I found the results not great.
All that changed last summer. I had started a new role on the security team at work and while that sounds glamorous I was effectively doing a mix of intrusion detection, basic IT work, vulnerability scanning, and Staff engineering that was more or less just IT work with a DevOps twist. Sure I had to merge my changes into Terraform but ultimately I was simply gluing different systems together to make sure our auth worked properly for everyone and hey when nothing wrong is happening everyone just kind of dismisses those of us doing IT work so the role was relatively chill and uneventful. But then we started a new project to improve the inventory of our hardware.
Work already had a Go repo for this type of stuff so it was easy for me to start from that and just add another binary. From there I went at it. At first I was using Github Copilot built into VSCode and this was before all the rate limits when copilot had extremely generous allowances. I ended up, in only two days mind you, building the systemd service of my dreams to do a full inventory of a machine. And these are workstations. I was able to get basically everything. What browsers are installed, what extensions are being used, whether your SSH keys are password protected, etc. It was honestly eye opening how quickly I was able to build it. I showed my team and everyone was into it but at the same time it was yet another thing to maintain so we ultimately went with an actual vendor for a new solution called Kolide but the writing was on the wall. Still this was early in the corporate world for this stuff and I ended up basically downplaying it overall.
After that at work I got a new role on the SRE team - and then it fell into my lap. My dream project. They had converted to Ubuntu after using CentOS for over a decade and needed to make their build matrix automatically build not just for 22.04 but also for 24.04 and if possible also ARM64. AI immediately became quickly useful. Not just for writing out code but generally for gathering information on why something failed. Going from one suite to another there's a ton of defaults that change in the build pipeline. Many of the packages that were previously built for only 22.04 by someone inexperienced in build architecture were done in a way that would break with time so a lot of the time packages were just broken when I got to them. None of this is anyone's fault either. Git repos get moved around and suddenly your stable build from 2020 is broken. Then you still need to build that 2020 git repo but you don't even have it mirrored so you're applying a patch on the fly. And so on. The reality is yes before AI we figured this stuff out. The issue is that the feedback context switching loop was way larger. It took time to see the log dump or even parse it manually. Now a language model can parse it for you and then come up with a solution in a single prompt.
In the Before Times: 2023
So let's talk the closed loop reality of development versus the before times. The debugging cycle for tech people used to look like this. You try something, wait for it to run, see it fail, try again.
The reality of that was really that well it sucked. It sucked a lot. I'm not saying I didn't have fun. I did. Sometimes. Maybe? Well sure sure I did - right... Yea. But what I don't miss is being stuck on so many problems and searching tiny nooks and crannies of the internets in an attempt to figure out how to configure a particular Webpack plugin. Worst yet, have you ever wanted to condense an idea for an open source project into reality but realized you simply did not have time to do it? I think the harsh truth of the matter is for every idea I ever had in the coding world I'd only really had time to implement maybe one one-thousandth of the breadth of what I could think of. The reality of it is that I had been in so many weird tech niches at this point in my tech life that it got annoying. How many times can you configure code coverage reports before you feel like you're pushing TPS reports? Best practices are awesome but it becomes rote and boring. You can become excited about doing things right and then it just becomes standard operating procedure.
Being valuable in tech in the business world is more or less about solving problems. I'd work on passion projects all the time if could. But let me give you a little bit of what that looks like.
At one point in my life this was my office. I got to work on such glamorous projects as hosting an 80 person Counter-Strike tournament. I spent my weekends hanging out / working. I was doing things like putting together small bat scripts to push CD keys to the Windows registry on machines from the front desk when Steam didn't even have a LAN Center program.
My very next tech job was working at a small medical publisher in the suburbs that needed their entire digital operations basically rebuilt from scratch. It was a boring rote rebuild of their code but I was also making the most money I had made in my entire life. And I was being valuable and working on things that people were actually using. The whiplash was crazy though.
On one side I was interacting with customers directly, building .NET infrastructure on a Windows XP stack with Windows 2000 servers. And then a few years later I'm working on PHP websites for a medical company.
Anyway why am I bringing this up? The point is I like to build. I don't care where the answer comes from. I never have. When I was digging through some random comment on a forum it didn't matter to me who it really came from and a lot of the time I had no idea why it even worked. It's not like I can claim a lot of this stuff as if I had done it all by myself. The point I'm trying to make is that it is impossible to do all the things. You stand on the shoulders of giants. We are only humans so what we can do in our lifetimes is entirely limited by the time we live in. This manifests itself in so many ways as you get older. You start realizing maybe work is less important or maybe more important. It just depends on what you value.
This is where I find great joy in AI. I can simply do more things. Before language models got good at coding I resolved myself to never making a 3D game or writing the task manager of my dreams. In fact I still had my passion projects. Divergence is one of them. An ORM I've been maintaining for over a decade now but like I said earlier you only have a limited amount of time on this Earth. There's only so much you can reasonably do with your time.
Now that I can cover far more ground in a shorter period of time using a computer is a newfound pure unadulterated joy for me. The dopamine hit of resolving annoying problems with my Gentoo setup in moments is a dream. Being able to quickly test ideas means I'm not stewing on them for months while I try to find the time to see if it's viable.
Since I started writing this post and now when I'm writing these words many things have happened. My initial reason for writing was to try to capture a modicum of what I and so many others in the industry are experiencing. For now I'll let my words rest. I'm sure I'll have other thoughts later. I'd simply like to suggest with kindness, humility, and a little bit of wisdom to find yourself in the center of building things even when you might not necessarily fully understand it.