I post about it a lot, but unnecessary complexity really is a silent productivity killer in our development lifecycles 👿 …
When I’m architecting software here’s three tips or approaches which I find help me to control complexity 👇🏻.
1 – Spend your clients/organizations money as if it’s your own
It’s easy to spend someone else’s money on abstraction layer X, pattern Y, library Z etc. but if it was your money would you do something differently? Would you look for a more cost effective approach? It’s very likely you would!
2 – Focus on KNOWN requirements and avoid ‘just in case’ architecture
Avoid large amounts of ‘just in case‘ design. This is when we add abstractions and extra layers in case something happens in the future. This is the main culprit for complexity I see in software, developers add too many architectural elements which only provide the potential of benefits if something X, Y, Z happens.
IMHO it’s better to focus on our KNOWN requirements (and constraints) and have SIMPLIER ARCHITECTURE NOW and build up an awesome test suite so we can confidently embrace change if/when it happens rather than paying for complex designs upfront which may never end up being needed.
3 – Avoid architecture by CV / LinkedIn
Avoid architecture by CV or architecture by LinkedIn… this is when a developer really wants to use a particular pattern or architecture to get experience in it and does so without the app having the ‘problems’ that the pattern or architecture solves. Unethical? you tell me! Uncommon? unfortunately not 😢.
And of course don’t forget KIS and YAGNI.
How do you control complexity in your apps?