Extreme Programming is one of the earliest agile methodologies that came into existence and is continuously evolving. Kent Beck, who evolved Extreme Programming, developed it with the premise to use best programming practices and take them to the extreme.
Extreme Programming in the current scenario focuses on the best practices that are prevailing in the industry as of now and takes them to the extreme. The most prevalent examples are Test Driven Development, Whole Team Approach, Sustainable Pace, etc.
One of the reasons Extreme Programming is so popular is its flexible nature. Further, Extreme Programming is more about technique than process and hence merges well with the process-centric approaches. So, you can easily combine features of extreme programming with other ideas, wherever
Some of the Extreme Programming practices are complimentary in the process.
Extreme Programming by itself is not suitable for implementation.
However, remember that any of the Extreme Programming Practices that you choose should be implemented to its core. Otherwise, you cannot claim that you are using Extreme Programming.
In fact, this is true for any process that you take up. Mix-and-match is allowed, but only when you are using complimentary features and you are not compromising on the values of the features being used.
The most popular Extreme Programming hybrid that is currently in use is Scrum + Extreme Programming hybrid. We will start with the basic and still prevalent Software Development Methodology – Waterfall Model.
In Waterfall model, the development progresses in phases and no phase can begin before the completion of the earlier phase.
Waterfall Model is still in use in several organizations though some perceive it as a traditional methodology. It is an established and effective methodology if the requirements are completely known before the development starts. The process is straightforward and does not require any training or mentoring.
What you need to remember is that no methodology is ideal for every situation and every methodology will have its own merits and demerits. Hence, you have to understand which methodology suits your context, your environment and your customer interests.
Let us have a look at the shortcomings of the Waterfall methodology −
As all the requirements are to be known before the initiation of development, it is not suitable when the requirements are incomplete or vague.
As the methodology is forward facing in one direction, feedback from any phase cannot be taken back into any of the earlier phases, though more clarity is obtained regarding the end product.
Testing is taken up only after the completion of development, with a team of developers who were not involved in the earlier phases, such as requirements gathering or development. This test-last approach often leads to defect containment, high defect rates, high delivered defects that are uncovered by the customer.
The working product will not be available till the end of development and hence nobody will have a clue on whether the right thing is being built though it is being developed rightly.
Defect fixes and changes to the requirements are difficult to be absorbed as there is a high chance of breaking the design and also the costs incurred are high.
If you predict such conditions in your development, the Agile methodologies are the most suited.
Agile Methodologies advocate −
Frequent releases of working product increments, enabling feedback to flow in at right time.
Team-centric approach to make everyone responsible and accountable for the end product.
Flexible planning that focuses on the delivery of value to the customer, meeting customer expectations, return on investment.
Readiness to accept changes at any point of development so that the end product that is delivered is not obsolete.
Several Agile methodologies came into existence, of which Scrum has become more popular and is being widely used.
In Scrum, projects are broken down into releases and time-boxed short sprints. For every sprint, you will take up only the required and sufficient functionality that is prioritized by the customer and that you can deliver in a sprint. At the end of each Sprint, you will have a working product that could be released.
The requirements are called backlog items, the iterations are called sprints. Continuous Testing with test-first approach will be adapted. The developers and the testers also participate in the user story writing which are the backlog items. This gives an upfront view of the product’s behavior to everyone in the team and also helps in arriving at the acceptance criteria at the beginning of the sprint itself.
Scrum, by its definition, again as we stated earlier, is effective in certain situations, but has its own shortcomings as with any other development methodologies.
The time-boxed sprints will not allow any flexibility in the release schedule that hampers both development and testing.
Scrum, on its own do not give directions for development.
Hence, Scrum is usually combined with other Agile methodologies that focus more on the development strategies.
Scrum is being used quite frequently incorporating Extreme Programming practices that are complimentary, with Extreme Programming focusing on the engineering aspects such as continuous communication, frequent feedback loops, refactoring, collective ownership, continuous integration, test-driven development, etc. and scrum focusing on the fixed scope for sprints, burn-down charts, etc.
As Scrum is a defined methodology, it is easier to adapt from day-one of the project.
As Extreme Programming is more towards communication and team cohesion, the team is more focused on the development.
Thus, a Scrum + Extreme Programming hybrid is found to be effective.
Tools such as SpiraTeam and Rapise are meant for Scrum + Extreme Programming Hybrid Projects.SpiraTeam provides reporting dashboards of key project quality and progress indicators in one consolidated view that is tailor-made for Scrum and Extreme Programming projects.
Some of the indicators are −
Rapise tool is a test automation solution that can be integrated fully into your development process and that be adapted to your changing needs. You can use it for testing desktop, web and mobile applications. This tool can be used by developers, testers and business users to generate acceptance tests.