Extreme Programming (XP) is an agile software development framework that is specifically designed for improving the quality of the software, the work process for the development team, and to drive increased customer satisfaction.
What is Extreme Programming? According to Kent Benk, XP can be viewed as a lightweight methodology for small to medium sized teams for developing software in the face of vague or rapidly changing requirements. He also summaries the core values of XP as “Do more of what works and do less of what doesn’t”.
The main goal of this methodology is to produce quality production code that can be executed and maintained. Activities that do not support the goal directly is questioned and discarded.
XP can be described in terms of its core values and practices.
Core Values of Extreme Programming
- Simplicity: XP looks for the simplest way to get things done by delivering the simplest functionality that meets business needs. This is done by doing the essential of reducing waste, addressing only known issues, and keeping the design simple for effective understanding, maintenance, and modification.
- Communication: XP focuses on effective communication between the team and the customer by providing collaborative workspaces, co-location of development and business space, paired development as well as short standup meetings.
- Feedback: Feedback plays an important role in project improvement. XP encourages instantaneous feedback through frequent releases, co-location with customers/end users, and automated testing. This helps the team identify room for improvement and revise practices.
- Courage: An XP team must have the courage to do away with codes that do not work. The team must also be willing to fix a problem if it is discovered. Ensuring change is effected if discovered that a part of code can be improved.
- Respect: The team must respect each other both personally and professionally to achieve its goals.
Core Practices of Extreme Programming
The original 12 practices of XP comprises of the following:
- The Planning Game: The business and development team collaborate to produce maximum business value as rapidly as possible. The business team will list out user-desired features to the development team. The features are written out as a User Story, with each feature a name and description of what is required. The development team provide estimates and decides the time and effort required for each story. The business team decides the stories to be implemented and in what order.
- Simple Design: A practice in XP is to implement the simplest possible design that gets the job done.
- Small releases: Development team releases running, well tested software thereby delivering business value for the customer at every iteration.
- Metaphor: This is a simple evocative decision of how the program works.
- Testing: The team performs validation and testing of software at all times. Customers provide acceptance testing and that helps them ensure that features needed are provided.
- Pair Programming: Production code is written by two developers sitting at the same machine. Code is reviewed as it’s written. This ensures high quality produced code, design, and testing that’s done in the same session. This also serves as a way for knowledge to be transferred and passed throughout the team.
- Refactoring: Low quality, performance decreasing or duplicated code is improved during coding sessions are refactored.
- Collective Ownership: Everyone in the development team is expected to be able to work on all parts of the codebase. No single developer owns a module during the development process.
- On-site Customer: Development team has continuous access to the customer. This can be done with a customer representative or product manager.
- Coding Standard: Same standards are maintained for coding to ensure that codes remain familiar and uniform in support of collective ownership.
- Continuous Integration: All changes are integrated into the codebase daily and unit tests are carried out along with the codebase integration to ensure they work before or after production.
- 40-Hour Week: Programmers go home on time. In terms of overload, up to a week of overtime can be allowed. However multiple weeks of overtime is highly discouraged and are treated as a sign that something is very wrong with the schedule or process.
Advantages of Extreme Programming
Extreme Programming works towards providing iterative and recurrent software releases throughout the project. Instead of releasing the completed software after a single long development lifecycle. Advantages of XP include the following:
- XP ensures software developers focus on coding and not worry about the unproductive activities of the project.
- XP ensures company resources and finances are not wasted on useless activities when they can be spent on the realization of the project.
- It also reduces the risk of project failure ensuring customers get their desired product.
- Communication and transparency help to keep everyone and everything accountable.
- Better customer satisfaction.
- Regular testing and bug detection ensure that the customer will get a working prototype of the software in less time.
Disadvantages of Extreme Programming
- Extreme Programming practice may be too overly focused on the code and less on the design. Good design is extremely important for software applications due to its role in their marketability.
- XP projects may not always provide the best error/bug documentation.
- XP is not the best option if a team of programmers is collaborating remotely.
Extreme Programming is not a complete template for the entire project delivery. Rather, XP is a set of best practices for managing the development team and its communication with the customer. This process ensures the team grows, change, and adapt to different conditions and business needs. Extreme Programming has the power to transform the entire software development process as well as improve the productivity of the team more than any other process in agile development.