Code Built for Life

2024-07-22

#philosophy 

As much as I would like to write a technical post covering code-level topics, I find that I am increasingly thinking about software at the conceptual level and I wanted to put some of these thoughts into writing. Update: this got spicier than I intended. Just want to reiterate that the thoughts and opinions expressed here are my own and do not reflect my employer.

Buy it for life

I find it striking how physical products built 20+ years ago seem to be more sturdy and tend to last longer than most modern versions of the same product. I have a few t-shirts that I bought in the early 2000s that have held up pretty dang well to this day, but I can’t seem to get more than a year or two out of a modern pair of jeans. Browsing r/BuyItForLife confirms my more than a few people experience this sorta thing.

Some of my favorite examples of the “buy it for life” products are a really good tool, like a hatchet. Simple, well-built, and sturdy.

Why do things fall apart?

An obvious answer is capitalism: companies need to keep costs low (raise the bottom line). There are a couple of ways they achieve this:

A less-obvious part of the answer is: consumerism. Here’s one definition which is illuminating when paired with capitalism.

The theory that a progressively greater consumption of goods is economically beneficial.

There’s also a social aspect to this too. People feel like they need to have something shiny and new. Why should a company invest in a really durable pair of jeans if people are not going to want that style of jeans in a few years?

What is striking (to me) is that digital goods are dealing with the exact same problems, even though they’re…well…digital! There’s no physical properties to degrade, no perishable ingredients. And yet, a lot of programs written 10 or 20 years ago can’t be run today. And don’t even get me started on planned obsolescence.

In addition to capitalism and consumerism, software also has to deal with security, policy, and political pressure. A company can decide that an entire ecosystem is not viable for them and kill it off overnight.

Dying ecosystems

I first got into programming in the late 90s / early 2000s. I was really interested in game development and, at the time, Macromedia Flash was the popular way to make games. So I read a bunch of books, put in a ton of hours, and got really good at creating flash games. I had to deal with a few bumps in the road (upgrading to ActionScript2, Adobe buying Macromedia), but my games still ran. Then apple decided to drop support for Flash on iPhones. Soon, everyone was dropping support for flash. All of that work…hundreds of hours and thousands of lines of code…unusable.

Fortunately, ActionScript translated really well to JavaScript. The games I created made for a portfolio that was impressive enough to land me a job. But that job was building Facebook apps. After a few years, more books and conferences, Facebook decided to pivot and no longer support these sorts of applications. Yet again, I had invested time and energy into something that dried up.

One of the more frustrating things is that the code I wrote is still valid. It should still work, but we have moved on and it’s now bitrot.

In my past few jobs, there has been a constant need to release the next big feature or marketing campaign. I fully expect this when working in marketing agencies, but I was surprised to find a similar drive in multiple software companies as well. Product management and marketing always seem to be chasing the latest industry fad. The time between direction changes seems to be less and less these days. I’m sure I’m not the only one who noticed just how quickly every tech company on earth started adding “ai” into their software.

The parallels with physical manufacturing are hard to ignore. “Have less workers” is playing out right now with all of the tech layoffs.

“Make the workers do more” is leading engineers to cutting corners and creating more and more tech debt. There often isn’t time to do things “right” and there’s certainly no time to go back and clean it up. Why would you, when it will become obsolete in a matter of weeks / months. I’ve literally had projects scrapped for the “next big thing” before we even launched the project in the first place!

Early in my career, I was learning a ton and felt like the time was still valuable, even if I had nothing to show for it. However, I am not learning from these ephemeral web projects and it’s hard to feel like my time isn’t being wasted.

What am I going to do about it?

In my opinion, we are trending in the wrong direction. I’ve already written off work-related stuff. I work for a corporation that has decided it needs to constantly grow. I disagree with it, but there’s nothing I can really do there.

However, for my personal projects, I am going to stop relying on ecosystems and technology that are out of my control. It’s not worth it to me to build on a platform that’s going to go away or use a library that changes it’s license or goes closed source.

I’ve got some fun stuff I’m working on and I’m sure I’ll write about it shortly.