However, XP does not emphasize design enough and it overemphasizes testing. In the same way that unit testing is much cheaper than fixing bugs after production is under way, good design fixes bugs even more cheaply by making them so self-evident that we recognize them and fix them even earlier. I think XP is a great leap forward. Rather than jump on the XP bandwagon in a cult-like way, perhaps we ought to think more critically and try to refine it into something more robust. Another aspect of XP in need of refinement is the pair programming idea.
Pair programming is great, but it is a means to an end.
It facilitates communication and sharing of design ideas, which is essential to coding activity. Pair programming isn't absolutely necessary at all times to accomplish this goal. It is most important when programmers aren't used to working with one another and need to learn how to communicate design ideas effectively in code. It is certainly conceivable that some developers are effective at writing expressive code that others can understand without the crutch of pair programming. Pair programming is an excellent suggestion, but the XP literature should focus more on the underlying philosophy and recognize that there are different mechanisms for executing that philosophy.