Do I need a software development life cycle? What are the stages, phases, or steps of the SDLC? What is the difference between SDLC and Waterfall? What is the difference between SDLC and Agile?
I’ve seen questions and answers about the software development lifecycle that are rooted in misconceptions and misunderstandings. Too often, software development happens within frameworks that come with roles, responsibilities, and activities. The frameworks get in the way of common abstractions and commonalities, and misconceptions about the software development life cycle make it challenging to have discussions about how organizations design, build, test, and deploy software systems.
Here, I try to dispel a few of the common misconceptions that I’ve seen.
Misconception: There is only one SDLC.
A software development life cycle is the set of activities that start with the identification of a need and ends with the discontinued use of a software system.
The industry standard for life cycle activities is ISO/IEC/IEEE 12207, which defines 30 life cycle activities, each with a purpose, outcomes, and representative tasks. The ISO/IEC 29110 standard defines a lighter weight set of activities that are suitable for small organizations. Other groups of activities are even lighter, with between 5 and 9 key activities.
Regardless of which set of activities used, they can be structured differently. In Rapid Development: Taming Wild Software Schedules, Steve McConnell presents 10 life cycle models to organize the life cycle activities, and there are other life cycle models at different levels of granularity.
Each team or organization may have its own SDLC. Some organizations may have various life cycles in use at a time, sometimes with an SDLC framework to supply consistency across the organization. An organization may even apply different SDLCs to different subsystems or components.
Misconception: A SDLC is not necessary to build software systems.
Analysis leads to an understanding of the problem. Someone writes code. Release and deployment allow others to use the software. Testing ensures that the system solves the problems at hand. As more people become involved, coordination of work becomes necessary. Each of these is an example of a life cycle activity.
Each of these is an example of a life cycle activity. Each activity has inputs and outputs, and there are often feedback loops. How these activities are ordered and connected is the software development life cycle.
Even without a formally documented SDLC, an observer can watch the team carry out the life cycle activities and see the relationships between the activities.
Misconception: An SDLC must have distinct stages or phases.
There are two related misconceptions about SDLCs and stages or phases.
Sometimes, this misconception is phrased as a comparison between “the SDLC” and Agile methods. “SDLC” doesn’t imply a specific life cycle model. Waterfall is one software development life cycle model. Other models are semi-sequential, with parallel tracks of execution for some activities that split and merge. Some models are highly iterative in nature. A development organization’s processes can be ad-hoc and not structured in any discernable way. An SDLC can be based on any model for how the activities are structured.
In other cases, the misconception centers around the existence of phase-gates. Even in an iterative or incremental model, stages or phase-gates are not a requirement of a software development life cycle. Although some teams or organizations may find it useful to have defined phases for projects or products to move through, this isn’t a requirement of an SDLC.
Misconception: An SDLC is rigid or inflexible.
A team or organization should continuously improve the methods used to build software.
ISO 9001, CMMI, and the Manifesto for Agile Software Development, among others, all include the idea of continuous improvement. Improvement may be small adjustments to one or two life cycle activities or wholesale changes to the life cycle model. Organizations that have moved from plan-driven, sequential models to the highly iterative and incremental approaches favored in Agile Software Development have seen some of the most drastic life cycle changes.
The SDLC is a representation of software development at a given moment in time. The life cycle may evolve over the life of the software product as the developing organization learns.