Throughout the software development industry, there have been practices that have been widely adopted to help promote productivity and quality code production. Extreme programming is an agile development framework that seeks to bring many of these best practices into a single environment to produce better quality code.

Assumptions

  • Knowledge of Agile
  • Understanding of SDLC phases

What is Extreme Programming?

Extreme Programming (XP) is an agile software development approach that capitalizes on taking beneficial practices of software engineering to the "extreme". The goal of XP is to produce better software while also increasing the quality of life for the developers. Quality of life is an important distinction; many other SDLC models will focus their efforts on the project and client, and little on the developers.

XP Values

Extreme programming contains a set of values on top of those presented in the agile methodology that helps set it apart from other agile frameworks. Those values include respect, simplicity, communication, courage, and feedback.

Respect

Respect among the team requires that a developer respects both their peers and themselves. A developer may respect their peers by not creating code that will impede the work of other developers, such as breaking the ability for the project to compile. This goes beyond good code educate to include respect for the people around you, and contributing to a welcoming environment. Additionally, respecting oneself includes constantly striving for better work ethic and better practices.

Simplicity

Keeping a simple program is often a good marker of a properly-functioning program. Implementing the simplest solution and only the features which are needed soon as opposed to down the road is a key value of XP. This helps the development team by not doing work that might not be needed if requirements change.

Communication

By communicating the overall goal clearly to every developer on the team is an excellent step towards making sure the project has vision and is well-understood. It follows that frequent communication between the team is a must-have beneficial practice in an XP situation.

Courage

When faced with a situation where a feature might no longer be needed or a large module needs to be updated, it takes courage to willingly throw oneself into that situation of disposing previous work. Facing a project with courage allows developers to know when it is time to let go of some code to make way for better changes.

Feedback

While feedback from the customer is important, this value goes beyond the customer to include system feedback that practices like unit testing may provide, as well as any feedback the development team may have for the status of the project. This ensures there are no creeping issues that might blow up later and hinder the project's ability to grow.

XP Activities

There are four primary activities that are carried out in the development process when practicing extreme programming:

Listening

Communicating with the client to transfer requirements to executable code is necessary in all SDLC models. In XP listening is done by frequent communication between the developer and client to provide feedback to both parties about how the system can best be designed to solve a problem. Much of this occurs in the main planning phase of the project called the planning game.

The Planning Game

This happens once per project iteration, and consists of two activities:

  1. Release Planning focuses on determining which requirements need to be implemented in the near future. This involves communication with the client to get an idea of this.
  2. Iteration Planning focuses on the development plan and execution. Once the release planning has been completed, the dev team breaks down the requirements into smaller problems to be solved and tasks that are to be accomplished.

Designing

To promote simplicity in the project, an overall design is achieved that helps organize the logic of the system. A good design helps maintain project simplicity as more requirements are added or changed through the development process.

Coding

While designing focuses on an elegant system in XP, coding is where decisions are made as to what the most favorable solution is on a lower level. Coding also can act as a way to model and communicate ideas with the team to find the best solution. This is especially favorable for complex interactions in a system.

Pair Programming

Pair programming is a practice often encountered in XP where two developers will sit in front of one computer. The usual flow is a switching of roles between a programmer and a reviewer. This way, code can be reviewed as it is being written and many mistakes are often caught as they are made. Pair programming also creates a synergy within the development team to solve problems faster.

When to use XP

  • When working with a client who does not have a full picture of what they want.
  • XP works very well for smaller projects as well as higher risk projects involving new technology.
  • When requirements are expected to change often.
  • The team size is relatively smaller.

Criticisms of XP

Extreme programming is not without its criticisms, one of the main points brought up is that the method is only as effective as the team; inexperienced programmers might not be able to keep up with the fast pace that agile frameworks call for, especially extreme programming where a team is meant to be self sufficient. Other criticisms include:

  • Lacks documentation that other models provide.
  • Can cost clients a tremendous amount of time for frequent meetings.
  • Requires a change in mindset of the developers to adapt to, unlike other common SDLC models.