If I tell you, “Measure twice, cut once”, what will you understand?
You will most likely note the implication behind the statement, that once you cut (referring to any decision taken), that’s it, there is no undoing it. Similarly, once you understand the project requirements, design the system, and then start implementation, if you discover that the methodology is wrong, stepping back and redoing it will cost a whole lot, and also may be impossible.
In other words, the Waterfall approach to project management is a sequential development process. It was first proposed by Winston W. Royce, way back in 1970. The flow made logical sense, and there were no alternatives available, so it quickly found favors from managers.
It refers to a flow through different stages without an easy way to go back to earlier stages and redo things gone wrong. Different phases of a project can typically be requirements analysis, design, implementation, testing, deployment, and maintenance. The work at a particular phase is completed before moving on to the next phase.
Here’s an overview of the different phases of a project:
Requirements Phase
In this phase, you talk to the business users and end users to understand all of the system requirements, then document and analyze them. The team also understands all the system requirements such as scalability, reliability etc. The outcome of this phase is Requirements Understanding Document (RUD).
Design Phase
Remember that once you are out of a phase, the output is pretty much unchangeable. You don’t keep going back and forth, in this approach. The team takes all the requirements and creates system design. They define the components, interfaces, data layers, networking infrastructure, user interface etc.
The design phase is typically divided into:
- High Level Design (HLD) phase which deals with the overall system design and architecture.
- Low Level Design (LLD) phase which deals with the module-level details, sometimes including the pseudocode (for software projects).
The outcome of this phase includes HLD and LLD artifacts.
Implementation Phase
Using the HLD and LLD, the implementation team can now jump into the actual work of building the product. The design specifications are turned into working code. The modules are integrated as per the interface design contracts, and unit testing is completed by the development team itself.
Verification Phase
Also known as the Testing phase, in this phase the Quality Assurance team takes the code from the development team and tests the functionality as per the requirements gathered. The integration testing may bring out bugs, faults, and errors to be fixed by the development team. The lesser the defects, quicker will be the delivery timeline and lesser will be the cost.
Deployment Phase
In this phase, the developed code is deployed into a live environment and tested for performance (non-functional requirements). At times a small subset of the end users is given access to the system to gauge its performance. Finally, the tested product is released in the market.
Maintenance Phase
In this phase, the team provides support to the product. Any issues, defects, and even feature enhancements are undertaken. This is either done by the original development team, a new support team, or a mix of these members. In some cases, the support or maintenance duration is much longer than the overall development time. In other cases, the customer’s team is trained to maintain the product by themselves.
If I tell you, “Measure twice, cut once”, what will you understand?
You will most likely note the implication behind the statement, that once you cut (referring to any decision taken), that’s it, there is no undoing it. Similarly, once you understand the project requirements, design the system, and then start implementation, if you discover that the methodology is wrong, stepping back and redoing it will cost a whole lot, and also may be impossible.
In other words, the Waterfall approach to project management is a sequential development process. It was first proposed by Winston W. Royce, way back in 1970. The flow made logical sense, and there were no alternatives available, so it quickly found favors from managers.
It refers to a flow through different stages without an easy way to go back to earlier stages and redo things gone wrong. Different phases of a project can typically be requirements analysis, design, implementation, testing, deployment, and maintenance. The work at a particular phase is completed before moving on to the next phase.
Here’s an overview of the different phases of a project:
Requirements Phase
In this phase, you talk to the business users and end users to understand all of the system requirements, then document and analyze them. The team also understands all the system requirements such as scalability, reliability etc. The outcome of this phase is Requirements Understanding Document (RUD).
Design Phase
Remember that once you are out of a phase, the output is pretty much unchangeable. You don’t keep going back and forth, in this approach. The team takes all the requirements and creates system design. They define the components, interfaces, data layers, networking infrastructure, user interface etc.
The design phase is typically divided into:
- High Level Design (HLD) phase which deals with the overall system design and architecture.
- Low Level Design (LLD) phase which deals with the module-level details, sometimes including the pseudocode (for software projects).
The outcome of this phase includes HLD and LLD artifacts.
Implementation Phase
Using the HLD and LLD, the implementation team can now jump into the actual work of building the product. The design specifications are turned into working code. The modules are integrated as per the interface design contracts, and unit testing is completed by the development team itself.
Verification Phase
Also known as the Testing phase, in this phase the Quality Assurance team takes the code from the development team and tests the functionality as per the requirements gathered. The integration testing may bring out bugs, faults, and errors to be fixed by the development team. The lesser the defects, quicker will be the delivery timeline and lesser will be the cost.
Deployment Phase
In this phase, the developed code is deployed into a live environment and tested for performance (non-functional requirements). At times a small subset of the end users is given access to the system to gauge its performance. Finally, the tested product is released in the market.
Maintenance Phase
In this phase, the team provides support to the product. Any issues, defects, and even feature enhancements are undertaken. This is either done by the original development team, a new support team, or a mix of these members. In some cases, the support or maintenance duration is much longer than the overall development time. In other cases, the customer’s team is trained to maintain the product by themselves.