Agile development methodologies are a set of approaches to software development that share a common philosophy, but are sharply distinguished in the details of their implementations.
CIOs are under pressure to support fast-evolving digital business scenarios but are finding traditional project and development methods unsuitable. Consequently, they are turning to agile development methodologies to speed up projects. However, Gartner's director of research, Nathan Wilson, cautions that value will be delivered only if the CIO and the entire IT management team are dedicated to the culture change that is necessary for success. "Done badly, agile development will create a lot more problems than it solves," says Wilson.
Gartner has identified 10 guiding principles for agile development:
1. Agile is not one thing: Agile development methodologies are a set of approaches to software development that share a common philosophy, but are sharply distinguished in the details of their implementations. They therefore tend to be adapted to different sorts of problems. Sophisticated organizations with a lot of experience may well use more than one of these approaches, but an organization that is getting started should select one approach and master it before attempting other approaches.
2. Agile is not a "pick'n mix" methodology: Agile methods are highly systematic. Every component element of the methodology is crucial to the success of the methodology. A common mistake is for an organization to embrace some elements of an agile methodology, such as the sprint, but to ignore or play down other elements, such as managing "technical debt." Such organizations enjoy the kudos that comes from rapid development and release of new code, but they are storing up trouble by failing to address technical debt.
3. Embracing agile is a joint business-IT: activity The full benefits of agile cannot be achieved without engaging with business leaders, management and the user community. If the rest of the business does not have an immediate appetite for working in a new way, careful planning and communication will be needed to bring different communities of managers and users on board.
4. With agile, it is important to walk before you run: Experienced agile practitioners can tackle large-scale developments — the equivalent of climbing Mount Everest. But it takes many years to develop the necessary skills to be able to take on such large-scale software projects. Any organization that is starting out on the agile journey needs to start in the foothills to develop the confidence and competence to take on larger tasks.
5. Embracing agile is embracing continuous learning: Agile practitioners must be committed to continuous improvement in quality and cost-effectiveness, which means that every development is analyzed for lessons that can be used to improve policies and working practices. This analysis and learning are not the responsibility of a small number of senior practitioners; they are fundamental components of the workload of all agile practitioners. Furthermore, the learning is not just appropriate to the programmers who are directly involved in software development; it is also essential for all the related skills, such as project management, architecture, quality assurance and IT budget management.
6. Agile is about teams, and teams of teams: The basic organizational unit of delivery in agile development is a small team, typically expressed as "seven, plus or minus two" people — both developers and quality assurance. From an HR perspective, managing agile teams involves walking a fine line between keeping productive teams together, and moving individuals between teams to encourage cross-fertilization of ideas. If people are moved too frequently, the teams fail to develop into highly productive units; if people are not moved between teams enough, then each team starts to become isolated and diverges from the other teams. It is important to note that physical location of teams is much more important with agile methods than with conventional approaches to development.
7. Documenting, managing and eliminating technical debt is a core to all agile methods: Technical debt is the difference between the state of a piece of software today and the state that it needs to be in to meet appropriate and necessary requirements for quality attributes such as reliability, performance efficiency, portability, usability, maintainability and security. All development creates technical debt. The difference with agile methods is that technical debt is recognized and added to the backlog, not swept under the carpet. Any organization that seeks to embrace agile methods must put in place the necessary elements of the chosen method dedicated to ruthless refactoring and the elimination of technical debt.
8. Working with third-party development service providers needs special care and attention: Many user IT organizations have a long history of outsourcing application development to specialist service providers. While there is a role for service providers in agile development, it is a very different commercial model, and a very different engagement model. Since colocation with business users is axiomatic to agile methods, the opportunities for sending large amounts of work outside are somewhat limited. Some form of supplemental staffing is likely to be a more useful model.
9. Agile goes well beyond the software development teams: An integral component of the agile methodologies is the concept of "continuous delivery." Agile methodologies are predicated on continuous engagement with business managers and users, and lead to the delivery of a continuous stream of new and modified software into the operational environment. This demands significant changes in working practices for both business governance and relationship management, and the infrastructure and operations teams.
10: Other software development methodologies still have a place: In most commercial and public sector organizations, the application portfolio will present many different classes of development problems, some of which will be well-suited to agile, while some may be better-suited to incremental, iterative development, and some to a modified waterfall model. Agile is not "better"; it is simply better-adapted to some problems, but not so well-adapted to others.