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:
The more we see creative software engineering as monotonous ticket crunching instead of learning and experimentation, the more we compare producing software to building houses. With that analogy, you can only go wrong. (Niko Heikkilä)
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.



The truth is that that life is full of contradictions and we are all struggling to figure this one out. Not every contradiction can be cleanly resolved. In the meantime life goes on. Later it will probably turn out that we’ve all been worrying about the wrong question, but right now… I don’t know.