Extreme Programming reference page
CS 284 (CSA), Spring 2005
Source: Kent Beck, Extreme programming explained: Embrace change, Addison-Wesley, 2000.
The cost of making changes during software development is no longer exponential. With modern software development tools, the curve now flattens throughout the lifetime of the project.
Therefore, armed with tools, we freely invest in production stages of the software development process, with crucial safeguards such as good communication, constant feedback, and a focus on simplicity, rather than focusing on thorough pre-production planning.
Communication
Simplicity
Feedback
Courage (to do things differently than before)
Rapid feedback
Assume simplicity
Incremental change
Embracing change
Quality work
Teaching learning (cf. liberal arts)
Small initial investment
Expect to win (attitude)
Concrete experiments
Open, honest communication
Work with people's instincts, not against them
Responsibility accepted, not given
Local adaptation (of the methodology)
"Travel light" (be an intellectual nomad)
Honest measurement (including degree of accuracy)
Coding
Testing
Listening
Designing
Ordering in Waterfall Model vs. ordering in XP.
The planning game
Small releases
Metaphor
Simple design
Testing
Refactoring
Pair programming
Collective ownership
Continuous integration
40-hour week (...)
On-site customer
Coding standards
Two groups of players: User ("Business") and Development. The goal of the game is to maximize the value of the software produced by the team, deducting the cost of development and risk incurred during development. The strategy is to invest as little as possible to produce the most valuable functionality (as assessed by User) as quickly as possible, while reducing risk. Then, iterate.
User people have to decide the following:
Scope
Priority
Composition of releases (how much is enough)
Dates of releases
Development (a.k.a., Technical) team must decide the following:
Estimates (amount of time/effort required to complete a task or story)
Consequences (e.g., choice of database system)
Process (i.e., how the tasks will be implemented)
Detailed scheduling
Exploration: write a story; estimate a story; split a story if necessary.
Commitment phase: User sorts stories by value; Development sorts stories by risk; Development sets velocity; User chooses scope.
Steering phase:
User sorts stories by value into three categories:
Essential for system functioning;
Significant user value but less essential;
Would be nice.
Development sorts stories by risk into three categories:
Can estimate the task precisely;
Can estimate the task reasonably well;
Cannot estimate the task.
Metrics
Coaching, i.e., calmly and confidently getting everybody to make good decisions, rather than taking responsibility for tasks.
Tracking
Intervention, when necessary.
Resistant culture.
rab@stolaf.edu, March 14, 2005