Development methodology is a framework that is used to structure, plan, and control the development of software systems. Agile and CMMI Waterfall methodologies are very alike and have enough differences to be named differently. Let’s consider the methodologies in detail.
The first formal description of the “Waterfall Model” was given in an article by Winston W. Royce in 1970. It is a good joke that Royce presented waterfall model, but used the iterative one. Waterfall is an old and time-proved development model. There is a huge number of systems that were developed using CMMI Waterfall methodology. Many IT companies continue to develop software using waterfall model.
The life cycle of software from idea till realization looks like the following:
- Initiation phase: A sponsor identifies the need for new software that fits his own requirements. A concept is created.
- System Concept Development phase: Analysts investigate the problem and define the scope of the future project. Feasibility analysis is made, relative risks are calculated.
- Planning phase: Project plan and other plan documents are created. The papers give a rough list of resources that are required to achieve the solution.
- Requirement Specification phase: Requirement Specification is created on the base of user needs analysis.
- Design phase: System design documents are worked out on the base of the detailed requirements. The priority is given to deliver the required functionality.
- Development phase: System is developed according to its design. Features, environment, testing procedures are coded and prepared for the next phase.
- Testing and Integration phase: The testing demonstrates that the system features fit all the requirements described in respective documents. Test report is often written by a third party.
- Implementation phase: Problems discovered during the previous phase must be resolved, the system is transferred to the production environment.
- Operation and Maintenance phase: The system is monitored to be sure it works as described in the requirements and for possible improvements during In-Process Reviews.
- Disposition phase: System is archived to provide an opportunity to start development again if it's required. The team can move to a new project.
Often the uniform “Waterfall model” is shown in a short view:
- Analysis - combines Initiation/Concept/Planning phases.
- Requirement Specification
- *Development *
- Testing and Integration
- Implementation/Deployment - integrates Implementation, Maintenance, Disposition phases.
The diagram above shows potential difficulties that may occur during the development: waterfall model presupposes execution of all steps if an error is discovered or customer decided to change a part of the functionality.
Agile methodology combines software development methods that are
based on iterative and incremental models. In February 2001, 17
developers met to discuss lightweight development methods, there the
Manifesto for Agile Software Development was created. Agile methods
are guided by common principles to overcome the identified problems of
The workflow of the Agile development process is as follow:
- The whole project is divided into parts using features' prioritization.
- The customer and development team choose the set of features that must be implemented during the sprint.
- The features are developed.
- The features are tested and integrated.
- The shippable features are released to the customer.
- The customer sends feedback and the team reviews it.
- If the customer accepts the product, it can be released to the market.
- If the customer wants any modernization, the next iteration starts (from step 2: prioritization of the features).
Developers team and customer representatives stay in touch during all development process. Such a cooperation allows to find problems in early development.
It is pretty clear from the diagram above that it is very difficult to calculate the time for development using the Agile methods. Agile methodology gives customer great opportunity to change the product at any time, but requires more efforts of the developers and consultant teams.
Agile and Waterfall Differences
The differences between Agile and Waterfall methodologies are:
Idea and Design
- Agile: The most critical parts are designed first. Agile provides for adding new parts to existing ones. Customer can change the requirements anytime, that is why the parts are designed as separate elements, and the structure of one element does not influence much on the others.
- Waterfall: Project is planned from top to bottom at once. Developers have to take into account every detail of the working process. Inefficient information support may cause problems in the future.
- Agile: The customer or the representatives of the customer work closely with the development team during all development process. The problems can be avoided, and documents' inaccuracy can be corrected in a short time.
- Waterfall: All the responsibility lies with the development team. The customer is hardly involved into the development.
- Agile: Development process is iterative. The project is executed in short (2-4 week) iterations. Every new version of the product is updated with ranked features. There is a little planning.
- Waterfall: Development process is phased. The phase is much bigger then an iteration. Every phase ends with a detailed description of requirements for the next phase.
- Agile: Every iteration has its own testing phase. That allows to implement regression testing every time new logics or functions are released.
- Waterfall: Testing phase is executed only after development phase, because separate parts are not fully functional to be tested. Requirements verification can be only performed on the completed software.
- Agile: The most important features are the first to be developed: when an iteration ends, potentially shippable features are delivered to the customer. New features are usable right after shippment.
- Waterfall: All features are delivered at once, after the long implementation phase. The customer cannot make amendments into the project, because it requires to re-run all passed development phases.
- Agile: Priority is given to the working software. Project documentation is not formalized, it is simple and understandable.
- Waterfall: Project is well documented with all sorts of documents (including user manual, etc.). The customer can use this documentation to train the staff, upgrade the software with another team.
- Agile: Small projects can be implemented very fast. It is hard to estimate the development time of large projects.
- Waterfall: Project is well planned, and the shippable date can be estimated for all sorts of projects.
What Is Your Methodology?
There are some facts that may help you to choose the development methodology.
Use Agile if...
- you need to ship the software in a very short term;
- the details of the project are not fully defined or can change greatly during the development;
- you want to use the basic functionality of the software before project will be finished;
- you want to control or take part in the development process face-to-face;
- you can ensure continual visibility of the ones who will use the software with the developers team;
- you can save the high rate development with your resources.
Use Waterfall if...
- there are no tight time frames during development;
- you can afford to receive the completed software after a long time;
- project is well-defined and can be designed in details;
- you need full documentation on the start of the project;
- you need a safe software with a high reliability level;
- you want to use the finished software;
- you do not have resources for face-to-face everyday work.