This article is based on John Ousterhout’s lessons on software design, specifically his book “A Philosophy of Software Design”. He speaks on what can cause a system to be complex and what ways complexity can manifest itself. A software system doesn’t have to be large in order to be complex. It is very much possible to write a very confusing 100 lines of code. It is also possible to have a code base with 1000’s of lines that are easy to pick up and manage.
Causes
There are two (2) causes of complexity in a system:
- dependencies
- obscurities
Symptoms
There are three (3) ways to identify a system that is complex:
- change amplification
- cognitive load
- unknown unknowns
Being mindful of how we manage and remedy complexity in our software systems is an essential skill if we are to have them last for years and treated with care by those who will work on them in future.