Principles of Agile
Agile is an umbrella term for a family of methodologies such as Extreme Programming (XP), Scrum, Crystal, Feature-Driven Development (FDD), DSDM, and others. Agile offers several paradigm-shifting concepts, including a project management approach based on frequent inspection and adaptation, teamwork, self-organization and accountability; a business approach that aligns development more closely with customer needs; and a set of software engineering practices for rapid delivery of high-quality code.
Agile focuses on providing a continuous flow of value to the business, thus minimizing project risks and increasing ROI
Agile methods aim to address systemic challenges that have long plagued software development projects, such as late delivery, scope creep, endemic cost overruns, cumbersome and expensive change management process (especially late into the project), insufficient quality and low customer satisfaction. Successful implementations of Agile processes also challenge the immutability of the ‘iron triangle’ – cost, schedule, and scope – without sacrificing software quality.
All Agile methods are based on a set of fundamental principles that set them apart from the traditional (waterfall) approach to software development:
- Software is delivered incrementally and iteratively
- This incremental development is organized and prioritized around business value
- Only tested, working software is considered the real measure of progress
- Changes in requirements are welcomed, even late in development
- Delivery iterations are kept short (weeks rather than months)
- Customers/business users and developers interact and cooperate closely (if possible, daily)
- Simplicity is emphasized in design and implementation
- Projects are built around motivated, competent, self-organizing cross-functional teams
- Continuous attention is paid to technical excellence and good design
- Teams reflect regularly and adapt the process to new circumstances
Unlike waterfall, where all of the software is only delivered at the end of the project, Agile’s incremental, iterative approach focuses on providing a continuous flow of value to the customer, thus minimizing project risks and increasing return on investment. Agile is designed to manage the inherent uncertainty of software development and to keep the cost of change as low as possible.