My Foreword to "The Art of Agile Development"

26 October 2021

When we wrote the Manifesto for Agile Software Development, our supporters were a small minority trying to change an industry. Now, twenty years later, “agile” is mainstream. But I write “agile” in scare quotes for a reason—lots of people say they are doing agile software development, indeed most genuinely believe that, but their actions bear little resemblance to the vision we shared two decades ago.

The truth is that working in an Agile way requires a web of interconnected practices spanning both the management and the technical execution of software development work. Many of these practices, particularly the technical ones, are not well understood or widely taught. Consequently, too many languish with a distorted view of what can be such an effective way to build software products.

James Shore was one of the early pioneers, riding the trail of Extreme Programming, a central pillar of the Agile movement. His first edition of this book was a favorite of mine: a handbook for teams to show them what they needed to know to execute an agile process properly. He later went on to work with Diana Larsen to create the Agile Fluency Model—a model that captured their experiences of the different ways people can develop their skill in using Agile approaches. In this model, a simple application of project management techniques, often referred to as a basic Scrum approach, provides some value by focusing on customer needs but lacks the technical skills you need to unlock the high productivity and reliability that many teams accomplish.

That point of view rightly drives the structure of this book, which puts the bulk of its weight on how to focus on value and how to deliver that value reliably. Focusing On Value means understanding the importance of potent teamwork, developing skills in adaptive planning, and close collaboration with the customers and users of the resulting software. Delivering Reliably concentrates on essential technical practices for testing, refactoring, design, and collaborative development. It recognizes the often counterintuitive notion that building software with a high internal quality decreases cost and increases the speed of getting code delivered. Combined with a DevOps culture and continuous delivery, this allows a high frequency of features to be rapidly put into production, which itself enables teams to learn more about what is valuable by observing how the software is used in practice.

I was fortunate 20 years ago to find a home at Thoughtworks, where our teams use these kinds of skills to help our clients build new software products and displace old legacies. Like James, we’ve found that Extreme Programming provided a firm foundation for our work, and we’ve applied these techniques with great success in the last two decades. I’m thus really happy to see that James has applied another decade of his coaching experience to revise his book. The result is a sound bedrock for learning these skills that have helped us so much. Like anything worthwhile, it will take time, and there will be frustration along the way. But this guidebook can help you through that journey—moving away from barren ceremonies to the vigor that we felt when James and I first used these techniques all those years ago.