There are a plethora of blog posts about how to Pair Program. Here are a few notes I have made based on my experience pairing full time for the last ~1.5 years.
Look forward to more coming soon about pairing remotely and working remotely!
Pairing is awesome. See, e.g., this blog post. It really only works if you both people are truly involved. Oftentimes, this means slowing down on a concept that may be mindless for you, but requires a little bit of time for your pair to grok. Commit to spending that time.
make sure to switch off drivers
This ought to go without saying, but make sure you remember to do it.
make sure both people know wtf is going on (don't steamroll)
This is the responsibility of the pair, not one individual. If you're not stopping your partner to ask what they are talking about then start. Likewise, make sure to check in frequently with questions like "does this make sense to you" or "do you think this approach is the most effective?"
give each other a chance to try something out
In the "fail early and often" vein, give your pair time to try something out fully. Oftentimes, an idea can be a little difficult to verbally articulate. If one member of the pair needs to write some code to help get an idea out, support them in that. Even if you think/know that this idea will not work, trying an idea that eventually fails gives a better understanding of the overall problem to both members of the pair. Also, if one member doesn't get the chance to try an idea then that person is going to be pissed!
Also, here's a helpful video for more a more advanced technique: