Easy: Most software is done when nobody uses it any more.
If the code you wrote 10 years ago still isn’t quite done yet, you should celebrate. If someone still cares enough to consider it broken, or can think of improvements, it means that it is useful. In contrast to: finished and done with.




Well the problem is trying to attach the concept of “done” to a bitstream. You can release it, but then the release is “done”, not the software. You can evaluate software only in a specific cultural context, where it can be useful or not. Software is more similar to a law than to a fabricated pencil. Laws are updated and re-interpreted as the culture around them evolves, and they are “done” when the culture is done.
I like this quote:
In other words, a factory product is “done” when it passes QA. You can try to apply the same productivity mentality to software (or to laws) but it just doesn’t make sense, because those are instructions how to do things, and not products to be consumed. It’s not a factory product, it’s a living cultural process.