To be finished, software has to exist in a specific context, for a circumscribed purpose. But some software is inherently open-ended, because the question of how we should work is open-ended. The way we work has changed over the past decades, and the software that supports that work has also changed. IDEs aren't finished, and neither is Emacs. Compilers might have a stable interface, but their internals aren't ever finished (you can artificially freeze the optimizations you do, but you're not done, you're giving up).
Even for the cases the article starts with, I have my doubts. Is grep finished, or is it stagnant? The wow feature of ripgrep is performance, but it also provides new functionality (like ag before it).[0] Grep is finished, but the cludge of pipelines and copied shell snippets that people attach to it aren't. Eventually someone says "instead of find xargs blah, let's write a tool." Finished software makes a decision about shunting the complexity elsewhere.
[0] Amusingly enough, I don't use ripgrep or ff or many other new tools, because I am a creature of habit. But they look like something I _should_ use.