Software development life cycles

Last week, a student sent me an email: “I am a first year student in Computer Science. I am confused about the software development life cycles. How many of them are there? How do I chose one over the other? Please advise.”

Answer: There are several software development life cycles. The most popular and easiest to understand is the Waterfall life cycle. In my opinion, everything else is an improvement of this life cycle over time. As student, you must understand all phases of this life cycle. Once you know them well, you can learn about the other life cycles. Following is a short description:

The waterfall lifecycle is a sequential software development process where all development activities must follow a certain phases such as requirements, design, code, test and maintenance. You must complete a phase before move to the next, just like water flowing from top to bottom in a waterfall. For this lifecycle, customers must wait until all phases are completed, until the software is fully tested before they can use the product. The problem with this approach is if there are changes late in the lifecycle, it could be very difficult to fix as any rework would incur risks and possible schedule delay. The waterfall works well if the requirements are clear, well defined and with minimum change.

Since changes do happen in software projects, one approach to solve this problem is to develop several releases or iterations. Each iteration covers the entire waterfall lifecycle and any change happens late will be delayed to the next iteration. This gets the software product out quicker, gets user feedback faster and gives the project team the ability to react to issues and defects earlier. Even this incremental release approach is a good improvement to the traditional waterfall life cycle but there still are some difficulties in re-designing, reworking and fixing the software which add costs to the project.

To reduce costs and risks due to the number of changes to the projects, the next improvement to the waterfall life cycle is consider the entire development as several small incremental steps with continuous planning, requirements, analysis and prototyping to improve the requirements. In this approach, prototyping technique is applied to get user feedbacks before design, testing and evaluation. The software development is being built incrementally, each iteration is built on top of the previous one until all requirements are known. Since the cycle resembled a spiral, thus this was often referred to as the “spiral” method.

All above approaches (Waterfall, Iterative, and spiral) work well in large and medium size project. However for small project, these approaches still take time and may not meet what customer need to have something quick. That is why the Agile approach is created. This approach is still based on iterative and incremental development but requirements and solutions evolve through the collaboration between customers and developers called self organizing cross functional teams. Agile consists of several methods such as Scrum; Extreme Programming (XP); Crystal; Dynamic Systems Development Methodology (DSDM); Adaptive software development; Lean software development; and Feature-driven development. Among them, Scrum is probably the most popular in the software industry. Since I have written several articles about Agile in my blog already, you can review them.

Sources

  • Blogs of Prof. John Vu, Carnegie Mellon University