“Agile software development refers to a group of software development methodologies based on iterative development, where requirements and solutions evolve through collaboration between self-organizing cross-functional teams. The term was coined in the year 2001 when the Agile Manifesto was formulated.
Agile methods generally promote a project management process that encourages frequent inspection and adaptation, a leadership philosophy that encourages teamwork, self-organization and accountability, a set of engineering best practices that allow for rapid delivery of high-quality software, and a business approach that aligns development with customer needs and company goals. Conceptual foundations of this framework are found in modern approaches to operations management and analysis, such as lean manufacturing, soft systems methodology, speech act theory (network of conversations approach), and Six Sigma.”
Agile software development processes are built on the foundation of iterative development. Agile processes use feedback rather than planning as their primary control mechanism. This software process model recognizes that software, like all complex systems, evolves over a period of time.
The main principles of the Agile Software Development process are:
- Capture and define requirements at a high level
- User involvement is essential
- The team must be allowed to make decisions
- Develop small, incremental releases and iterate
- Focus on frequent delivery of products
- Requirements evolve but the timescale is fixed
- Complete each feature before moving on to the next
- Testing is integrated throughout the project lifecycle - test early and often
- A collaborative & cooperative approach between all stakeholders is essential
The first step in the Agile Software Development Process is to identify some high-level requirements as well as the scope of the release. This 30,000 foot view allows developers to quickly begin coding in order to find out what works even quicker. While the requirements developed within a Waterfall Software Development Process are considered ‘law’, requirements within an Agile process are more or less ’suggestions’, and are open to more conversation by the team during other phases. Because requirements are not set in stone, the Agile method is more adaptable to changes in requirements as the project grows.
Architecture & Design
The goal of the architecture and design phase is to try to identify an architecture that has a good chance of working. The architecture is often defined using free-form diagrams which explore the technical infrastructure, and the major business entities and their relationships. The design is derived in a modeling session, in which issues are explored, until the team is satisfied that they understand what needs to be delivered.
The development phase uses an evolutionary method that is an iterative and incremental approach to software development. Instead of creating a comprehensive prerequisite such as a requirements specification, that you review and accept before creating a complete design model; the critical development piece evolves over time in an iterative manner. The system is delivered incrementally over time, in small modules that have immediate business value, rather than building and then delivering a system in a single “big bang” release. By focusing development on smaller modules, Agile projects are able to control costs despite the seeming lack of planning.
Test & Feedback
One of the key principles of the Agile Methodology is to conduct the testing of the software as it is being developed. The software development is test driven. The unit testing is achieved from the developer’s perspective and the acceptance testing is conducted from the customer’s perspective.
One thing to note about the Agile process is that it usually includes a more structured Sashimi Waterfall method inside of each iteration. If you look at the diagram above, you should see what I mean.