Agile is considered as just a framework or guideline for “light weight” development methodologies. There are many methodologies that fall under the agile framework. [i] To determine if a particular project is suited to a specific agile methodology, it is important review the characteristics of each methodology. Extreme Programing is one of the earlier “lightweight” programming methodologies considered when developing the agile framework.[ii] Extreme Programming relies on continuously releasing iterations of working software to the customer. It also focuses on small teams to perform the development. Furthermore, it relies on continuous feedback from the customer. All of these characteristics match the framework described in the Agile Manifesto.[iii], [iv] Extreme Programming has a unique composite of processes and tools that are used in the development of software.
Extreme Programming meets the Agile methodology framework. One Agile characteristic it utilizes is its iterative releases. Extreme Programming relies on short one to two week releases of functioning software. These short releases allow the customer to provide continuous feedback as the software is released.[v] [vi] With the short iterations and continuous feedback, developers are better able adjust to any changes in the business environment. With retrieval of continuous feedback, Extreme Programming, like the other Agile programs, require close constant communication with the customer and continuous customer participation in the process.
Image retrieved from http://www.extremeprogramming.org/map/project.html
Constant customer participation and communication is a very important aspect of the agile framework that Extreme Programming fully adheres to. The utilization of the customer’s participation is utilized throughout the phases of Extreme Programming.[vii] During the “planning phase,” one way Extreme Programming teams implement customer participation and communication is by acquiring user stories from the customers. User stories used in Extreme Programming replaced the bulkier requirements documentation obtained in the traditional methods.[viii] Having the customer explain the features they want at the beginning of each iteration, in as few as three sentences, keeps the customers involved and keeps them aware of the status of the project. Furthermore, along with the user stories, negotiation of what features will actually be included in each iteration is important to the planning phase of Extreme Programming. The negotiation activity is important because it helps establish better understanding and more realistic expectations between the development team and client. When realistic expectations are established, they are more likely to be met, which in turn leads to high customer satisfaction. Another way Extreme Programming utilizes communication with the customer is through obtaining continuous feedback during testing. Acceptance testing is one of the major activities where the customer is heavily involved. It provides the customer opportunity to provide the development team with real world scenarios in which to test the product against and verify that the functionalities in selected user story for a particular iteration was properly met.[ix] While continuous feedback from the customer is crucial to the success of Extreme Programming, another aspect that is important is team dynamics.
Team dynamics is a very important aspect of the agile framework and is implemented well with in the Extreme Programming methodology. Job rotation is a key aspect of Extreme Programming. It allows team members to learn different skill sets and prevents one team member from becoming so crucial to the project that it would result in failure if they were to leave. One way Extreme Programming teams have implemented job rations is through the paired programming setup. Paired programming has a team size of two, and are each assigned a functionality or a piece of code to work on for an iteration. On a daily or weekly basis, many teams have one member of each pair rotate to another pairing. One person is kept stationary on particular functionality to keep continuity, while the rotating member is able to acquire some knowledge on each piece of code being worked on.[x]
The iterative scheduling, close customer interaction, team dynamics and other characteristics all contribute to the makeup of the values of Extreme Programming which have been categorized as, “simplicity, communication, feedback and courage.”[xi] Simplicity relates to the small iterations and continuous improvement to the code. Nagy Ramadan Darwish said in his paper, Improving the Quality of Applying eXtreme Programming (XP) Approach, “XP encourages starting with the simplest solution” because “A simple design always takes less time to finish than a complex one.” Refactoring is an important part of Extreme Programming’s simplicity value. It strives to continuously simplify code, so that it is easier to maintain and reuse code.[xii] Feedback and communication relates back to both the continuous communication with the customer and the team dynamics. For communication with customers, it is important to get their perspective through use of user stories and continuous feedback. In Šimičić Martina master’s thesis, Managing Agile Software Development Projects: Best Practices and Project Management Tools, Martina says, “The main goal is to give to developers the same view as customers have.” [xiii] If a customer sees a change in the business environment, through constant communication with the customer, the developers will also be able to see the change. Within teams, communication can be seen in the use of paired programming because paired programming is designed to share knowledge of code pieces with multiple members. Also Extreme Programming encourages shared ownership and open work spaces to facilitate the free flow of ideas. A unique aspect of communication in Extreme Programming is the standup meetings. They allow communication to the entire team in a very efficient manner, without the risk of entering into long drawn out discussions that are not relevant to the entire team because no one wants to be standing up for a long period of time. Courage on the other hand relates to the ability of the developers to make tough decisions and have the confidence to change code as they see necessary.[xiv] This relates to decisions related to refactoring and the willingness to remove code already created in the pursuit of making a better product.[xv] Examining the characteristics and values behind Extreme Programming; which characteristics are most important to contributing to success?
Researchers have found that team dynamics and customer contribution in planning were the most important aspects to the performance of an Extreme Programming team. Research by Stephen Wood, George Michaelides, and Chris Thomson concluded in their research paper, Successful Extreme Programming: Fidelity to the Methodology or Good Team Working?, that “It has shown that two key elements of the XP methodology– customer planning and its specific protocols for teamwork –are important to its success.” In their study, they developed 9 hypothesis and used a method called “method of multiple hypothesis.” They conducted these test on graduate and undergraduate software engineering teams that were assigned to develop software for either the university or commercial interests. The dependent variable, performance, was measured through feedback from the instructors, the client and the team members themselves. Each evaluator filled out a questionnaire on each team/individual, designed on the evaluator’s perspective of the project. Through the study, researchers found that there was a positive correlation between “XP-specific - team factors (continuous integration, coding standards, and collective code ownership)” and performance. Another factor that had a positive correlation with performance was “customer planning (release planning/planning game, customer access, short releases, and stand-up meeting).” While team factors and customer planning had a positive correlation with performance, foundation related activities such as testing, paired programming and refactoring, had a negative correlation with performance. Therefore, it was concluded based on the variables of the study, that foundation activities may have been creating “barriers to producing high quality products.” Even with the results found in this one study, the results may not necessarily apply to your team. It is important to experiment and use the tools and processes that work best with your team.[xvi]
Extreme programming utilizes many unique processes and tools to implement the agile methodology. Agile has been a successfully implemented at many companies. When implementing Extreme Programming, it is important to focus on have short iterations, constant customer communication and small teams that are designed to allow for job rotation. Even though processes like refactoring, testing and paired programming were shown to have a negative effect in one research conducted, it important to implement the tools, processes and methodologies that work best for your team. Many teams choose to use combination of multiple agile methodologies.
[i] Ambily O. A., Dr. T. Judeth Malliga. Agile Software Development an Approach to Light Weight from Heavy Weight. International Journal of Engineering Science and Technology, 399-405
[iii] Wooda, S., George Michaelides, G. , Thomson, C. Successful extreme programming: Fidelity to the methodology or good teamworking? Information and Software Technology vol. 55, 2013, 660-672
[iv] Darwish, Nagy Ramadan. Improving the Quality of Applying eXtreme Programming (XP) Approach. International Journal of Computer Science and Information Security,vol. 9, No.11, 2011, 16-22
[v] Wells,Don. Extreme Programming.org. (1999) Retrieved from http://www.extremeprogramming.org/rules/releaseoften.html
[vi] Beck, K., "Embracing change with extreme programming," Computer , vol.32, no.10, pp.70,77, Oct 1999
[vii] Darwish, Nagy Ramadan. Improving the Quality of Applying eXtreme Programming (XP) Approach. International Journal of Computer Science and Information Security,vol. 9, No.11, 2011, 16-22
[viii] Copeland, Lee. Extreme Programming. Computer World Inc. 2001. Retrieved from http://www.computerworld.com/s/article/66192/Extreme_Programming?taxonomyId=11&pageNumber=1
[ix] Wells, Don. Extreme Programming.org. (1999) Retrieved from http://www.extremeprogramming.org/rules/functionaltests.html
[x] Wells, Don. Extreme Programming.org. (1999) Retrieved from http://www.extremeprogramming.org/rules/movepeople.html
[xii] Usha, K., poonguzhali, A Quantitative Model for Improving the Effectiveness of the Software Development Process using Refactoring. International Journal of Recent Trends in Engineering, Vol 2, No. 2, (November 2009.) 222-224
[xiii] Martina, Šimičić. Managing Agile Software Development Projects: Best Practices and Project Management Tools. (2013) Retrieved from http://agile-only.com/master-thesis/software-dm/agile-s-dm/c-of-am-
[xiv] Darwish, Nagy Ramadan. Improving the Quality of Applying eXtreme Programming (XP) Approach. International Journal of Computer Science and Information Security,vol. 9, No.11, 2011, 16-22
[xvi] Wooda, S., George Michaelides, G. , Thomson, C. Successful Extreme Programming: Fidelity to the Methodology or Good Teamworking? Information and Software Technology vol. 55, 2013, 660-672