# Extreme programming **[Extreme programming](https://en.wikipedia.org/wiki/Extreme_programming)** is a software development methodology that takes proven practices and pushes them to their logical extreme. If testing is good, test everything via [[swe:test-driven-development]]. If code review is good, review code continuously via pair programming. Code review after the fact catches some bugs but leaves many untested corners. Developers resist reviews as overhead, so many practices skip them. Pair programming, [[swe:ci-cd]], and [[swe:test-driven-development]] are inconvenient upfront but catch problems immediately rather than deferring them to integration. The defining practices are pair programming for continuous review, [[swe:test-driven-development]] for correctness, frequent integration, small releases, refactoring with test support, simple design, collective ownership, sustainable pace, and on-site customer availability. These practices reinforce each other and collectively produce higher quality than any single practice alone.