Some common concerns with external development are that the resulting source code will be unusable by anyone in the future, the software will not function as expected, and the quality of the code will not be as expected. The following are some of the ways in which JMB Tech addresses your fears:
Unit tests give you, the customer, the ability to have future control over the code we write for you. With these tests it makes it relatively easy to pick up the code at a later date and know exactly what it is doing. With unit tests, changes are easier to make, cascading effects in the software are detected sooner, and the source code is easier for people to understand.
The acceptance tests are written with you, the customer. This ensures that what JMB Tech is developing during an iteration is exactly the behavior that you desire. Additionally, once the acceptance tests pass, both parties know when the software meets the standards of functionality that were agreed upon. Naturally, since we are all human, bugs will appear that get past both the acceptance tests and unit tests; however, once a bug is identified, tests are written for it, and the tests ensure that the bug will not resurface.
XP mandates that certain things be done during the development process. These include unit tests, acceptance tests, test first programming, and refactoring among others. These disciplines work together in a way that promotes code that is easy to change and enhance later. One of the ideas XP is built on is that things will change, so do not waste time on rigid things, but invest time on tasks that enable this flexibility such as the tests, encapsulation, DRY, etc.
The same things that make the code easy to change also enforce a high level of code quality. Fewer bugs appear when the tests are written before the code. Fewer surprises pop up when a high level of communication with you, the customer, is maintained. Both Unit and Acceptance tests force the design to be as simple, straight forward, easy to manage, and comprehensible as possible while still performing to your expectations.
Code maintenance is all about fixing problems that come up in the field. If a problem does occur, it can be reproduced in the acceptance tests, narrowed down in the unit tests, and then fixed. This multi stage approach allows us to to find a bug and squash it in such a way that we have a high degree of certainty that it is gone, and will never come back.
Extreme Programming Links