I try really hard to not take a left vs right view in software design.
I sometimes build systems that are overengineered and I sometimes build systems that are underengineered.
I do believe that every line of code, every function, every class, every comment, every test, everything, is like a puppy that you have to take care of.
If a team adds a "dependency injection framework" that adds a parameter to each and every constructor in a system that has 800 classes, which that's a real cost that's going to make doing anything with that system harder.
I'm a big believer in "cogs bad" because I've seen large teams live the lesson.
From my viewpoint the perfect system is as simple as possible, but well engineered.
I sometimes build systems that are overengineered and I sometimes build systems that are underengineered.
I do believe that every line of code, every function, every class, every comment, every test, everything, is like a puppy that you have to take care of.
If a team adds a "dependency injection framework" that adds a parameter to each and every constructor in a system that has 800 classes, which that's a real cost that's going to make doing anything with that system harder.
I'm a big believer in "cogs bad" because I've seen large teams live the lesson.
From my viewpoint the perfect system is as simple as possible, but well engineered.