IMHO overengineering is a curse on our sector. I see it all the time, it often takes the form of layers and layers of abstraction or the choosing of flavour of the month architectures such as microservices because ‘hey, that’s what Netflix does!!!’…
There’s some really good ideas in the Reddit thread below on how to avoid overengineering…
The approach I like to use which helps me to keep a grasp of complexity is to imagine or pretend it was my money being spent when choosing the architecture. I can then ask myself honestly… for example do we really need angular?, do we really need microservices? do we really need some additional layer of abstraction to cover some ‘just in case’ scenario?
It’s easy to spend someone else’s money… but if it was really my money being spent would I consider these approaches wasteful? Is there simpler ways to implement things which will still meet the requirements?