> All code to be sent into production is created by two people working together > at a single computer. — <http://www.extremeprogramming.org/rules/pair.html> Recently I read [The Only Person I’ll Pair Program with is my Cat by Patrick A. Brown][cat-programming] and it stirred up some thoughts that got too long for a tweeted response. So I'm capturing my own feelings on the practice here. I don't enjoy the practice of pair programming as it is defined above. It's taken me a long time to be able to admit that because there is evidence that pair programming is faster and produces higher quality results,<sup>[[1]][pairprog-hannay-ist09]</sup> and that most people enjoy it.<sup>[[2]][XPSardinia]</sup> Going against this evidence makes me feel like I'm a bad programmer, or that I'm not doing my job well. For me (full-time) pairing takes the fun out of my job. It may be argued that I'm not employed to have fun but you can be damn sure that if spending half my waking hours a day in your employ I'm going to want it to be enjoyable. I'm not some resource that solely exists to extract maximum efficiency out of in order to further other people's goals. I'm a person with my own goals that is **expending a great deal of my life** in other people's employ so that I may live, and have a fun and fulfilling life. When pairing full time, or most of the time: * I get tired and drained: * As a bit of an introvert, I find extended periods of pairing extremely draining. I don't think introversion is really factored in when the XP crew advocate for full-time pair programming. * I lose any chance of achieving a [flow state][flow]. * Tools and technology are diluted to the lowest common denominator: * I have invested countless hours learning, [configuring][dotfiles], and mastering powerful tools like [Neovim], [zsh], and [my operating system][arch-linux], which I'd like to be able to use. * I miss the satisfaction of working on and solving a problem myself. * I am generally less satisfied and enthusiastic about work. To be clear I'm not advocating for never working with a fellow developer or a complete lack of collaboration within your team. I'm stating that I don't like the practice of requiring or pressuring people to work as a pair for all or the bulk of their time. Also, pairing is the practice when two people of similar skill level work together. If there is a disparity in skill level then it's mentoring, which is a totally different thing. To me, "working together at a single computer", is a tool in your tool belt like any other that you use when it makes sense. Trying to solve a particularly complex problem? Work with someone on it. Been [stuck for a little while, enlist some help][15-minute-rule]. When the time is right for collaborating on a problem it is a skill like any other that can be improved and honed. [Ellie Meredith gave a great talk at the Melbourne Ruby meetup in August][aemeredith-pair-effectively] on some tips that contribute to effective pairing. These tips can help improve your effectiveness, and enjoyment when it's the right tool for the job. If you love pairing full time, great, but keep in mind that not everyone feels the same way. If you don't really enjoy paring full-time, rest assured you're not alone. Look after yourself, hone your skills and pair when it makes sense. [cat-programming]: https://medium.com/@patrickabrown/the-only-person-ill-pair-program-with-is-my-cat-86da6fb4da3d [pairprog-hannay-ist09]: http://www.idi.ntnu.no/grupper/su/publ/ebse/R11-pairprog-hannay-ist09.pdf [XPSardinia]: https://collaboration.csc.ncsu.edu/laurie/Papers/XPSardinia.PDF [aemeredith-pair-effectively]: https://speakerdeck.com/aemeredith/two-heads-are-better-than-one [flow]: https://en.wikipedia.org/wiki/Flow_(psychology) [Neovim]: https://neovim.io/ [zsh]: http://www.zsh.org/ [arch-linux]: https://www.archlinux.org/ [dotfiles]: https://github.com/wezm/dotfiles [15-minute-rule]: https://blog.intercom.com/15-minute-rule/