Customer chooses the most important tasks that can be completed by the next release. Programmers choose tasks, and work in pairs. Programmers write unit tests. Programmers add features to pass unit tests. Programmers integrate code.
Programmers produce a released version.
Customer runs acceptance tests. Version goes into production. Programmers update their estimates based on the amount of work they've done in release cycle. XP programming doesn't embrace this approach for a couple reasons. A large up-front design means that the whole programming team sits down and plans out the entire program before writing code.