Part of the agile-type models.
Intense involvement of customers.
Involves pair-wise programming, constant code improvement.
Cycle
Select user stories for this release → break down stories to tasks → plan release → develop/integrate/test software → release software → evaluate system → select new user stories for next release.
Practices
- Incremental planning - requirements are collected on story cards which are prioritised and broken down into dev tasks.
- Small releases
- Simple design - only design for the current requirements and no more
- Test first development - automated unit test frameworks are created to test a new piece of functionality before the functionality is implemented
- Refactoring - refactor often
- Pair programming
- Collective ownership
- Continuous integration - as soon as work is done on a task, this is integrated into the larger code base and unit tested.
- Sustainable pace - don’t do tons of overtime as it effects the code quality.
Advantages
- Lightweight methods suit small-medium sized projects
- Produces good team cohesion
- Iterative
- Test based produces higher quality code
Disadvantages
- Difficult to scale up to large projects where documentation is essential.
- Needs experience and skill or it becomes a code-and-fix model.
- Programming pair is costly.