In my understanding, a software development life cycle could be defined as a blueprint followed by a development team in order to perform the development of a software as efficiently as possible.
There is no optimal life cycle in absolute, but several models are popular, such as :
- Waterfall model
- V-shaped model
- Agile model
- Evolutionary model
- Magic-box model.
- Spiral model
- Iterative model
Each has its pros and cons and can be used in different contexts. For instance, in the Waterfall model, the steps occur one by one. It makes the project really easy to follow and understand. Nevertheless, it also makes the project less flexible. During a complex and long-term project, some steps can overlap, and each workstream doesn’t progress necessarily at the same pace. Hence, the waterfall model might appear to be too rigid in such context. An agile model, allowing to go back on previous steps (for instance if the client realizes during the development phase that a requirement is missing) would fit better. In counterpart, this flexibility makes the project less readable, as the budget and the architecture can change at anytime. It can also results tension between the client and the developer.
These models vary above all by their manner of disposing the different steps of a development project. Nevertheless, the essence of those steps remain pretty much the same.
Any project always start with an analysis phase. It consists in defining the requirements of the project, the goals it aims to reach. At the end of this step, every process participants should have a clear understanding of the requirements and their implementation.
After having defined the requirements, the developers design the architecture of the project. It is a technical phase, involving both developers and other stakeholders and tackling questions as varied as budget, time frames, team load,…
After the designing phase, the project is actually developed.
This phase consists in testing that the development meets the requirements defined during the analysis phase. Modifications needs to be done for the requirements that are not reached.
Difference between Agile and Waterfall cycle :
- Agile is similar to incremental
- Waterfall is rigid. You have to complete the whole design before starting to code. The problem is that, as a matter of facts, unexpected situation occurs very often.
The test is independent from the code. The code permits to transform an input into an output. The test checks the output is correct. You don’t need to know what’s inside the code to define a test.
The deployment phase is when the project becomes effective. The end-users, those who actually are going to use the solution, start to handle it. The tech support team remains involved and provide assistance to the users.
These steps generally remain the same in any project. The model chosen change the way they interact, but doesn’t impact significantly their content.
As a conclusion, the Software Development life cycle is at least as important as the development itself. Some projects can involve many stakeholders, and without a precise plan it is merely impossible to work together and provide a satisfactory situation in such context. I had the opportunities to experience it during my first internship, when I was involved in the implementation of SAP S4Hana in a company counting more than 800 employees. Despite all the technical issues, the main issues we met were related to the management of the project and how making more than a 1000 stakeholders work together.