The mutual focus is definitely a big part. You're in a social context, and there is no place to stray from the mutual task, and that discipline is very liberating, weird as it may sound, for someone prone to procrastinating like myself.
The mutual focus is definitely a big part. You're in a social context, and there is no place to stray from the mutual task, and that discipline is very liberating, weird as it may sound, for someone prone to procrastinating like myself.
Aren't these pre-requisites to all work? How does working alone solve them?
The thing that's often overlooked is that pair programming is a skill, and you need to learn it to do it well. Just putting two novice pair programmers at a computer and asking them to "just do it" will usually result in a lot of frustration.
I was fortunate to be pairing with a lot of seasoned pros in my first time.
i don't think pair programming necessarily means typing 100% of the time. I get a ton of value in tackling a very ill-defined task with another member of my team, especially in the design / architecture phase where I find that a lot of engineers tend to over-think and over-engineer a task.
i don't want to discount your experience tho - i def. have moments where i absolutely do not want to pair, but i do think it's a practice that is super context (team) sensitive
sometimes that means bucking the rules of whatever the methodology prescribes and doing what works for your team.
for example: xp people tend to suggest frequent pair rotations in order to spread knowledge (faster?). I know half my team, though advocates of pair programming, would be pretty unhappy with that given the costs of context switching.
maybe some people will point at that and say we're not really pair programming /shrug
What I've found pair programming useful for is tooling and workflow.
When working that closely you'll notice when they hit a few keys and are suddenly in the right file, and you go "wait, what did you just do?" and they tell you about this great new Vim plugin.
Inversely, they start doing something really manual and you can say "hey, I do this a lot do I wrote this utility script that automates it"
I know a bunch of people who hate their jobs and would feel pretty bad if someone would supervise them 40h a week, even if they may perform better under such supervision.