What is Agile?
Agile is a set of software development values, principles and practices based on incremental development, where requirements and solutions evolve through collaboration between self-organizing, cross-functional teams.
Agile was developed in 2001 by a group of software development writers who got together to find common ground in their fight to promote better ways of developing software. This group included representatives from Extreme Programming, SCRUM, DSDM, Adaptive Software Development, Crystal, Feature-Driven Development, Pragmatic Programming, and others sympathetic to the need for an alternative to documentation driven, heavyweight software development processes.
What emerged from this discussion was an agreement on a common set of values and principles that are the foundation of the new lightweight approaches to product development. This was the Manifesto for Agile Software Development which says:
“We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
That is, while there is value in the items on the right, we value the items on the left more.”
It’s important to note that Agile does not advocate abandoning the values on the right. These values do help you develop products it’s just that they have been overemphasized by most organizations.
“We follow these principles:
- Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
- We welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.
- We deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
- Business people and developers must work together daily throughout the project.
- We build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
- The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
- Working software is the primary measure of progress.
- Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
- Continuous attention to technical excellence and good design enhances agility.
- Simplicity–the art of maximizing the amount of work not done–is essential.
- The best architectures, requirements, and designs emerge from self-organizing teams.
- At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.”
Many people think Agile is just a set of useful processes and tools. This is not the case. Agile is a set of common values and principles that the processes and tools have in common.
The practices themselves are evolving over time and new Agile practices such as Kanban are emerging. These practices should not be implemented rigidly because they are only a means to an end. You can and should select the practices you need and tailor them for your situation. As long as you’re sticking to the core values and principles you are still being Agile.
Conceptually Scrum is a subset of Agile and Lean principles and practices which overlap. Both Agile and Lean are in turn a subset of Systems Thinking.
The founders of Scrum acknowledge that Scrum was inspired by Lean Product Development practiced by Japanese companies such as Fuji-Xerox, Canon, Honda and NEC in the 70’s and 80’s. In the past few years this has been fully developed in Lean Software Development. Lean in turn is about seeing the whole system and understanding its assumptions and feedback loops which is explored more fully in Systems Thinking.
To help you learn more about Agile I have listed what I think are the classic texts on the field by subject. Start reading and try it out for yourself.
Agile Reading List
Agile Software Development with Scrum (Series in Agile Software Development) by Ken Schwaber and Mike Beedle
Kanban: Successful Evolutionary Change for Your Technology Business by David J. Anderson and Donald G Reinertsen
Agile Project Management: Creating Innovative Products (2nd Edition) by Jim Highsmith
The Rational Unified Process Made Easy: A Practitioner’s Guide to the RUP: A Practitioner’s Guide to the RUP by Per Kroll, Philippe Kruchten and Grady Booch
DSDM: Dynamic Systems Development Method: The Method in Practice by Jennifer Stapleton and Peter Constable
Rapid Development: Taming Wild Software Schedules by Steve McConnell
Crystal Clear: A Human-Powered Methodology for Small Teams: A Human-Powered Methodology for Small Teams by Alistair Cockburn
A Practical Guide to Feature-Driven Development by Stephen R. Palmer and John M. Felsing
Lean-Agile Software Development: Achieving Enterprise Agility by Alan Shalloway, Guy Beaver and James R. Trott (Nov 1, 2009)
Lean Software Development: An Agile Toolkit by Mary Poppendieck and Tom Poppendieck
Agile Business Analysis
Reengineering Management: Mandate for New Leadership, The by James Champy
Agile Modeling: Effective Practices for eXtreme Programming and the Unified Process by Scott Ambler
Agile Software Requirements: Lean Requirements Practices for Teams, Programs, and the Enterprise (Agile Software… by Dean Leffingwell
Writing Effective Use Cases by Alistair Cockburn
User Stories Applied: For Agile Software Development by Mike Cohn
Designing with the Mind in Mind: Simple Guide to Understanding User Interface Design Rules by Jeff Johnson (Jun 3, 2010)
UML Distilled: A Brief Guide to the Standard Object Modeling Language (3rd Edition) by Martin Fowler
Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development (3rd… by Craig Larman (Oct 30, 2004)
The Object Primer: Agile Model-Driven Development with UML 2.0 by Scott W. Ambler
Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides
Patterns of Enterprise Application Architecture by Martin Fowler
Extreme Programming Explained: Embrace Change, 2nd Edition (The XP Series) by Kent Beck and Cynthia Andres
Refactoring to Patterns by Joshua Kerievsky
Refactoring: Improving the Design of Existing Code by Martin Fowler, Kent Beck, John Brant and William Opdyke
The Pragmatic Programmer: From Journeyman to Master by Andrew Hunt and David Thomas
Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin
Code Complete: A Practical Handbook of Software Construction, Second Edition by Steve McConnell
Agile Testing: A Practical Guide for Testers and Agile Teams by Lisa Crispin and Janet Gregory
Test Driven Development: By Example by Kent Beck
Fit for Developing Software: Framework for Integrated Tests by Rick Mugridge and Ward Cunningham
Automated Software Testing: Introduction, Management, and Performance: Introduction, Management, and Performance… by Elfriede Dustin, Jeff Rashka and John Paul
Continuous Integration: Improving Software Quality and Reducing Risk by Paul M. Duvall, Steve Matyas and Andrew Glover
Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation (Addison-Wesley… by Jez Humble and David Farley
Agile Retrospectives: Making Good Teams Great by Esther Derby, Diana Larsen and Ken Schwaber
Agile Estimating and Planning by Mike Cohn