Recognizing (too much) Complexity
Blog: The Data Center
I recently purchased a book that I would highly recommend to anyone building software. It’s titled “A Philosophy of Software Design” by John Ousterhout and I plan to write blog posts for the next month using topics raised within. The book starts off with a practical definition of complexity which states that complexity is anything related to the structure of a software system that makes it hard to understand and modify. If you have never dealt with software code that grew too complex you can stop reading right here.
Ok, I see that you are still with me here… hehe. I can’t tell you how many discussions I’ve had with customers that began with “We have this software system and we need to make changes to it but it’s gotten to the point where any additional change no matter how small just takes forever.” This is the first symptom of a software application that has grown too complex and it manifests in what is called Change Amplification. Change Amplification results when even fairly simple changes require numerous code modifications.
The second symptom that your software is too complex is developer cognitive load. Cognitive Load occurs when it takes forever for a developer to simply figure out how the code was written. Examples here include API’s with many methods, poor (or no) comments, inconsistencies and dependencies between modules. Before a developer can change code, they need to understand how it is doing what it does.
The final symptom of complexity is Unknown Unknowns. This term, made popular by a former Secretary of Defense, relates to the fact that it may not be clear which pieces of code need to be modified to successfully make a change. This is the worst situation to deal with as there may simply be no way to know just how many places code might be hiding that needs to be modified.
Stay tuned as I will next cover what causes complexity and what can prevent complexity from seeping into your application.
Needless to say, the Decisions platform’s no-code, graphical development environment help’s organizations avoid complexity. If you would like to discuss the state of your current complex application, please reach out to us at firstname.lastname@example.org or request a demo today. We love talking about such things!