Because building for extensibility adds real complexity for a hypotetical need
If you want the code to do something different later, change, replace or extend it then... when you actually know what it needs to do
If you want the code to do something different later, change, replace or extend it then... when you actually know what it needs to do
It is my understanding that we should try to build solutions to current problems, and be open to future use cases that could involve small additions in functionality.
It would be stupid to design an unmodifiable system just because some parts can be deleted and we are not sure what future needs are. Code should always be easy to extend, in my opinion.
But what is an unmodifiable system? If it's code in your control, it can be changed, right?