Chapter 2. Simplify Essential Complexity; Diminish Accidental Complexity

Neal Ford is a software architect and meme wrangler at ThoughtWorks, a global IT consultancy with an exclusive focus on end-to-end software development and delivery. He is the designer/developer of applications, instructional materials, magazine articles, courseware, and video/DVD presentations, and he is author and/or editor of five books. He also speaks at lots of conferences. You can assuage your ravenous curiosity about Neal at http://www.nealford.com.

Neal Ford
image with no caption

ESSENTIAL COMPLEXITY REPRESENTS the difficulty inherent in any problem. For example, coordinating a nation's air traffic is an inherently complex problem. Every plane's exact position (including altitude), speed, direction, and destination must be tracked in real time to prevent mid-air and runway collisions. The flight schedules of aircraft must be managed to avoid airport congestion in a continuously changing environment—a severe change in weather throws the entire schedule out of whack.

Conversely, accidental complexity grows from the things we feel we must build to mitigate essential complexity. The antiquated air traffic control system used today is an example of accidental complexity. It was designed to address the essential complexity of controlling the traffic of thousands of airplanes, but the solution itself introduces its own complexity.In ...

Get 97 Things Every Software Architect Should Know now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.