A Philosophy of Software Design, by John Ousterhout, is a great read for anyone who wants to understand what actually causes systems to be complex and in turn, how to improve their own designs. At some point in this book, actually on page 169, they mention that this book is about one thing: complexity. How it happens and how to avoid it.
Increased complexity in a codebase makes it difficult to make changes without breaking features. It also makes it difficult to understand all the moving parts and how they work together.
Two resounding causes of complexity are identified as dependencies and obscurity. The book goes into detail about how to minimize or isolate them.
Another great point that I learned from this book is that development is not about building features but about building abstractions. Building the right abstractions also makes systems scalable, changeable, obvious.
This book is very easy to read and understand, the author explains the concepts in a simple and direct way and might only take you a week to read it, as it is only about 170 pages. So, give it a try!