I posted a graph on LinkedIn. It showed that of the 10 million open source projects tracked by ecosyste.ms, more than half haven’t been updated in two years. I didn’t suggest old was bad or good, but I got a number of replies about most of this software is “done” so it’s fine. We don’t have any evidence either way, I’m unwilling to make any claims about the numbers (yet, I’m working on it). This got me wondering what it would mean for software to be “done”. Which then led to the question is anything ever done? It’s a lot harder to figure this out than I had expected.

I’ll start with a YouTube channel I like quite a bit called Baumgartner Restoration. They take paintings, usually broken paintings, and they fix them. It can be everything from holes in the canvas to just cleaning up hundreds of years of dirt and grime. I like this channel because the person who does the work, Julian, explains what’s happening and why it’s happening. I know nothing about paintings except how to look at them. So it’s fun to watch. But the point is I think most of us would consider a 200 year old painting to be “done”. But is it? If it needs to be cleaned is it done? Maybe it used to be done and now it’s not done anymore? Or maybe the painting is done and we’re starting a new project. I’m not exactly sure how to unwind this.

My second example I’ll use is my house. I bought a 100 year old house that needed a new foundation (I would not suggest anyone ever do this having been through it). I have a time lapse video of the event so you can see what I mean. I would argue my house was never finished because the foundation was inferior and started causing problems almost immediately. It was a concrete foundation poured in 1919, there were no footings for the concrete walls, it was just concrete poured on dirt. Anyone who has ever worked with concrete just died a little bit inside. And of course as the project moved forward we also had the joy of replacing all the wiring and a bunch of plumbing. And of course there was asbestos as a bonus prize! I will never consider this house done, it will be passed on to a new victim someday.

My last example is going to be a school assignment. If you have to write a paper for a class, you write the paper, submit the work to the teacher, and that’s pretty much it. I think it’s an easy example for something being “done” in a simple definition of the word. I submit the work and I don’t have to revisit that work ever again (hopefully).

But what about software?

I think when we think about software, real world examples don’t really hold up. We love to construct real world analogies when we talk about software, sometimes they work. Usually they don’t. There is software that will never be done. The Linux Kernel comes to mind. It continues to change and grow by design. But there is some software that we could call done. The solitaire game that came with Windows 3.1. Certainly that’s done. Super Mario Brothers is not only done, but also awesome.

An example I see used ever now and then in this conversation is the compression library zlib. Zlib gets an update maybe every couple of years because some sort of bug is found. The code basically works, there’s not a lot of new features to add. I think this is the best candidate so far for a definition of “done”. But it’s still getting an update about every year. So while we could claim it’s done, clearly it’s not. I would expect something that’s done to not need updates ever again. Some might call this “feature complete” because there aren’t any new features being added, even though maintenance continues.

There’s also a problem when you have something that could be done, but the world changes around you. The jump from Python 2 to Python 3 saw incompatible code. There is without question code written for python 2 that was considered done by the author but now that code doesn’t work anymore because Python 3 is incompatible. Is that still done? Can something done become undone? This is one of the challenges with software. The world is moving and changing all around you all the time. What works today might break tomorrow because someone else made a decision.

There’s another example of some difficulty with software that will never be updated, but should be. There was a security vulnerability called TARmageddon that come out in 2025. I spoke with the Edera CTO, Alex Zenla, on a podcast episode. Alex gives us a ton of interesting insight. Some of the affected tar libraries are essentially abandoned. You could probably argue an abandoned library is done. Maybe the library was considered done, but then new bugs were found and the forks decided the library wasn’t actually done after all. Open source is weird sometimes.

I feel like none of these examples give a sense of what done really is. If you have better examples I would love to hear about them. The more I try to figure this out the more I think nothing is ever “done”.

Is anything ever really done?

There probably isn’t a right answer. Anything resembling an answer will be an opinion. Calling software done might not be correct. When I started writing this I didn’t have an opinion on this topic, but as I write some examples, I think it’s unlikely software is ever truly done. There will always be maintenance that has to be done. Bugs to clean up, new versions to support. Even just meeting whatever the new standards might be appropriate (remember back when we just ignored compiler warnings). There probably isn’t a real world analogy that works here, but I now suspect even things that could be called done will need ongoing maintenance lest they transition from “done” to “broken”.

And maybe that’s the transition everything makes. Something can be done, and it can eventually break, and that could be OK. Sometimes things break and we need to replace them with something newer. Maybe not better, but certainly newer. All that asbestos I had to take out of my house was certainly “done”, but not in a good way. Now that it’s gone maybe it’s finally done.