About nine months ago we launched the patterns & practices Agile Showcase. Since then we’ve been slowly adding content. Yesterday we launched a new layout with additional content. A recommended books list, video browser and links to some useful tools.
I was also asked to add an introduction. Which turned out to be “Agile in 500 words”. It’s the first thing on the showcase page but I’ve reproduced it here. I wrote it largely to try and help readers get to the heart of what agile is really about. You can think of it as a polite version of my “Agile is NOT a Religion” rant.
Agile in 500 words…
So what’s this agile thing all about? Many people associate agile software development with a specific set of project management and software development practices—like daily standup meetings, prioritized work items, pair programming and continuous integration. While most teams can adopt some or all of these practices and see improvements in their ability to deliver customer value, it’s worth taking a step back and thinking about what agile really means.
At first glance agile may seem like an undisciplined or even anarchic approach to building software. In fact, to be successful, agile requires more discipline on the part of the development team and customer. In return it offers a mechanism for developing software in a modern business environment which must address rapidly changing needs.
The Manifesto for Agile Software Development focuses on a set of relative value statements:
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.
– Manifesto for Agile Software Development
The authors of the Manifesto went on to elaborate their values with twelve principles. Different approaches to agile—like Scrum, Extreme Programming and Lean Software Development—describe how to implement these principles as a set of concrete practices which focus on delivering working software based on highest customer value.
Agile software development recognizes that software development occurs in a volatile environment. They place a heavy emphasis on inspecting and adapting both the software being developed and the development process. Agile teams are cross functional, highly collaborative, and self organizing. Teams work iteratively to deliver small pieces of working software which can be evaluated by the customer and modified as requirements change.
They also frequently reflect on their own way of working and alter it to improve their ability to deliver software. They will tailor their practices to meet the unique requirements and constraints of their business. For example, an agile team and its customer representative usually work in a single room for the duration of the project. This maximizes the team’s ability to communicate and reduces the overhead of lengthy written specifications and management tools needed when a team is distributed. Working in the same room may not always be possible and the team’s practices may need modification to cope with a distributed agile development approach
The agility and adaptability of the process to fit the work, business, and team members is the key to being agile. A team simply cannot be agile without this approach, even if they faithfully adhere to a published agile process.