The Software Development Life Cycle
1.1 The Software Development Life Cycle
🧭 Overview
🧠 One-sentence thesis
The SDLC defines five stages that all software projects must traverse—requirements, design, implementation, testing, and maintenance—but different process models like Agile and Waterfall move through these stages in fundamentally different patterns, with Agile's iterative approach showing significantly lower failure rates than Waterfall's sequential approach.
📌 Key points (3–5)
- The five SDLC stages: requirements, design, implementation, testing, and maintenance form the universal progression of software projects.
- Process models determine movement: Agile cycles through stages in short, frequent iterations with incremental releases; Waterfall moves linearly and sequentially with heavy documentation.
- Common confusion: Waterfall's sequential nature means you can't easily return to previous stages (like swimming up a waterfall), while Agile allows overlapping stages and planning for the next cycle during the current one.
- Failure rates differ dramatically: Agile projects fail 9% of the time versus 29% for Waterfall; the gap widens with project size (23% vs 42% for large projects).
- Why it matters: understanding process models helps you identify what your team is doing, choose appropriate methods for new projects, and rescue troubled projects.
🔄 The Five SDLC Stages
📋 Requirements
Figuring out and writing down what the software must do, how well, and under what limitations or constraints.
- This is the "what" stage—defining the software's purpose and boundaries.
- Not about how to build it, but what needs to be built.
- Includes performance criteria ("how well") and constraints (limitations).
🎨 Design
Determining how the software's code will be structured and how users will interact with the software.
- Covers two aspects: internal code structure and external user interaction.
- Translates requirements into architectural decisions.
- Bridges the gap between "what" (requirements) and "doing" (implementation).
💻 Implementation
Using the requirements and design to code the software.
- The actual coding stage.
- Depends on the previous two stages for guidance.
✅ Testing
Checking that the code was written without fault (verification) and that the software is what the users or client wants (validation).
- Two distinct purposes:
- Verification: did we build it correctly? (no faults)
- Validation: did we build the right thing? (matches user/client needs)
- Don't confuse: verification checks technical correctness; validation checks alignment with actual needs.
🔧 Maintenance
Improving software's existing functionality and code.
- Happens after initial release.
- Focuses on enhancement and refinement of what already exists.
🌊 Waterfall vs Agile Movement Patterns
🌊 Waterfall's sequential flow
- Movement is "fairly linear and sequential."
- Each stage depends on the previous stage being completed.
- Produces "lots of documentation."
- The name comes from the one-way flow: you can't swim up a waterfall, meaning returning to previous stages is difficult or not allowed.
Historical note: The excerpt mentions that Royce's 1970 article—often associated with Waterfall—actually depicted its major flaws and suggested modifications like preliminary program design and allowing returns to requirements as needed.
When it might make sense: The excerpt poses the question "Waterfall might not make sense for many software projects, but how about for building a bridge?"—suggesting physical construction projects may suit sequential approaches better.
🔄 Agile's iterative cycles
- Development cycles are "relatively short and numerous."
- Releases are "frequent and incremental."
- Each cycle adds "a little more working functionality."
- Planning (requirements and design) for the next cycle starts during the previous cycle—stages overlap.
| Aspect | Waterfall | Agile |
|---|---|---|
| Cycle length | Long, single pass | Short, numerous cycles |
| Stage progression | Sequential, one-way | Overlapping, iterative |
| Releases | Infrequent, complete | Frequent, incremental |
| Documentation | Heavy | (Not specified, but implied lighter) |
| Return to earlier stages | Difficult/not allowed | Built into the process |
🔀 How stages overlap in Agile
The excerpt provides a visual description: "The vertical lines represent development cycle boundaries. Planning (R,D) for the next development cycle starts during the previous cycle."
- Requirements (R) and Design (D) for cycle N+1 begin while cycle N is still in Implementation (I), Testing (T), or Maintenance (M).
- This overlap enables continuous progress and adaptation.
📊 Why Process Models Matter
📉 Failure rate data
The 2015 CHAOS report analyzed over 25,000 software projects:
| Project type | Agile failure rate | Waterfall failure rate |
|---|---|---|
| Overall | 9% | 29% |
| Large projects | 23% | 42% |
| Small projects | 4% | 11% |
Key insight: Agile shows lower failure rates across all project sizes, with the advantage most pronounced in large projects (19 percentage point difference).
Pattern: Project failure likelihood "increasing drastically with project size" for both models, but Waterfall suffers more.
🎯 Three practical reasons to understand process models
🔍 Detect and understand team practices
- When you're new to a team, understanding different models helps you "ask good questions."
- You can "identify what you see the team doing."
- Helps you "look competent in front of your team and managers."
🆕 Choose methods for new projects
- You might need to "select a software process model or method for a new project."
- You might need to "choose or recommend how your team proceeds."
- Having knowledge of options enables informed decisions.
🚨 Rescue troubled projects
- 17% to 22% of software projects failed during fiscal years 2011 to 2015.
- "Sometimes, you can save a project if you have the right methods."
- Understanding alternatives gives you tools for course correction.
🔗 Agile Frameworks and Methods
🏉 Scrum
- Described as "an Agile framework."
- One specific way to implement Agile principles.
- The excerpt notes this chapter gives "the flavor of Agile and Scrum rather than being a comprehensive guide."
⚡ Extreme Programming (XP)
- Another way to "go about developing and managing software in an Agile way."
- Listed alongside Scrum as a notable Agile method.
📜 The Agile Manifesto
- Agile is "guided by the Agile Manifesto."
- The Manifesto begins: "We are uncovering better ways of developing software by doing it and helping others do it."
- Emphasizes "Individuals and interactions" (the excerpt cuts off mid-list).
Don't confuse: Agile is the overall philosophy/process model; Scrum and XP are specific frameworks/methods for implementing Agile principles.