Recently at my company we had an internal discussion about pairing after a colleague wrote a similar post espousing all the virtues of pairing. Pairing was something we as a group had once been zealot like in our belief in its value and would we would pair on everything we did. It was clear however from the discussion that most of us had moved on from this view as far too simplistic and dare I say naive.
Looking back at over 7+ years of pairing I still believe there is wide range of value to the practice and it has made me a much better developer but like anything its value varies greatly depending on your context. I've also come to realise there times when it can be wasteful and even destructive.
Innovation is one very good example where I believe there both needs to finely balanced tension between time to work alone and collaborate together. Take a look at the studies around problem solving by groups vs individuals as to why. Similarly, pairing can also have positive and negative effects on learning and varies greatly depending on an individual's learning styles.
The funnest thing came at the end of our discussion. Having collectively realised the folly of our pair programming crusade over all these years one of the group looked back to see what one of its biggest champions Kent Beck had to say on the subject in his book Extreme Programming Explained. Categorically he said that you shouldn't pair all the time.
This is great insight. We paired 3 hours per day for about a year at the company where I work for before realizing that a more flexible approach to pairing was needed. These days we use it as a tool for on-boarding new developers and collaborated on hard problems, but there are no minimum requirements of time. Keeps everybody happy and still encourages working together!