I find pairing up to be incredibly efficient. You are more focused, have a pair of eyes looking over an issue together, have more opportunities for learning, knowledge sharing and (something underrated) make mutual decisions on the why's of certain coding methods. This is kinda like having a code review before bad code is written. Or at least if bad code is written, it's not a single person's responsibility (in theory
:p) At my current office, I do a lot of pairing sessions. Not necessarily out of habit but whenever we're attempting to solve an issue. I feel that part of the problem when working in team situations is dealing with the decisions people make in coding or attempting to understanding why someone does something a certain way. Even if you have coding standards, structuring code and defining algorithms to handle a solution differ tremendously between people. Adding that second pair of eyes at least help lessen the human failure problems.