Solving Complexity with Simplicity
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.
Here are a few principles to keep in mind while building software:
Simplicity — the art of maximizing the amount of work not done — is essential (10th principle of Agile Manifesto)
Build Less (Getting Real)
YAGNI (You aren’t gonna need it) — eXtreme Programming principle
A few more articles relevant in this context: