Agility is the ability to create and adapt to change. Agile software development methods include: Scrum, eXtreme Programming, Crystal, Dynamic Systems Development Methodology (DSDM), Feature Driven Development and Adaptive Software Development. In general, agile methods can be used on any sort of project (software or non-software) to:
- Focus on customer value via constant business-driven prioritization of features and regular customer feedback;
- Manage uncertainty and risk through evolutionary (iterative and incremental) product development;
- Utilize intense collaboration and feedback via maximum face-to-face communication;
- Unleash team members’ creativity and productivity through light touch leadership and self-organization;
- Deliver high quality through plan-do-study-act continuous improvement cycles; and
- Facilitate learning and adaptation to change via practices like team retrospectives (mini lessons learned done while the project is in-flight).
Clear business results (working software, etc) are delivered regularly by chunking projects into equal-sized iterations (also called sprints) that typically last one to four weeks. Each iteration/sprint is like a miniature project of its own, and includes all the tasks necessary to release the mini-increment of new functionality: planning, requirements analysis, design, delivery, testing, and documentation. At the end of each iteration, the team reevaluates project priorities.
Agile methods emphasize face-to-face communication. Most agile teams are collocated in a shared space and include all the people necessary to deliver business results. At a minimum, this includes a core team of project manager (known as a ScrumMaster in Scrum), programmers and their product owners. Product owners define the product and manage its ROI. Project planning typically includes release planning and sprint planning – a la rolling wave planning. A product backlog (prioritized list of features for the entire product/project) is produced in the release planning meetings. The top priority items are taken and detailed into the sprint backlog in the sprint planning meetings. Each sprint/iteration results in a working increment of the product delivered to the product owner. This increment is potentially shippable and may be released into production by the product owner. Usually, product increments are released into production once they aggregate a small set of minimum marketable features. Daily scrum/standup meetings are used as a primary means of communication.