Extreme programming is one of the more recent methods of developing software. It aims to improve on traditional methods of software development by emphasizing business value and quality. This method of programming tries to deliver complete and error-free pieces of software that meet business needs, within intervals as short as weeks.
In the traditional way of developing software, a project spans many months or years. A team of analysts tries to get all the requirements from the users. Then, a set of designers create the broad structure of the system. After that, programmers code the system within that structure. Testers then ensure that the code is error-free, and meets the requirements.
The main problem encountered with traditional development is that users themselves are not always clear about their requirements, and requirements often change during the extended time that it takes to create the software. Different people are involved at different stages, and documentation is hardly ever complete, so people in the later stages cannot figure out the thought process of the people in the earlier stages. This results in low quality software as well as low business value.
Customarily, extreme programming involves frequent software deliveries within spans of few weeks. The motivation is to provide fully working software that addresses some critical business need. A change in requirements is accommodated in the next delivery.
Extreme programming, or XP for short, emphasizes quality by writing tests before carrying out the programming. As the software is written, code is reviewed and tested many times a day. The whole software is put together and tested once or even several times a day. This is done in order to ensure that no single part of the software brings the system down.
One of the well-known aspects of extreme programming is pair programming, in which two programmers work together at one computer. Due to this approach, the thought process, designing, and coding that goes into creation of software gets checked immediately. The responsibility of developing any piece of software gets shared.
With this method of development, software starts off with a simple design, and evolves to satisfy additional business needs. The creation of features is avoided until they actually become high priority. The emphasis is on team work to create complete systems, so every team member plays the role of analyst, designer, programmer, and tester every day. There is intense communication within the programming team, as well as between the programmers and the users to whom the software is delivered.
In this programming method, the concept of refactoring is highly emphasized. Refactoring is internal code refinement to give the code a good structure, and make it easier to understand without affecting the output. All the work involved in extreme programming is expected to be done at a sustainable pace without late nights and weekends. This boosts morale and reduces the likelihood of errors.
Extreme programming takes its name from the idea that the positive aspects of how good programmers work are taken to the extreme in order to capitalize on the benefits. This method of development has been quite effective in a number of software systems. As this is still a new methodology, its practices are continuously evolving.