What is eXtreme Programming?
eXtreme Programming (XP) is an agile framework that emphasizes both the broader philosophy of agile—to produce higher-quality software to please customers—as well as the more specific goal of making life better for the engineers developing it. The main characteristics of XP include dynamically changing software requirements; using a small, collocated extended development team; and leveraging technology that facilitates automated unit and functional tests.
What’s the History of eXtreme Programming?
Software engineer Kent Beck developed XP in 1996 as a lightweight agile framework, and he built the approach around 12 practices (possibly modeled on the Agile Manifesto’s 12 principles), including:
- The planning game
- Small releases
- Simple design
- Pair programming
- Collective ownership
- Continuous integration
- 40-hour week
- Onsite customer
- Coding standard
Beck’s original XP also stressed five core values, including:
Since its beginning, XP has become one of the most popular agile frameworks.
What are the Strengths and Weaknesses of eXtreme Programming?
XP’s strengths include:
- Can help cut costs for software development organizations
- Team members are accountable to the team for their work
- The emphasis on quality-of-life issues helps boost employee morale and retention
XP’s weaknesses include:
- Does not place emphasis on code quality, which can lead to defects in early iterations
- Stresses code over product design
- Is not ideal if developers are not in the same location
Should You Use eXtreme Programming?
XP is designed to help companies meet the needs of customers who might not know or be able to articulate precisely what they need, or whose needs may change frequently. This agile framework is designed to help companies mitigate the risks of managing projects like this with dynamic requirements.
Things to keep in mind, however, are that XP demands a relatively small development team, requires developers working closely with managers and customers, and requires the team to be able to create automated unit and functional tests.