How do you keep personal coding projects working over long periods of time without maintenance?

The issue is, almost all of the projects break over time if they aren’t maintained. They suffer from “bit rot,” where they just degrade over time.

This happens for a number of reasons, but software changes, things upgrade, operating systems change, integrations and dependencies change or stop working. But when you have a program, you think it works — but that only really means it’s working now. To continue to keep things working you need to upgrade packages and servers and software and operating systems and that does not happen automatically. That also means you need to update the code.

I’ve found upgrades break everything. Whether that is the Facebook API which I think has been deprecated 5 times since I started programming with it. Or iPhone apps I’ve written which worked on the first iPhone. If you don’t keep coding the app and continue to update it it won’t keep working. That’s been true for WordPress websites. Or really any site that has an external dependency. It’s also true for local programs I’ve written where it is now difficult to reconstruct the same C++ or Java environment when it was written.

If you could freeze the OS, application, data, and software all in time… that would work. I think there are some people working on that. But otherwise, if you leave things for a bit, they stop working. And often there isn’t a clear migration path.

I hadn’t upgraded my server in a while and there was no longer an easy way to upgrade the server because it was not a supported version. So I needed to create a new server and migrate.

The most robust programs I’ve written has been HTML/ CSS/ JavaScript where everything is local. Those still may work today even if they were written a long time ago.

I think in upgrading our software we need to consider all the downstream work created by a small breaking change. And that even if we add more, causing breaking changes creates a lot of work for people who might not want it.

So how do you keep personal coding projects working over long periods of time without maintenance? I don’t quite know the answer. For me, many break without maintenance. The best heuristic I have is they have to be super simple. I’m curious how other people deal with this.