This book helped change the way that software development is generally practiced, from the leadership to the programmers, from the business to the design. It is important to note that this book has been delivered in two very different editions. The first edition in 1999 set the direction while the second edition in 2005 brought insight out of several years of experience in an updated text.
What’s so “extreme” about Extreme Programming? First, it advocates a practice called “pair programming” – programming in teams of two and sharing the burden of writing and debugging the code. Second, it advocates a heavy use of automated testing and writing those tests at the beginning of a new feature, not at the end. It also advocates the practice of continual integration – making many small deployments instead of one big deployment. This practice, 15 years after publication, is adhered to in most development shops.
What I like most about this book is that it flattens the landscape. Instead of having hierarchies and bureaucracies, it brings responsibility to everyone on the team. This is especially true in my industry, medical research. It’s in touch with the evolving dynamics of the workplace. Careers should not be a race to the top but a continual development of skill. Lean production techniques, concepts of continual improvement, and shared responsibility are all consulted in suggesting how to handle the business of software. The purported results are substantially reduced software defects (i.e., improved quality) and slightly reduced development time (i.e., reduced cost).
While these ideas were cutting-edge in 1999 (and still not widely practiced in 2005), they are expected in most software shops in 2020. Thus, this book is to be consulted as a vestige of history rather than a set of new ideas to implement. It’s still interesting, relevant, and inspirational because of the revolution it sparked. I read this book as a way to think through the practice of test-driven development. It helped me with that practice and continues to catalogue what good software development consists of. Interestingly, these skills have developed into Agile practices and more recent DevOps trends. Writing about these topics should now be consulted for state-of-the-art.