It is rare to see a piece of software considered “done”. The TeX typesetting engine in one of the few examples I could name. Why isn’t this more common?
Whenever a project doesn’t have releases in a while, there are cries about “abandonware”. e.g. Xorg server recently. I have been using X11 since 1997. It doesn’t have any glaring deficiencies, as far as I can see. (And its “replacement” Wayland is not usable on FreeBSD. So I’m quite happy to keep using it as-is.)
Software developers seem to be on an everlasting journey chasing new features.
By trade I am a mechanical engineer; a developer of hardware. No sane hardware developer would work like this. When creating a piece of hardware we work from a design specification; a description of the functionality the hardware should perform. When you have met the specification, development is finished.
Iterations in hardware are relatively slow and expensive. So hardware developers focus a lot more on getting it right the first time.
By contrast, iterations in software are basically free. So it is very tempting to “release” something that isn’t really working well and then keep tinkering with it. In my humble opinion, this is not a good model. A well-known mantra in software is “release early, release often”. While that is useful for developers, especially when working in teams, it is not for users who are not developers.
In contrast, I am leaning toward releasing software when it is capable of performing the function it was designed for. After that, new releases are to fix bugs and to incorporate new insights I might have had about the software and its function. This is one of the reasons why I am moving away from version triplets, since version numbers are mostly arbitrary for me.
For comments, please send me an e-mail.