Chapter 65. Complex: The Most Overloaded Word in Technology
Laura Nolan
Both software engineers and systems engineers use the word “complex” as a specific term of art. Software engineers use it in several ways, distinct from the systems meaning. Software engineers and systems engineers (SREs, production engineers, systems administrators, DevOps practitioners, etc.) are overlapping groups of people who work together. We all need to understand which meaning is in use at any given time so we can communicate clearly.
Complexity has been the enemy of the software engineer for decades now. Fred Brooks’ classic essay, “No Silver Bullet,”1 divided software’s complexity into two parts: essential complexity and accidental complexity. Essential complexity is related solely to specifying the problem and how it should be solved. Accidental complexity is related to the details of implementation. The overwhelming majority of the work of technology operation is about accidental complexity.
However, this doesn’t tell us what software engineers mean by complexity. Fundamentally, complexity is that which makes software difficult to understand fully and to reason about correctly. Moseley and Marks’ paper, “Out of the Tar Pit”, discusses several sources of complexity. The biggest, and hardest to deal with, is state. State influences the flow of control of a program, but the number of potential states ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access