:PROPERTIES:
:ID:       67ad330b-cc11-4e8e-b054-12b9da45ea60
:END:
#+title: Software Development Methodologies
#+filetags: :notes:career:technical:


* Software Development Methodologies

A software development methodology defines the /process, structure, and principles/
used to plan, manage, and execute software projects.

** Why It Matters
- Ensures predictability and consistency across teams
- Reduces risk of project failure
- Aligns stakeholders and developers on expectations
- Provides tools for handling change and uncertainty

-----

* 1. Waterfall

** Overview
A *linear, sequential* model where each phase must be completed before the next begins.

** Phases
1. Requirements
2. System Design
3. Implementation
4. Testing
5. Deployment
6. Maintenance

** Example
#+BEGIN_EXAMPLE
A government agency contracts a firm to build a tax portal.
Requirements are frozen at sign-off; code is written six months
later; testing follows; the portal launches two years in.
#+END_EXAMPLE

** Pros & Cons
| Pros                        | Cons                              |
|-----------------------------+-----------------------------------|
| Clear structure and phases  | Very rigid; change is costly      |
| Easy to manage milestones   | Late discovery of defects         |
| Good for fixed requirements | Customer sees nothing until the end|

** Best For
- Projects with well-defined, stable requirements
- Regulatory/compliance-heavy environments (aerospace, medical devices)

-----

* 2. Agile

** Overview
An *iterative, incremental* philosophy that values:
#+BEGIN_QUOTE
Individuals and interactions over processes and tools.
Working software over comprehensive documentation.
Customer collaboration over contract negotiation.
Responding to change over following a plan.
— The Agile Manifesto (2001)
#+END_QUOTE

** Core Concepts
- *Iterations (sprints)*: Short delivery cycles (1–4 weeks)
- *Incremental delivery*: Working software shipped frequently
- *Feedback loops*: Customers review and redirect regularly
- *Cross-functional teams*: Dev, QA, design collaborate continuously

** Example
#+BEGIN_EXAMPLE
A startup builds a mobile app in 2-week sprints.
Sprint 1 → user login
Sprint 2 → profile page
Sprint 3 → search feature
After each sprint, real users test and give feedback,
shaping what gets built next.
#+END_EXAMPLE

** Agile Values vs Waterfall
| Dimension       | Waterfall     | Agile             |
|-----------------+---------------+-------------------|
| Planning        | Upfront, fixed| Continuous, adaptive|
| Delivery        | End of project| Every sprint      |
| Change          | Discouraged   | Embraced          |
| Customer role   | Sign-off only | Active partner    |
| Risk exposure   | High (late)   | Low (early)       |

** Best For
- Products with evolving requirements
- Startups, SaaS, consumer apps

-----

* 3. Scrum

** Overview
Scrum is the most popular *Agile framework*. It imposes a specific
structure of roles, events, and artefacts on top of Agile principles.

** Roles
| Role             | Responsibility                                      |
|------------------+-----------------------------------------------------|
| *Product Owner*  | Owns the backlog; prioritises what to build         |
| *Scrum Master*   | Removes blockers; facilitates ceremonies            |
| *Dev Team*       | Self-organising; delivers the increment             |

** Artefacts
- *Product Backlog* — ordered list of all desired features/fixes
- *Sprint Backlog* — subset of items pulled into the current sprint
- *Increment*      — shippable product at end of each sprint

** Ceremonies (Events)
#+BEGIN_EXAMPLE
[Sprint Planning] → [Daily Standup × N] → [Sprint Review] → [Retrospective]
     ↑_____________________________ repeat (1–4 weeks) ___________________|
#+END_EXAMPLE

| Event              | Duration     | Purpose                               |
|--------------------+--------------+---------------------------------------|
| Sprint Planning    | ≤ 8 hrs      | Decide what goes into the sprint      |
| Daily Standup      | 15 min       | Sync on progress, surface blockers    |
| Sprint Review      | ≤ 4 hrs      | Demo increment to stakeholders        |
| Retrospective      | ≤ 3 hrs      | Reflect and improve the process       |

** Example: Daily Standup Format
#+BEGIN_EXAMPLE
Each team member answers three questions:
  1. What did I complete yesterday?
  2. What will I work on today?
  3. Is anything blocking me?
#+END_EXAMPLE

** Best For
- Teams of 3–9 people
- Products with frequent reprioritisation

-----

* 4. Kanban

** Overview
A *flow-based* method focused on visualising work and limiting
work-in-progress (WIP) to maximise throughput. No fixed sprints.

** Core Principles
1. Visualise the workflow (the Kanban board)
2. Limit WIP per column
3. Manage and improve flow
4. Make policies explicit

** Example Board
#+BEGIN_EXAMPLE
| Backlog | In Progress (WIP:2) | Review (WIP:1) | Done |
|---------|---------------------|----------------|------|
| Task D  | Task B              | Task A         | Task X|
| Task E  | Task C              |                | Task Y|
#+END_EXAMPLE

WIP limits prevent bottlenecks — new work cannot start until a slot opens.

