There are not that many books who take a look at the software development profession. The book “Emergent Design: The Evolutionary Nature of Professional Software Development, by Scott L. Bain” takes a look on how the profession has developed and is still developing. This “professional view” is used to look at practices, patterns, and on some of the existing software development methods. The biggest benefit of this view: A much better understanding on how something works, why you could do it, and when (and also when not)! This book therefore contributes to the deployment and adoption of the software engineering technology, a field where we are still learning.
Patterns help professionals to think about problems and solutions. They provide a language to discuss them. They are not a template which can you deploy out of the box, a deeper understanding is needed. That is why this book goes back to design principles like coupling, cohesion, redundancy, coding styles and testability. If you have been a software professional for a longer time, you probably learned about these things, in courses about structural programming, architecture or specific design methods. The concepts are still valid in modern programming methods and languages, and taking a fresh look at them helps you to get a better understanding of patterns, and thus use them more effectively.
This book also explores agile practices like unit testing, refactoring and test driven development. These practices have a long history, and were already used before people started calling them agile. This book describes the concepts and ideas that started the practices, and how they have developed themselves to become what they are right now. So if you want to know why you should do these practices, and how to do them effectively, this book can help you.
To give an example on how this book is build up, let’s see how it covers the subject change and evolution in one chapter. It starts with the fact that too many projects fail, defining what success would look like. It then goes into the main causes of failure, doings things wrong, and doing the wrong things. Now the fundament is there, change is needed. But that’s not enough; the chapter continuous by describing that change is all around us and is actually something that we experience daily. So in stead of fighting it, let’s accept is, or better, use it to our advantage, and capitalize on it. So to deal effectively with chance, your software will always be evolving, and your development methods should include sufficient feedback to support this and be successful. Most people would agree with this conclusion. But many would have a hard time figuring out how to do it, and in convincing other people why it is so important. This chapter helps them by linking project failure to evolutionary development.
The book takes the reader along on a journey into the profession. This way of exploring takes time, so if you are a person that just want’s to know how to do it, then this book is not for you. But if you want to deepen your understanding of professional software development, then this book can certainly help you with that. This also makes it a good book for managers and consultants that are coaching professionals and teams on their journey to become more effective.
Note: This book review has been published previously in the IEEE Computing Now bookshelf.