From time to time I feel exhausted in my software development efforts because I am pressed to think and develop in a very specific and very short-term manner. One client here and now requires one feature and I should implement it for him. Neither the client nor the management of my company are interested in investing some time and effort in investigating how can we make this feature adaptable and more general (e.g. introduce configuration instead of hard coding the one branch of a feature) for other clients or for future use.
On the one side, this may be a bad business decision. From the other side, it is certainly a bad HR decision. Ancient masters achieved excellence precisely because they made or built their artefacts for the future, for the generations to come, for eternity. Maybe software developers can achieve similar mastery and excellence if they are allowed to build software for eternity.
So - are there technical criteria (best practices, industry standards, etc.) for building maintainable and evolvable software, criteria that determine the required level of generalisation and future-proofness for implementation of specific features?
My domain of application is accounting and business software (back-office).