** Scrum vs Kanban
| Dimension     | Scrum               | Kanban              |
|---------------+---------------------+---------------------|
| Cadence       | Fixed sprints        | Continuous flow     |
| Roles         | PO, SM, Dev Team    | No prescribed roles |
| Change        | After sprint        | Anytime             |
| Metrics       | Velocity            | Cycle time, throughput|
| Best for      | Feature development | Operations, support |

-----

* 5. Extreme Programming (XP)

** Overview
An Agile methodology with an extreme focus on *engineering practices*
and code quality.

** Key Practices
- *Test-Driven Development (TDD)*: Write the test before the code
- *Pair Programming*: Two developers work at one machine
- *Continuous Integration (CI)*: Merge and test code multiple times a day
- *Refactoring*: Continuously improve code structure
- *Small Releases*: Deploy frequently, in small increments
- *Collective Code Ownership*: Anyone can change any code at any time

** Example: TDD Cycle
#+BEGIN_EXAMPLE
Red   → Write a failing test
Green → Write the minimum code to pass it
Refactor → Clean up without breaking the test
Repeat.
#+END_EXAMPLE

** Best For
- Teams prioritising code quality and technical excellence
- Projects with rapidly changing requirements

-----

* 6. SAFe (Scaled Agile Framework)

** Overview
SAFe scales Agile practices across *large enterprises* with multiple
teams working on the same product.

** Key Concepts
- *Agile Release Train (ART)*: A long-lived team of 50–125 people
- *Program Increment (PI)*: A 8–12 week planning cycle (like a "super sprint")
- *PI Planning*: All teams plan together face-to-face every PI

** Levels
#+BEGIN_EXAMPLE
Essential SAFe:  Team + Program levels
Large Solution:  + Solution Train (multiple ARTs)
Portfolio SAFe:  + Portfolio strategy & funding
#+END_EXAMPLE

** Best For
- Enterprises with 100+ engineers
- Organisations migrating from Waterfall to Agile at scale

-----

* 7. DevOps (Methodology + Culture)

** Overview
DevOps bridges *development and operations* to enable faster, more
reliable software delivery through automation and collaboration.

** Core Pillars
| Pillar                 | Description                                       |
|------------------------+---------------------------------------------------|
| *CI/CD*                | Automate build, test, and deploy pipelines        |
| *Infrastructure as Code* | Manage servers via code (Terraform, Ansible)   |
| *Monitoring*           | Observe systems in production continuously        |
| *Blameless Culture*    | Learn from failures without finger-pointing       |

** Example: CI/CD Pipeline
#+BEGIN_EXAMPLE
Code Push → Build → Unit Tests → Integration Tests → Deploy to Staging
         → Manual Approval → Deploy to Production → Monitor
#+END_EXAMPLE

** Best For
- Any team wanting faster, safer releases
- Organisations running cloud-native infrastructure

-----

* Comparison Summary

| Methodology | Structure  | Delivery Cadence | Flexibility | Team Size  | Best Fit               |
|-------------+------------+------------------+-------------+------------+------------------------|
| Waterfall   | Sequential | End of project   | Low         | Any        | Fixed scope, compliance|
| Agile       | Iterative  | Every sprint     | High        | Small–Med  | Evolving requirements  |
| Scrum       | Iterative  | Every 1–4 weeks  | High        | 3–9        | Feature development    |
| Kanban      | Flow-based | Continuous       | Very High   | Any        | Ops, support, flow work|
| XP          | Iterative  | Weekly           | High        | Small      | Quality-critical code  |
| SAFe        | Iterative  | Every 8–12 weeks | Medium      | 50–125+    | Enterprise Agile       |
| DevOps      | Continuous | On every commit  | High        | Any        | Fast, reliable delivery|

-----

* Choosing the Right Methodology

Ask these questions:
1. *How stable are the requirements?*
   - Stable → Waterfall / SAFe
   - Changing → Agile / Scrum / Kanban

2. *How large is the team?*
   - 3–9 → Scrum
   - 50+ → SAFe
   - Any size ops team → Kanban

3. *How important is engineering quality?*
   - Very high → XP (TDD, pair programming)

4. *How often do you need to ship?*
   - Daily → DevOps + CI/CD
   - Weekly → Scrum / XP
   - Continuously → Kanban

5. *What is the regulatory environment?*
   - High compliance → Waterfall or hybrid

#+BEGIN_EXAMPLE
Most modern teams use a HYBRID approach:
  Scrum (planning cadence)
  + Kanban board (visual workflow)
  + XP practices (TDD, CI)
  + DevOps (automated pipelines)
#+END_EXAMPLE

-----

* Key Terminology Glossary

| Term              | Definition                                                   |
|-------------------+--------------------------------------------------------------|
| Sprint            | A fixed time-box (1–4 wks) in Scrum for delivering work     |
| Backlog           | Prioritised list of work items                               |
| Velocity          | Amount of work a team completes per sprint                   |
| WIP Limit         | Maximum items allowed in a workflow stage simultaneously     |
| CI/CD             | Continuous Integration / Continuous Delivery (or Deployment) |
| TDD               | Test-Driven Development                                      |
| Retrospective     | Meeting to inspect and improve team process                  |
| Definition of Done| Agreed criteria for when a task is truly "complete"          |
| Epic              | Large body of work broken into smaller user stories          |
| User Story        | Feature described from end-user perspective                  |
