In PairProgrammingMisconceptions Martin Fowler makes some very good points and I agree with everything that he writes. However, I think that there is an important point that he has not mentioned: what are the alternatives?
In traditional software engineering projects, there has been widespread use of peer review (design reviews, code inspections, code walkthroughs etc.) as a means of improving code quality. Pair Programming provides a more efficient means of reviewing both design decisions and code.
Over the last few years I’ve noticed a tendency in many organisations to dispense with code reviews without replacing them with anything, let alone pair programming. If developers don’t think that anyone else will have to read their code, code quality in terms of defect density and ease of maintenance will suffer.