Anyone who works with software developers might believe that we don't agree on anything. And while there might be some truth in that, there are some principles that we generally agree on. If you look at the things written and discussed concerning software development over the past few decades, you'll find that there is a surprising amount of consensus. There are some big ideas that most of us actually do agree about. This book is about those big ideas. It is about the multifaceted work of software development, and it is about trade-offs and balance. Sometimes, there is no single “right solution,” there are only solutions that are more or less optimal. One size does not fit all. And so this book is about wisdom; more than mere knowledge, it is about the application of that knowledge. How do we, as an industry, think about software development? This book is about the accumulated wisdom of the software development industry. It is about software developers: about who we are and about how we work.
This book focuses on three major themes of software development: context, complexity, and communication. We all have stories; that's our context. Everything is done in context. And we need to understand the context to create software. When we develop software, we manage complexity. Our processes, our designs, and so many other aspects of our work are dependent on our ability to manage complexity. And software development is about communication. Communicating with computers ends up being the easy part. It's communicating with people that's the more difficult part. In this book, we explore these three themes as they relate to all aspects of the work we do as software developers.