Books on AgileSoftwareDevelopment
A selection of key books with comments by Charlie Trainor in preparation for ScrumToronto's GrowingAgilePractices2004 OpenSpace meeting February 8, 2004.
Introductions to agile software development
- Agile Software Development Ecosystems by Jim Highsmith
- A great overview of the agile landscape, with summaries of several of the approaches and interviews with key people leading the agile revolution. A good place to start for people who are new to “agile” – it will help put everything else in a context.
- Balancing Agility and Discipline: A Guide for the Perplexed by Barry Boehm, Richard Turner
- The only book that tries very hard to understand both the agile and traditional viewpoints, and reconcile them. If you are from either camp and have trouble understanding the perspective of the other, this might help.
- Lean Software Development: An Agile Toolkit by Mary and Tom Poppendieck
- Takes inspiration from the lean revolution in manufacturing, and adapts the principles and techniques to software development. Helps you understand why agile approaches should work, and also provides practical things to try that aren’t specific to any particular methodology.
- Agile Software Development by Alistair Cockburn
- An excellent discussion of many aspects of what makes a successful team and a successful project – with an emphasis on people aspects such as communication. Cockburn’s angle is to have as little formal process as you can get away with, given the size/complexity of project and its criticality.
Getting deeper into agile
- Agile Management for Software Engineering: Applying the Theory of Constraints for Business Results by David J. Anderson
- “An explicit attempt to apply TOC to software development” –Kent Beck
- Theory of Constraints is Eliyahu Goldratt’s theory of how to constantly increase efficiency and improve to the next level of achievement, originally applied to manufacturing. Looks at software as a business, not software development in isolation.
- Managing the Design Factory by Donald Reinertsen
- This book covers product development in general, not just software, but the lessons and techniques are still highly applicable to software-only projects. Covers some of the same ground as the Poppendieck’s book. Reinertsen is also author of “Developing Products in Half the Time”.
- Extreme Programming Explained: Embrace Change by Kent Beck
- Definitely a classic. Easy to read, and a good book to jolt software traditionalists into a radical new way of thinking.
- Planning Extreme Programming by Kent Beck, Martin Fowler
- There are many books in the Extreme Programming series. This one is an easy-to-digest explanation of what planning means to an XP’er.
- Agile Software Development with SCRUM by Ken Schwaber, Mike Beedle
- Until Ken’s new book (due out in February) this is the one and only book on Scrum. In addition to presenting the (very simple) concepts behind Scrum, Ken attempts to explain why it makes sense from a variety of perspectives – some of which can be useful additions to your arsenal of reasons for going agile.
- Adaptive Software Development: A Collaborative Approach to Managing Complex Systems by James (Jim) Highsmith
- A few years old now, this book explains Adaptive Software Management, which is more of a philosophy than a prescriptive approach. Jim talks a lot about the softer aspects of developing software, and at times gets rather theoretical (discussing self-organizing teams and emergent behaviour).
- A Practical Guide to Feature-Driven Development by Stephen R. Palmer, John M. Felsing
- FDD is another agile methodology – not as light as XP or Scrum, but that claims to work well on projects with large numbers of people. (Haven’t read this one myself…)
- DSDM: Business Focused Development by DSDM Consortium, Jennifer Stapleton
- DSDM is more popular in Europe. It developed as an attempt to add discipline and practices to RAD (Rapid Application Development) to achieve real agility. (Haven’t read this one either…)
- Agile and Iterative Development: A Manager's Guide by Craig Larman
- Clearly explains iterative development, mounts considerable evidence of its advantages over waterfall, and provides lots of practical advice on how to make it work.
- Test Driven Development: By Example by Kent Beck
- A simple, gentle introduction (for programmers) to the powerful practice of Test-Driven Development.
- Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, John M. Vlissides (the “Gang of Four”)
- Design patterns are not unique to agile, but good design is required for agility and this book has had a huge influence on modern ideas of design.
- Refactoring: Improving the Design of Existing Code by Martin Fowler
- The classic… a guide for programmers on how to make continuous, small, controlled improvements to your code base. Many people (including Fowler) have documented more refactorings, but this book is still where one should start.
- Agile Modeling: Effective Practices for eXtreme Programming and the Unified Process by ScottAmbler
- Scott’s message is to do lots of design and modelling – just do it in ways that encourage collaboration and make it easy to update the model as you progress.
- Agile Database Techniques: Effective Strategies for the Agile Software Developer by ScottAmbler
- This book describes the fundamental techniques, including database refactoring, that developers need to take an agile approach to data-oriented development issues.
- Software Configuration Management Patterns: Effective Teamwork, Practical Integration by Steve Berczuk, Brad Appleton
- Configuration management is by no means exclusive to agile, but it is one of the practices that enable agility. This book is a good practical guide for people who are not yet experts.
- Lessons Learned in Software Testing by Cem Kaner, James Bach, Bret Pettichord
- There isn’t a single obvious book to recommend on the subject of testing from an agile perspective, but this one has useful advice, particularly for testers who are trying to move into the agile mindset. “If you're thinking about your testing, and you're not sure what applies to you, this book will help clarify your thinking. This is not a book about how to test per se, but a well-written and useful book about how to think about testing for your organization.” – Johanna Rothman
- Peopleware: Productive Projects and Teams by Tom DeMarco? and Timothy R. Lister
- The second edition (1999) updated this classic on the people side of how programmers and teams function.
- Managing Transitions: Making the Most of Change by William Bridges
- Updated and expanded edition of the classic guide to dealing with the human side of organisational change. Recommended by Tom DeMarco? in Slack (haven’t read it myself).
- The Fifth Discipline by Peter M. Senge
- Another classic that I haven’t read yet. The title refers to “systems thinking”, the fifth of five disciplines of a learning organization. As an Amazon reviewer says: “It's to business what A Pattern Language is to architecture. Peter Senge gets to the core of what people working in groups can achieve, and what stops them from getting there.” See also the Fifth Discipline Fieldbook.
- Facilitator's guide to participatory decision-making by Sam Kaner
- Decision-making is a key aspect of any co-operative endeavour. This book covers how to efficiently and effectively make decisions as a group.
- The Five Dysfunctions of a Team: A Leadership Fable by Patrick Lencioni
- “Patrick Lencioni has written the most practical and helpful guide I've ever read on the subject of team building. Through the power of a story you will learn how to take your team through the stages of trust building, instigating healthy conflict, producing commitment, establishing accountability, and achieving common objectives.” – an Amazon reviewer