(XP) is one of the flexible software development methodologies. The authors of the methodology are Kent Beck, Ward Cunningham, Martin Fowler and others.
"Extreme Programming Explained" describes extreme programming as a web-development discipline that organizes people to produce higher-quality applications more productively.
Our world is too uncertain and unpredictable to rely on permanency. The same happens with web and software development. It’s very hard to say that the final features of web product have been known ahead of time. Usually, the customers change their ideas: they constantly want to improve something, to redesign something, and delete some features totally. This is the changeableness of the requirements, that everyone is so afraid of. Fortunately, a person has the ability to predict possible events and keep the situation under control.
In extreme programming, planning is an integral part of the development process. At the beginning of this activity the fact, that plans can be changed, is taken into account. Planning game is the point of support, that allows to predict the situation and implement the changes without serious consequences.
Planning game has its members and its goals. The keyman is the customer. He tells about the features for functionality. Programmers give the estimates for these tasks. The main point of the planning game is the goal unity and common work of customer and developers. In the case of goals achievement everyone wins, otherwise, everyone loses. At the same time, every player goes to the achievement by his own way. The customer chooses the most important tasks according to the budget, and the developers estimate it according to their work opportunities.
Extreme programming means that developers are able to set up timeframes during they will cope with their issues. And they decide who will work with one task, who will work with another one.
The release plan defines the release dates and user definitions that will be implemented in each of them. On these bases, developers can choose the definition for the next iteration. During the iteration, tests are designed and are held during this period to provide proper application work. The plan can be revised in case of a significant slippage or outrunning during one of the iterations.
Iterations make the development process dynamic. Programmers do not need to plan their program tasks for a long time ahead. It is better to have a meeting at the beginning of each iteration to discuss the development plan. Developers do not need to implement, what have not been planned. Employees will still have time to realize these ideas when they reach the time according to the plan of releases.
Having got, tasks are sorted in order of importance for the customer. Moreover, bugs also became issues for the next iteration. Tasks are recorded on cards that form a detailed iteration plan. The solution takes from one to three days. Issues require less than one day can be grouped together, and large tasks divided into several smaller ones. It is very important for the developer to properly determine the time of the task solution.
Simple design always takes less time than complex one. Therefore, always do the simplest things that can only work. It's always faster and cheaper to replace complex code at once before you’ve spent a lot of time working with it. Keep things as simple as possible without adding functionality before it's scheduled.
Whole team, Onsite customer
The main problem of web development is the lack of knowledge. Developers aren’t familiar with customer industry and product specific. Extreme programming has found a way out of this case. It is not an internship for the developer at the customer's enterprise, otherwise, he does not want to develop the app. This is the customer's participation in the programming process.
Some of the development team are doubtful for the involvement of customers into the development process. Actually, customers are different. If there is no possibility to work with a client or his representative, the decision can be to hire a specialist in the field under development. It increases the programming efficiency and helps to create the product that customer want. Financially it can be profitable because the developer’s rate is higher than the salary of experts in different branches.
Customer writes the User Story . User Story is a description of how the web application should work. Each User Story is written on the card and represents some piece of app functionality. It’s something like user behavior scenario, but a story is not limited to a user interface. Developers write the functional tests to implement the story correctly.
Testing (a classical definition:) is a rather boring process. Typically, a company hires a tester, who periodically carries on the same actions and waits for the day when there will be an opportunity to change the work.
In extreme programming, the testing process is more interesting. Actually, in the beginning, there is a test, and then the code. How can we test what is not there? The answer is simple. Test the thoughts, what to expect from a future piece of the application or functionality. This will allow understanding what developers need to do and test the code as soon as it is written. Nevertheless, the test may not work. According to the extreme development the test tests the code, and the code tests the test. As experience shows this approach speeds up the development process.
Changing the position
During the next iteration, all web developers should be moved to other parts of work. Such movements are necessary to avoid lack of knowledge.
Collective code ownership
Collective code ownership encourages developers to submit ideas for all parts of the project, not just for their modules. Any developer can modify any code to extend functionality and fix bugs.
On the one hand, it looks like chaos. However, taking into account that tests allow you to check the correctness of the changes, it has sense. Collective code ownership greatly simplifies the implementation of the changes and reduces the risk.
Let’s imagine, you belong to the team that has been working on this project for a long time. People come and go. No one encodes alone and the code belongs to everyone. Developers will delete or modify the duplicate code, analyze and improve other people's code parts, etc. In time, it will be impossible to say who is the author of a particular code.
Therefore, everyone must obey the general coding standards like formatting code, naming classes, variables, constants, comment style. So, it means that all team members must agree on common coding standards. No matter what. Everyone obeys the rules.
Developers should integrate and release their parts of code every few hours. In any case, they can never keep the changes for more than one day. Everyone should work with the latest version of the product. Committing changes several times a day, programmers reduce the integration issues. Integration is like a proverb "pay now or later pay more."
Sustainable pace, Forty-hour week
A person, especially a programmer, is able to work very hard to achieve goals. He stays at work, goes to work on weekends, gives up leave, does not sleep for a few days, sitting at the keyboard ... But extreme programming is against such self-sacrifice.
But the main point is a person needs to have a rest in order to maintain health and work capacity. The eight-hour working day and the five-day working week are established for reasons of maximum productivity. In many firms, late get of work is considered as poor progress or inability to properly control working time. In most cases this. According to a medical point of view, work delays cause constant tiredness, irritability and a decrease of brain activity.
The main idea of extreme programming is predictability and minimization of development costs. Providing the customer with the product that he wants to receive, this methodology increases communication skills and promotes in-service training of the developers.