Extreme Programming (XP) emphasizes customer satisfaction, flexibility, and rapid delivery of high-quality software.
It promotes frequent releases in short development cycles, which improves productivity and introduces checkpoints at which new customer requirements can be adopted.
Developers work together in pairs and as a group, with simple design and obsessively tested code, improving the design continually to keep it always just right for the current needs.
Pair programming is a collaborative technique where two developers share one workstation. One developer, the "driver", writes code, while the other, the "observer", reviews each line in real time, offering suggestions and improving the design continuously.
Roles are switched frequently, ensuring both developers stay engaged and contribute equally to the codebase. This continuous feedback loop leads to higher code quality and shared understanding.
Developers can also collaborate in larger groups using Ensemble (also known as mob programming), where the entire team works together on the same codebase at the same time.
In an ensemble session, one developer (the "typist") operates the keyboard, while another (the "navigator") directs what should be coded next. The rest of the team (the "mob") observes, discusses, and provides feedback, rotating roles regularly to ensure active participation and shared understanding.
Developers work solo for routine tasks, but pair programming and ensemble are the default modes of operation for XP teams.
These practices promote collaboration, knowledge sharing, and immediate feedback, leading to higher quality code and fewer defects.
Test-Driven Development
Simple design and obsessively tested code drive the development of the production code in an XP team.
Developers capture lower-level specifications of the behavior of internal system components with clear and communicative tests, which are written before the production code itself.
Continuous Integration and Continuous Delivery (CI/CD) practices ensure that new features are regularly integrated into the Product, allowing for swift feedback and adaptation.
Automated build scripts are used to run tests and provide immediate feedback to developers about the status of their code changes.