The Traditional Waterfall Approach
The Waterfall approach to systems analysis and design wass the first established modern approach to building a system. This method was originally defined by Winston W. Royce in 1970, ("The Waterfall Development Methodology", 2006). It quickly gained support from managers because everything flows logically from the beginning of a project through the end, (Jonasson, 2008). Sources differ when it comes to the specific steps in the Waterfall process (Jonasson, 2008), and I will detail some of these differences in the next paragraph. However, the basic underlying logic and steps present themselves in each interpretation.
Figure 1: Waterfall method
("The Waterfall Development Methodology", 2006)
The original Waterfall method, as developed by Royce, is featured in Figure 1. The steps include Requirements Determination, Design, Implementation, Verification, and Maintenance. Other models change the Requirements phase into the Idea phase (Jonasson, 2008), or break the Requirements phase out into Planning and Analysis (Hoffer, George, Valacich, 2008). Furthermore, some models further break the Design phase out into Logical and Physical Design subphases (Hoffer, et al, 2008). As previously mentioned, however, the basic underlying principles remain the same.
The Waterfall method makes the assumption that all requirements can be gathered up front during the Requirements phase (Kee, 2006). Communication with the user is front-loaded into this phase, as the Project Manager does his or her best to get a detailed understanding of the user's requirements. Once this stage is complete, the process runs "downhill" (Hoffer, et al, 2008).
The Design phase is best described by breaking it up into Logical Design and Physical Design subphases. During the Logical Design phase, the system's analysts makes use of the information collected in the Requirements phase to design the system independently of any hardware or software system (Hoffer, et al, 2008). Once the higher-level Logical Design is complete, the systems analyst then begins transforming it into a Physical Design dependent on the specifications of specific hardware and software technologies ("Software Development Lifecycle", n.d.)
The Implementation phase is when all of the actual code is written ("SDLC Phases", n.d.). This phase belongs to the programmers in the Waterfall method, as they take the project requirements and specifications, and code the applications.
The Verification phase was originally called for by Royce to ensure that the project is meeting customer expectations. However, under real-world analysis and design, this stage is often ignored. The project is rolled out to the customer, and the Maintenance phase begins.
During the Maintenance phase, the customer is using the developed application. As problems are found due to improper requirements determination or other mistakes in the design process, or due to changes in the users' requirements, changes are made to the system during this phase. ("SDLC Phases", n.d.).
The Waterfall method does have certain advantages, including:
- Design errors are captured before any software is written saving time during the implementation phase.
- Excellent technical documentation is part of the deliverables and it is easier for new programmers to get up to speed during the maintenance phase.
- The approach is very structured and it is easier to measure progress by reference to clearly defined milestones.
- The total cost of the project can be accurately estimated after the requirements have been defined (via the functional and user interface specifications).
- Testing is easier as it can be done by reference to the scenarios defined in the functional specification ("The Waterfall Development Methodology", 2006).
Unfortunately, the Waterfall method carries with it quite a few disadvantages, such as:
- Clients will often find it difficult to state their requirements at the abstract level of a functional specification and will only fully appreciate what is needed when the application is delivered. It then becomes very difficult (and expensive) to re-engineer the application.
- The model does not cater for the possibility of requirements changing during the development cycle.
- A project can often take substantially longer to deliver than when developed with an iterative methodology such as the agile development method. ("The Waterfall Development Methodology", 2006).
Due to these and similar problems, systems analysts began looking for alternative methods of designing systems. In the following sections, I will go over select methods that have been developed. I will concentrate on methodologies that have been classified as Agile. In this paper, I will concentrate on Extreme Programming, Scrum, and Test-Driven Development.