- Whole Team. We want customers, managers, and developers to work closely with one another so that they are all aware of one another's problems and are collaborating to solve those problems. Who is the customer? The customer of an XP team is the person or group that defines and prioritizes features. They can be working in the same company as the developers or a user representative commissioned by the body of users.
- User Stories. A user story is mnemonic token of ongoing conversation about a requirement. A user story is planning tool that the customer uses to schedule the implementation of a requirement, based on its priority and estimated cost.
- Short Cycles. An XP project delivers working software every two weeks. Each of these two-week iterations produces working software that addresses some of needs of the stakeholders. At the end of each iteration, the system is demonstrated to the stakeholders in order to get their feedback.
- Acceptance Test. Acceptance test are written by business analysts, quality assurance specialists, and testers during the iteration. It is from these tests that the programmers learn the true detailed operation of the stories they are implementing. These tests become the true requirements document of the project. Every detail about every feature is described in the acceptance tests, and those tests are the final authority as to whether those feature are done and correct.
- Pair Programming. Code is written by pairs of programmers working together at the same workstation. Pair programming dramatically increases the spread of knowledge throughout the team. Although specialities remain, and tasks that require certain specialties will usually belong to the appropriate specialists, those specialists will pair with nearly everyone else on the team. Pairing does not reduce the efficiency of the programming staff but does significantly reduce the defect rate.
- Test-Driven Development(TDD). When you write code in order to make test cases pass, that code is by definition testable. What's more, there is a string motivation to decouple modules so that they can be tested independently. Thus, the design of code that is written in this fashion tends to be much less coupled.
- Collective Ownership. A pair has the right to check any module and improve it. No programmers are individually responsible for any one particular module or technology.
- Continuous Integration. The programmers check their code in and integrate several times per day. The rule is simple. The first one to check in wins; everybody else merges.
- Sustainable Pace. A software project is not a sprint; it is a marathon. It must intentionally run at steady, moderate pace. The XP rule is that a team is not allowed to work overtime. The only exception to that rule is that in the last week in a release, a team that is within striking distance of its release goal can sprint to the finish and work overtime.
- Open Workspace. The team works together in an open room. Tables are set up with workstations on them. Each table has two or three such workstations. Two chairs are in front of each workstation. The walls are covered with status charts, task breakdowns, Unified Modeling Language (UML) diagrams, and so on.
- The Planning Game. The essence of the planning game is the division of responsibility between business and development. The business people(customers) decide how important a feature is, and the developers decide how much that feature will cost to implement.
- Simple Design. An XP team makes its designs as simple and expressive as they can be. 3 XP mantras guide the developer: Consider the simplest thing that could possibly work, You aren't going to need it, Once and only once. XPers don't tolerate duplication of code. Wherever they find it, the eliminate it.
- Refactoring. Refactoring is the practice of making a series of tiny transformation that improve the structure of the system without affecting its behavior. Each transformation is trivial, hardly worth doing. But together, they combine into significant transformation of the design and architecture of the system.
- Metaphor. Metaphor is the only XP practice that is not concrete and direct. It's the big picture that ties the whole system together. It's the vision of the system that makes the location and shape of all the individual modules obvious. If a module's shape inconsistent with the metaphor, you know that is the module that is wrong.
Extreme Programming is a set of simple and concrete practices that combine into an agile development process. XP is a good general-purpose method for developing software. Many project teams will be able to adopt it as is. Many others will be able to adapt it by adding or modifying practices.
