Kent Beck, author of Extreme Programming Explained 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. XP values Communication, Simplicity, Feedback and Courage. Programmers and Customers have the right to do a quality job all the time and to have a real life outside of work.
XP is a collection of best practices. Some may sound familiar. Some may sound foreign.
Customer Team Member – Teams have someone (or a group of people) representing the interests of the customer. They decide what is in the product and what is not in the product.
Planning Game – XP is an iterative development process. In the planning game, the customer and the programmers determine the scope of the next release. Programmers estimating the feature costs. Customers select features and package the development of those features into small iterations (typically 2 weeks). Iterations are combined into meaningful end user releases.
User Story – A User Story represents a feature of the system. The customer writes the story on a note card. Stories are small. The estimate to complete a story is limited to no greater than what one person could complete within a single iteration.
Small Releases – Programmers build the system in small releases defined. An iteration is typically two weeks. A release is a group of iterations that provide valuable features to the users of the system.
Acceptance Testing – The customer writes acceptance tests. The tests demonstrate that the story is complete. The programmers and the customer automate acceptance tests. Programmers run the tests multiple times per day.
Open Workspace – To facilitate communications the team works in an open workspace with all the people and equipment easily accessible.
Test Driven Design – Programmers write software in very small verifiable steps. First, we write a small test. Then we write enough code to satisfy the test. Then another test is written, and so on.
Metaphor – The system metaphor provides an idea or a model for the system. It provides a context for naming things in the software, making the software communicate to the programmers.
Simple Design – The design in XP is kept as simple as possible for the current set of implemented stories. Programmers don’t build frameworks and infrastructure for the features that might be coming.
Refactoring – As programmers add new features to the project, the design may start to get messy. If this continues, the design will deteriorate. Refactoring is the process of keeping the design clean incrementally.
Continuous Integration – Programmers integrate and test the software many times a day. Big code branches and merges are avoided.
Collective Ownership – The team owns the code. Programmer pairs modify any piece of code they need to. Extensive unit tests help protect the team from coding mistakes.
Coding Standards – The code needs to have a common style to facilitate communication between programmers. The team owns the code; the team owns the coding style.
Pair Programming – Two programmers collaborate to solve one problem. Programming is not a spectator sport.
Sustainable Pace –The team needs to stay fresh to effectively produce software. One way to make sure the team makes many mistakes is to have them work a lot of overtime.