Chapter 2. Mastering Complexity
The most fundamental problem in software development is complexity. There is only one basic way of dealing with complexity: divide and conquer.
Bjarne Stroustrup [Stroustrup 2024]
This chapter will discuss where complexity comes from in general and in a legacy system in particular, how to deal with necessary complexity, and how to avoid unnecessary complexity.
To classify how complexity can be dealt with in software development, the subtitle of Eric Evans’ book Domain-Driven Design is a good guide: Tackling Complexity in the Heart of Software. Evans promises the reader that the approach he describes reduces complexity in software (development) or at least makes it manageable. Domain-Driven Design helps on different levels. To distinguish between these levels, we use Figure 2-1, which summarizes the various aspects of complexity that you’ll encounter in software development based on [Lilienthal 2008] and [Lilienthal 2019].
The next two sections explain the two dimensions from Figure 2-1 and their interaction. As the book proceeds, you will be see that the basics that are introduced in the following chapters offer methods and heuristics for some of the complexity sources listed in Figure 2-1.
Figure 2-1. Complexity and its dimensions.
Origin of Complexity: Problem and Solution Space
The origin dimension of complexity in software development is shown ...
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