The book starts by defining complexity as anything that can make a software project hard to understand and modify. Complexity, as far as the author is

Book summary: A Philosophy of Software Design

submited by
Style Pass
2021-06-15 20:30:05

The book starts by defining complexity as anything that can make a software project hard to understand and modify. Complexity, as far as the author is concerned, is not about how sophisticated a system is or how many features it has (though it is true that big systems tend to be complex), but how easy it is to maintain. If a system is easy to understand and modify, then it is simple no matter how large it is. Otherwise, it is complicated.

Complexity is incremental. It’s usually not one thing that makes a system complicated but an accumulation of bad decisions over a period of time. The author gives two main reasons why software projects become complex:

Dependencies — A dependency between two or more parts of a system is only desirable if the dependency is clear and obvious. When it is not clear what code depends on another, even simple changes to the system will take a long time and there would be a high risk of bugs showing up after deploying to production.

Obscurity — This occurs when some important information about the system is not obvious. For example, when it’s not clear what order in which to run a set of methods in order to carry out an operation. If code is not obvious, a reader must expend a lot of time and energy to attempt to understand it, and the likelihood of misunderstanding it is high.

Leave a Comment