Strategies to Identify Complexity
I believe a lot of driving force behind the additional complexity in our software at the moment is engineers believing the “correct” way to design something is using complex technologies (cynically, usually pushed by those that benefit most from their use). For Example:
- “We need to use NextJS to benefit from caching because a React SPA in the browser will take too long to load”
- “We need to use Serverless functions because a single server won’t handle the load”
- “We need to use a load balancer in front of our API because we need to deal with DDOS attacks”
Any time you hear an argument of the form “We need to use X because Y”, always drill into the X and the Y:
- Is there extra complexity or hidden cost to X?
- Is Y actually a problem we have right now?
If you can’t adequately answer these questions you may not understand your problem enough. When you do know the answers, you can make a better decision if any additional complexity is worth it.