I agree with most of this. In my experience, pair programming is very useful as an occasional tool for transferring knowledge (i.e., when one developer knows a lot about something another developer needs to know a lot about). Other than that, I'm really not sure how much more valuable it is than a healthy code review process. That's not to say developers shouldn't huddle around a whiteboard or ask for a few minutes to talk or work through a problem. But nonstop pairing, every day? No, thanks.