Lets use X framework because it is “cool”
We are DevOps, so we should use XYZ tool for deployment
Only Microservices because Monoliths are bad
We know what users want, so lets build all these features in the backlog
Software systems are inherently complex because of a lot of factors. We make it complicated by making wrong, unnecessary choices. Every line of code — written by us or added as part of a dependent library — adds complexity. So we should add code only when it is necessary.
It is not just about the code. Unused, unnecessary features also add to the complexity. So, add features only when it is necessary and remove unused ones.
Apply a scientific method to software development, with experiments and feedback cycles. That is what Continuous Delivery is all about. The solution to complexity is simplicity.
A few more articles relevant in this context: