I was happy with the article content until I got to the examples.
These examples promote been suspicious of everything and treat the technical people as non-professionals, and one core competency of a manager is to build teams and promote respect. So I took exception on it.
“I’m making a generic version of…” It means: I don’t understand the constraints of the actual problem, so I’m going to design an even bigger problem that we have no way of verifying the efficacy of.
BS. One of the most successful projects that I have delivery was so BECAUSE I started with a generic version of the core business concepts, and then I made a specific version for the different intra-department routings. There was more investment up on front, but it was recovered with gains at the end. Extracting the cross-cutting concerns into more generic versions is the right way to go.
“I’m creating a framework to…” It means: I’m not interested in solving the actual problem, so I’m going to create something else so that the person that actually will solve the problem has to also fix the problems in my stuff on top of that.
Same thing, is the cross-cutting concerns are implemented in a common framework, then you will have a high level of code reuse.
“It’s platform independent.” It means: I literally have not spent two seconds thinking about what platforms this will obviously not work for.
Sometimes you don’t need to cover all platforms, but a few ones. So I might have to think what platforms will not work for and I still need to make it platform independent.
“I’m adding this to make sure it’s future proof.” It means: I believe in fairies.
One of the biggest compliments that I get from my work is exactly this: It has been 10+ years and we are still using what you created and finding gems in your code. If you have not received this kind of compliment either you are too young to write this article or know very little about software architecture
“I really need to refactor this bit…” When you hear “refactoring” it’s a bit more of a yellow flag. Technical debt is a real thing that needs to be addressed and that you should be aware of.
I cannot count how many times I have found myself in front of the question “Can you fix it?” and answering “This is such spaghetti code that I would really need to rewrite it, let alone refactor it”.
I seem to me that these kind of recommendations are for a specific niche of software development. Enterprise (not enterprisey) level development, can have valid counterexamples for all and each one of what was described in the article.