Customers write functional tests for the stories in an iteration. These tests should also all run, although practically speaking, sometimes a business decision must be made comparing the cost of shipping a known defect and the cost of delay. The design of the system is evolved through transformations of the existing design that keep all the tests running. Pair programming . Continuous integration .
New code is integrated with the current system after no more than a few hours.
When integrating, the system is built from scratch and all tests must pass or the changes are discarded. Collective ownership . Every programmer improves any code anywhere in the system at any time if they see the opportunity. On-site customer . A customer sits with the team full-time.