What is the software development life cycle (SDLC) and why is it important?
The software development life cycle, often shortened to the acronym SDLC, consists of standardised phases a software development team works through when developing a new product. The character and number of phases in a software development life cycle can vary depending on the software development methodology and framework a team is working to.
- Planning and Analysis
- Design
- Development
- Testing
- Deployment
- Maintenance
SDLC can also stand for ‘system development life cycle’ when used more holistically to ensure security controls and requirements are designed rather than retrofitted into the software development process. When the ‘S’ of SDLC stands for ‘system’, it covers people, processes, software components, infrastructure, and change management.
Why is the software development life cycle important?
Following an SDLC achieves those gains for the software development process by:
Some, for example crystal, even leave flexibility for the team working on a software development project to set their own SDLC phases as they decide is most appropriate to the particular piece of software being developed.
- Planning
- Designing
- Coding
- Testing
- Listening
- Develop an overall model
- Build a features list
- Plan by feature
- Design by feature
- Build by feature
- Speculation
- Collaboration
- Learning
- Feasibility and business study
- Functional model / prototype iteration
- Design and build iteration
- Implementation
When one framework defines seven or eight phases and another three, it doesn’t mean there are more or less overall steps involved. For example, because Adaptive Software Development has three defined life cycle phases and none is titled ‘testing’ or ‘QA’, it doesn’t mean software developed to the framework is not tested. Testing is simply seen as a step within the broad ‘collaboration’ phase, rather than its own phase.
Despite the fact there is no single, definitive list of phases within a software development life cycle, there is still value in outlining those most commonly part of different methodologies and frameworks. Even if a particular software development methodology or approach doesn’t include a life cycle phase of the same, or similar, name, these 7 will be built into those that are named.
Planning and analysis processes are often conflated into a single software development life cycle phase. But they are just as often split out into two separate phases.
What problem will the software solve? What is solving that problem potentially worth?
How big a potential user base does the software have?
- Does other software exist that solves the same problem?
- How will this software improve on that?
- How much might it cost to develop software to effectively solve the problem?
- Is solving the problem valuable enough to offer an acceptable return on investment on that cost?
- Do we have the resources to support that cost?
The project’s scope, or initial estimate of scope in an Agile approach, would be discussed here based on initial feature requirements or assumptions. As would planning of the resources needed to realise the project and then putting them in place, including the software development team.
The software development team roles most typically involved in the planning and analysis phase of the software development life cycle (this varies from team to team and is influenced by the chosen methodology/framework) are:
This is where software architects and developers make decisions on the high-level design of the software system. A tech stack will be chosen, like what languages, frameworks and libraries will be used on the front end and back end and other details like the choice of database technology and other third party services.
Throughout the design phase, stakeholders should be consulted on tech stack choices, risks, resources required in the context of design decisions taken, time, budget, regulatory and other project constraints.
Team roles central to the design phase of the SDLC include:
In a Waterfall approach, what is seen as the finished product is documented in technical detail from beginning to end during the design phase and then build from beginning to end during the development phase.
- Design
- Front-end developers
- Back-end developers
- UI/UX designers
During the testing phase, the software developed in the previous phase is tested against requirements defined in the planning and analysis phase as well as for performance and bugs. The goal of the phase is to ensure the software product has been developed as intended, both in terms of user experience and the resources needed for it to run smoothly and meet availability and security requirements.
In a DevOps approach to the software development life cycle, the development and testing phases are tightly integrated with testing a continuous process during development and could even be described as a single, unified phase.
The team roles most involved in the testing phase are:
A crucial step in the deployment phase is also making sure, which means testing, that the software works exactly the same way in the live environment as it does in the development and testing environments. In a DevOps CI/CD software development pipeline pre-deployment and live environments should be identical, minimising the risk of discrepancies between how the software runs. DevOps tightly integrates the development and deployment phases.
- DevOps engineer
- Database administrator
The maintenance phase involves making sure the software application continues to run as it is intended to in terms of functionalities, performance and availability. Users and ongoing testing may uncover bugs and other defects, or security issues, not found during the testing phase, which should be fixed. These may be minor or necessitate the launch of a new development phase.
- Users
- Testers
- Support managers
Unless a software development product is being built to the Waterfall methodology, the SDLC will be a looping, ongoing process and will restart after each iteration has been deployed, with work immediately beginning on the next iteration.
The software development life cycle can and is adapted by software development teams based on the philosophy, methodology and framework they adopt when building a given software product, or between organisations.
But every software development project has a life cycle and you should now have a good understanding of its role in project management and as a tool used to improve outcomes.