Concept: What is XP?
Main Description

Kent Beck, author of Extreme Programming Explained [BEC00], says, "XP is a light-weight methodology for small-to-medium-sized teams developing software in the face of vague or rapidly changing requirements." Simply stated, XP is a set of values, rights, and best practices that support each other in incrementally developing software.

When a team is developing software with XP, the customer creates stories that describe the functionality of the software. These stories are very lightweight use-cases. They are small units of functionality that require less than one or two weeks to implement. Programmers estimate the stories, and, based upon those estimates, the customer decides which stories to do first.

Development is done iteratively and incrementally. Every two weeks, the programming team delivers working stories to the customer. Then the customer chooses another two weeks worth of work. The system grows in functionality, piece by piece, steered by the customer. Progress is measured and tracked based on the observable behavior of the team.

XP relies on evolutionary design and testing techniques that maintain a high quality design while new functionality is being added. These techniques avoid the mess of unmaintainable code through continuous review, an emphasis on simplicity, and the backstop of nearly universal test coverage.

Programmers work on their programming tasks in pairs. The pair share a single workstation and work together to write a single piece of code. Both partners are equally engaged in the writing. The keyboard moves back and forth between them frequently.

XP programmers practice Test-Driven Development. In short, they write unit tests prior to writing production code. However, this is done in very tiny increments. Tiny portions of a test are written first, and then just enough production code is written to make those portions pass. This continues iteratively until everything that can be practically tested has been tested.

XP focuses on continuous delivery of tested, running software from the first day of the project to the last. Delivery of real software, combined with simple but frequent planning, provides stakeholders with a clear view of what is done and what will be done. This enables the business to steer the project to an on-time shipment of the best possible software that can be completed in the time available.