What Is Extreme Programming (XP)
What Is Extreme Programming (XP)
Plan
Analysis
Design
Code
Test
Deploy
$
$
$
$
$
$
$
$
Iteration
Iteration
Iteration
Iteration
Iteration
Iteration
Iteration
Iteration
Iteration
Iteration
Iteration
$
$
$
$
Iteration
Iteration
Iteration
Iteration
Iteration
XP Lifecycle
$ = Potential
Release
XP Values
1
Communication
Simplicity
Feedback
Courage
Respect
XP Values
Communication:
Communication is
important for creating a sense of team and effective
cooperation. The value focuses on making sure all
the team members know what is expected from
them and what other team members are working on.
The daily stand-up meeting is a key communication
component.
Simplicity:
XP Values
Feedback:
Courage:
Respect:
XP Practices
(Source: http://www.xprogramming.com/xpmag/whatisxp.htm)
XP Primary Practices
Test First Programming
Programming
Incremental Design
Pair Programming
Integration
Primary
Practices
Information Workspace
Energized Work/ Whole
Team
Stories
Planning
Weekly/Quarterly Cycle
Slack
XP Iteration Planning
Pair Programmin
g
Test-Driven Developmen
t
Refactoring is supported by
comprehensive testing--customer tests
and programmer tests
XP Practices: Metaphor
XP Teams develop a common vision of the
system
With or without imagery, define common
system of names
Ensure everyone understands how the
system works, where to look for
functionality, or where to add functionality
XP Principles
Humanity
Economics
Mutual benefits
Self similarity
Improvement
Diversity
Reflection
Flow
Opportunity
Redundancy
Failure
Quality
Baby steps
Accepted responsibility
XP Roles
Product Owner/ On-Site
Customers
Domain Experts/SMEs
Interaction Designers
Business Analysts
Programmers
Designers and Architects
Technical Specialists
Testers
Coaches
Programmer Coaches
Project Manager/Product
Fractional assignment
is counterproductive
XP team should include
exactly the expertise
necessary to complete
the project successfully
and cost effective.
Roles on a mature XP
team aren't fixed and
rigid
XP Key Concepts
Refactoring
Technical Debt
Time-boxing
Last Responsible Moment
Stories
Iteration
Velocity
Theory of constraints (TOC)
Mindfulness
Refactoring
Technical Debt
Technical debt is the total amount of less-than-perfect design
and implementation decisions in your project.
When a team produces software without using good practices such
as TDD, continuous integration, and refactoring, it may incur
technical debt.
Like financial debt, technical debt accrues interest that will cost the
team more at a later date.
Sometimes this debt may be worthwhile, such as to take advantage
of a sudden business opportunity.
Usually, though, technical debt compounds and slows the team's
velocity. Less and less business value can be produced in each
iteration because the code lacks a safety net of automated
regression tests or has become difficult to understand and maintain.
The key to managing it is to be constantly vigilant. Avoid shortcuts,
use simple design, and refactor relentlessly.
Time-Boxing
Recognizing the point at which you have enough
information is not easy. If you use time-boxing,
you set aside a specific block of time for your
research or discussion and stop when your time
is up, regardless of your progress.
This is both difficult and valuable. Its difficult
to stop working on a problem when the
solution may be seconds away. However,
recognizing when youve made as much
progress as possible is an important timemanagement skill. Time-boxing meetings, for
example, can reduce wasted discussion.
Stories
Iteration
Iteration is the full cycle of design-code-verify-release
practiced by XP teams.
Its a time-box that is usually one to three weeks long.
Each iteration begins with the customer selecting which
stories the team will implement during the iteration, and
it ends with the team producing software that the
customer can install and use.
The beginning of iteration represents a point at which
the customer can change the direction of the
project.
Smaller iterations allow more frequent adjustment.
Fixed-size iterations provide a well-timed rhythm of
development.
Velocity
In well-designed systems, programmer estimates of effort tend
to be consistent but not accurate.
Programmers also experience interruptions that prevent effort
estimates from corresponding to calendar time.
Velocity is a simple way of mapping estimates to the
calendar.
Its the total of the estimates for the stories finished in iteration.
In general, the team should be able to achieve the same
velocity in every iteration.
This allows the team to make iteration commitments and
predict release dates.
The units measured are deliberately vague; velocity is a
technique for converting effort estimates to calendar time and
has no relation to productivity.
Mindfulness
To respond effectively to change - requires that everyone
pay attention to the process and practices of development.
This is mindfulness.
Sometimes pending changes can be subtle. You may realize
your technical debt is starting to grow when adding a new
feature becomes more difficult this week than last week.
You may notice the amount and tone of feedback you
receive from your customer's change.
XP offers plenty of opportunities to collect feedback from
the code, from your coworkers, and from every activity you
perform. Take advantage of these.
Pay attention. See what changes and what doesnt, and
discuss the results frequently.
Technical Debt
15
Minutes
Discussion: time-boxing
Time-box technique
10
Minutes