The Waterfall Model: Classic Sequential Approach
The Waterfall model is one of the oldest and most traditional software development methodologies. Characterized by a sequential and linear approach, it divides the project into distinct phases that must be completed before moving to the next one.
🎯 What You'll Learn
- The 5 phases of the Waterfall model in detail
- Phase gate reviews and quality control
- Advantages and disadvantages with real examples
- Variants: V-Model and Sashimi Model
- When to use (and when to avoid) Waterfall
- Common anti-patterns and how to avoid them
History and Origins
The Waterfall model has origins in the 1950s-1960s, inspired by traditional engineering practices (construction, mechanical). The term "Waterfall" was coined in 1970 by Winston W. Royce in his famous paper "Managing the Development of Large Software Systems".
📜 Interesting Historical Fact
Irony: Winston Royce proposed the Waterfall model as an example of a sub-optimal approach that needed feedback loops! Over time, however, it was adopted literally without his recommendations for iteration.
The 5 Phases of Waterfall
The classic model consists of 5 sequential phases. Each phase produces specific deliverables and must be completed before moving to the next:
┌─────────────────────────────────────────────────┐
│ 1. REQUIREMENTS ANALYSIS │
├─────────────────────────────────────────────────┤
│ Input: Business needs, stakeholders │
│ Output: Requirements Specification Document │
│ (SRS - Software Requirements Spec) │
│ Duration: 2-4 weeks (typical) │
└─────────────────────────────────────────────────┘
↓ (Phase Gate Review)
┌─────────────────────────────────────────────────┐
│ 2. SYSTEM DESIGN │
├─────────────────────────────────────────────────┤
│ Input: SRS Document │
│ Output: Design Document (HLD, LLD) │
│ - High-Level Design (architecture) │
│ - Low-Level Design (components) │
│ - Database schema, API specs │
│ Duration: 3-6 weeks │
└─────────────────────────────────────────────────┘
↓ (Design Review)
┌─────────────────────────────────────────────────┐
│ 3. IMPLEMENTATION │
├─────────────────────────────────────────────────┤
│ Input: Design Documents │
│ Output: Working Code, Unit Tests │
│ Duration: 60-70% of total time │
└─────────────────────────────────────────────────┘
↓ (Code Review)
┌─────────────────────────────────────────────────┐
│ 4. TESTING & VERIFICATION │
├─────────────────────────────────────────────────┤
│ Input: Compiled Code │
│ Output: Test Reports, Bug Fixes │
│ Levels: Unit → Integration → System → UAT │
│ Duration: 15-25% of total time │
└─────────────────────────────────────────────────┘
↓ (QA Gate)
┌─────────────────────────────────────────────────┐
│ 5. DEPLOYMENT & MAINTENANCE │
├─────────────────────────────────────────────────┤
│ Input: Tested Software │
│ Output: Production System, User Documentation │
│ Activities: Release, Training, Bug fixing │
│ Duration: Ongoing (product lifecycle) │
└─────────────────────────────────────────────────┘
Phase 1: Requirements Analysis
The most critical phase of Waterfall. Here all system requirements are collected and documented before starting design.
📋 Main Activities
- Stakeholder interviews
- Business process analysis
- Feasibility study
- Project scope definition
- Competitive analysis
- Constraint identification (budget, time)
📄 Key Deliverables
- SRS Document (Software Requirements Specification)
- Use Case Diagrams
- Functional Requirements (FR)
- Non-Functional Requirements (NFR)
- Domain terminology glossary
- Stakeholder sign-off
⚠️ Typical Challenges
- Requirements Freeze: Requirements are "frozen" too early
- Ambiguity: Unclear documentation leads to different interpretations
- Scope Creep: Temptations to add requirements in later phases
- Analysis Paralysis: Too much time spent on analysis
Phase 2: System Design
Transforms requirements into a detailed technical blueprint. Divided into High-Level Design (architecture) and Low-Level Design (implementation details).
📐 HIGH-LEVEL DESIGN (HLD)
├─ System architecture (e.g.: 3-tier, microservices)
├─ UML diagrams (Class, Component, Deployment)
├─ Technology choices (languages, frameworks, database)
├─ Integrations and external APIs
└─ Security architecture
🔧 LOW-LEVEL DESIGN (LLD)
├─ Details of each module/component
├─ Algorithms and data structures
├─ Detailed database schema (ERD)
├─ API specifications (REST, GraphQL)
└─ Interface design (mockups, wireframes)
🏛️ Practical Example: E-commerce System
| Layer | Technologies | Components |
|---|---|---|
| Frontend | Angular, React | Product Catalog, Shopping Cart, Checkout |
| Backend | Node.js, Java Spring | Order Service, Payment Service, User Service |
| Database | PostgreSQL, Redis | Users, Products, Orders, Cache |
| Infrastructure | AWS, Docker | Load Balancer, CDN, S3 Storage |
Phase 3: Implementation
The actual coding phase. Developers translate design documents into working code following defined standards.
💻 Best Practices
- Coding Standards: Shared conventions (Lint, formatters)
- Version Control: Git with branching strategy
- Code Reviews: Mandatory peer reviews
- Unit Testing: Minimum coverage (e.g.: 80%)
- Documentation: Javadoc, README, inline comments
📊 Quality Metrics
- Code Coverage (Unit tests)
- Cyclomatic Complexity
- Code Duplication
- Technical Debt ratio
- Build success rate
// ✅ Naming Conventions
class UserService {{ '{' }} {{ '}' }} // PascalCase for classes
function getUserById() {{ '{' }} {{ '}' }} // camelCase for functions
const MAX_RETRY = 3; // UPPER_CASE for constants
// ✅ File Organization
src/
├── components/
├── services/
├── models/
├── utils/
└── tests/
// ✅ Error Handling
try {{ '{' }}
await fetchUser(id);
{{ '}' }} catch (error) {{ '{' }}
logger.error('User fetch failed', {{ '{' }} id, error {{ '}' }});
throw new UserNotFoundError(id);
{{ '}' }}
Phase 4: Testing & Verification
Systematic testing at multiple levels to verify that the software meets requirements. In Waterfall, testing occurs after implementation completion.
🧪 1. UNIT TESTING
├─ Tests individual functions/methods
├─ Executed by: Developers
├─ Tools: JUnit, Jest, pytest
└─ Coverage: 80-90%
🔗 2. INTEGRATION TESTING
├─ Tests interaction between modules
├─ Executed by: QA Team
├─ Focus: API, Database, Services
└─ Approaches: Big Bang, Top-Down, Bottom-Up
🖥️ 3. SYSTEM TESTING
├─ Tests complete system end-to-end
├─ Executed by: QA Team
├─ Types: Functional, Performance, Security
└─ Environment: Staging (simulates production)
👤 4. USER ACCEPTANCE TESTING (UAT)
├─ Customer verification
├─ Executed by: End users, Business analysts
├─ Criteria: SRS requirements satisfaction
└─ Output: Sign-off for Go-Live
🎯 Test Plan Document
Essential document that specifies:
- Test Strategy: General approach (manual, automated, mixed)
- Test Cases: Specific scenarios to test with expected results
- Test Data: Dataset for tests (mock, staging data)
- Entry/Exit Criteria: When to start and when to consider complete
- Defect Management: Bug tracking and resolution process
Phase 5: Deployment & Maintenance
Software release to production and ongoing support. Includes user training, bug fixing, and updates.
🚀 Deployment Activities
- Production environment setup
- Data migration (if necessary)
- Go-live planning and rollout
- User training and documentation
- Post-deployment monitoring
- Rollback plan (in case of issues)
🔧 Maintenance Types
- Corrective: Bug fixing
- Adaptive: Adaptations to new environments
- Perfective: Performance improvements
- Preventive: Refactoring, tech debt
Phase Gate Reviews
Phase gates are critical checkpoints between phases. Each phase must be formally approved before proceeding to the next.
📋 PHASE COMPLETED
↓
🔍 REVIEW MEETING
├─ Participants: Project Manager, Tech Lead, Stakeholder
├─ Agenda: Deliverable presentation, Q&A
└─ Duration: 1-3 hours
↓
✅ EVALUATION
├─ Deliverables complete?
├─ Acceptable quality?
├─ Risks identified?
└─ Budget and timeline respected?
↓
⚖️ DECISION
├─ ✅ GO: Proceed to next phase
├─ ⚠️ CONDITIONAL GO: Proceed with reservations
└─ ❌ NO-GO: Return and fix
Waterfall Variants
V-Model (Verification & Validation)
Waterfall extension that emphasizes testing. Each development phase has a corresponding testing phase.
Requirements ←─────────→ User Acceptance Testing
↓ ↑
System Design ←─────────→ System Testing
↓ ↑
Architecture ←─────────→ Integration Testing
↓ ↑
Module Design ←─────────→ Unit Testing
↓ ↑
Implementation (Vertex of V)
Sashimi Model
Variant that allows partial overlap between adjacent phases, like overlapping sashimi slices. More flexible than pure Waterfall.
Waterfall Advantages
✅ Waterfall Pros
| Advantage | Explanation | Ideal Scenario |
|---|---|---|
| Simplicity | Easy to understand and manage | Junior teams, simple projects |
| Clear Structure | Well-defined phases and milestones | Management reporting |
| Documentation | Complete and detailed | Regulated sectors, handover |
| Predictability | Estimable timeline and costs | Fixed budgets, contracts |
| Quality Gates | Rigorous quality control | Mission-critical projects |
Disadvantages and Limitations
❌ Waterfall Cons
| Disadvantage | Impact | Mitigation |
|---|---|---|
| Rigidity | Difficult to manage changes | Formal Change Request (expensive) |
| Late Testing | Bugs discovered late are expensive | Introduce early testing |
| No Working Software | No value until the end | Prototypes in early phases |
| Customer Disconnect | Customer sees product only at the end | Periodic demos, stakeholder engagement |
| Risk Concentration | Risks emerge late | Continuous risk assessment |
When to Use Waterfall
✅ Waterfall is Appropriate When:
- Clear and Stable Requirements: Well-defined projects from the start
- Mature Technology: Proven tech stack, few technical risks
- Regulated Industries: Aerospace, medical, finance (compliance)
- Short Projects: Timeline < 6 months, limited scope
- Distributed Teams: Little interaction possible, documented handoffs
- Fixed Budget: Fixed-price contract requires detailed planning
✈️ AEROSPACE SECTOR
├─ Avionics control software
├─ Fixed requirements and rigorous certifications
└─ Change after deployment = catastrophe
🏥 MEDICAL SECTOR
├─ Medical device software (FDA approval)
├─ Exhaustive documentation mandatory
└─ Requirements → test traceability
🏗️ INFRASTRUCTURE PROJECTS
├─ Legacy database migration
├─ Detailed data migration plan
└─ Complex rollback, planning required
When to Avoid Waterfall
❌ Waterfall is NOT Suitable When:
- Uncertain Requirements: Innovative projects, market validation needed
- Dynamic Market: Aggressive competition, critical time-to-market
- Long Projects: > 12 months, too much change risk
- Startup/MVP: Need to iterate rapidly
- New Technologies: High learning curve, technical risks
- Involved Customer: Stakeholders want to see continuous progress
Common Anti-Patterns
Typical errors in Waterfall application that lead to project failure:
🚫 Anti-Patterns to Avoid
1. Pure Waterfall
Problem: Applying the model too rigidly without feedback loops. Even Royce recommended iterations!
Solution: Introduce intermediate checkpoints and prototyping.
2. Big Design Up Front (BDUF)
Problem: Spending months on very detailed design that then becomes obsolete.
Solution: "Just enough" design, iterative refinement.
3. Documentation Over Communication
Problem: Writing hundreds of pages of documents that nobody reads.
Solution: Essential documentation + direct communication.
4. Late Integration
Problem: Integrating all components only at the end (Integration Hell).
Solution: Continuous Integration even in Waterfall.
5. No Customer Involvement
Problem: Customer absent after requirements, final surprise.
Solution: Periodic demos to key stakeholders.
Waterfall vs Agile: Direct Comparison
| Criterion | Waterfall | Agile |
|---|---|---|
| Philosophy | Plan-driven | Value-driven |
| Phases | Sequential, no overlap | Overlapping iterations |
| Requirements | Fixed at the start | Emergent, evolving |
| Testing | Separate phase at the end | Continuous, every iteration |
| Deliverables | Final Big Bang | Frequent increments |
| Customer | Initial and final involvement | Continuous collaboration |
| Changes | Formal Change Request | Continuous backlog refinement |
| Team | Specialized roles (silos) | Cross-functional, self-organizing |
| Risk Management | Upfront planning | Continuous mitigation |
| Success Metric | On time, on budget | Customer value delivered |
Best Practices for Modern Waterfall
How to apply Waterfall effectively in the modern context:
🎯 Practical Recommendations
1. Introduce Prototyping
- Create UI/UX prototypes in requirements phase
- Proof of Concept for high technical risks
- Interactive mockups for customer validation
2. Implement Continuous Integration
- Setup CI/CD pipeline even in Waterfall
- Automated builds and test suites
- Continuous integration testing (not just at the end)
3. Stakeholder Checkpoints
- Monthly or bi-weekly demos even during implementation
- Early feedback limits final surprises
- Build trust and continuous alignment
4. Risk-Driven Development
- Address highest technical risks first
- Spike solutions for uncertainties
- Regularly updated risk register
5. Living Documentation
- Updated documents (not "write once")
- Collaborative wikis instead of static Word/PDF
- Diagrams generated from code (e.g.: PlantUML)
Case Study: Successful Waterfall Project
📘 Real Case: Core Banking System
Context:
- National bank, migration from COBOL legacy system to Java
- Clear requirements and rigorous compliance
- Timeline: 18 months, Budget: €5M
Why Waterfall:
- Regulated sector (complete audit trail)
- Fixed requirements (Central Bank specifications)
- Distributed team (offshore development)
- Zero tolerance for production errors
Phases Executed:
- Requirements (3 months): 400+ pages of SRS, committee approved
- Design (4 months): Microservices architecture, 50+ API specs
- Implementation (8 months): 6 parallel teams, rigorous code reviews
- Testing (2 months): 10,000+ test cases, UAT with real users
- Deployment (1 month): Cutover weekend, tested rollback plan
Outcome:
- ✅ On-time and on-budget delivery
- ✅ Zero critical bugs in production
- ✅ Compliance audit passed 100%
- ✅ High user satisfaction (effective training)
Lessons Learned:
- Waterfall can work in appropriate context
- Communication is critical even with heavy documentation
- Test automation saved the project (regression suite)
Evolution: From Waterfall to Hybrid Methods
Many modern organizations adopt hybrid approaches that take the best from Waterfall and Agile:
Water-Scrum-Fall
- Requirements phase (Waterfall)
- Iterative development (Scrum sprints)
- Testing & Deployment phase (Waterfall)
- Common in enterprise with rigid governance
Wagile (Waterfall + Agile)
- Upfront waterfall planning
- Agile execution with sprints
- Traditional reporting to management
- Gradual transition to pure Agile
Conclusions
The Waterfall model, despite criticism in the Agile era, remains valid and necessary in specific contexts. The key is not "Waterfall vs Agile" but when to use each.
💡 Key Takeaways
- Waterfall is sequential: 5 distinct phases with phase gates
- Excellent for projects with stable requirements and regulated sectors
- Heavy documentation is a feature, not a bug (in certain contexts)
- Main anti-patterns: excessive rigidity, late testing, no customer feedback
- Modern Waterfall includes prototyping, CI/CD, and stakeholder engagement
- V-Model and hybrid approaches mitigate pure Waterfall limitations
📚 Next Article
In the next article, we'll explore Agile Methodology: the 4 values of the Manifesto, the 12 principles, and how the iterative approach revolutionizes software development.







