1. You stay focused
2. Often it turns out that me and my pairing partner are out of sync on either what should be done or how it should be done. And in those cases, often, the truth (for the lack of better term) is in the middle.
3. Doing quality peer code reviews is hard and takes discipline. If you lack it, pair programming is a good shortcut.
4. You get immediately two people owning (or, rather, invested into) the thing. So the effort is less likely to lose steam.
I'm not denying though that there probably are other ways of interaction (async or not) that may still bring these benefits.
EDIT: more things.
5. Having someone in peer code review question what you have been busy with in the last couple of days hits harder, compared to when someone filtering out what you put in the code as you explain your ideas.
6. Bonding.
I've had really great times with a buddy at work, paired up, complementing eachother's skillsets, getting things done, and having a great day at work.
And I've worked with far less agreeable personalities who're always right about everything, in your face, and just plain not enjoyable to be around for any extended period of time.
That's probably the biggest takeaway from pair programming for me. With someone good? Have a wonderful time accomplishing a lot. With someone bad? Have a stressful time... maybe accomplish something.
7: Learning. I never learned - or taught - as much about programming as when I was pairing. Everyone has their clever little tricks they've come up with, and spreading them around as problems come up is wonderful.
"Your First Pairing Session" – https://tuple.app/pair-programming-guide/your-first-pairing-...
If you just put two normal programmers in front of a computer with a programming task, you're more likely to end up with two annoyed people than great teamwork and code. At least at first.
I’ve been in this industry for 40 years. It hasn’t happened yet.
Similar to testing I suppose.
No idea how the math works out in the end, I assume it'd be highly variable based on the product being built and the people involved.
So, like many things, it is a tool that should be used when you feel it helps. For example, API design can be done well in pairs, where the code quality has a big impact later on, and then the functionality implemented individually. It also is a great tool to speed up your onboarding process and get new devs giving useful feedback from day 1 and being highly productive within a week or 2.
With out powers combined it saved about a half work day once a week easy.
Ymmv but i feel pair programming is a function of individual knowledge base and communication
For me, a big part of this is that rubber ducking seems to really work well for me as well as some of my coworkers, but although I actually have a duck at my desk (more of a gag), I could never actually use it -- in an open space office, I just can't help but feel like an idiot while discussing the codebase with a toy ;-)
Of course, a big upside to a coworker playing the duck part (aside from them not being as stoic and giving me valuable feedback) is that this practice automatically familiarizes more people with a given piece of code, which is also never a bad idea.
Each workstation had two chairs, a large iMac in the middle, and the developers had an individual macbook/kb/mouse on each side.
The code was on the middle machine, and either kb/mouse could control it. They also were using software named Teleport(?) that let you seamlessly interact with both the main iMac and your own laptop. I don't remember exactly what it did, maybe let you drag files between the two computers or something.
I got to pair-program with them on assorted real world tasks that week, a different employee each day. I was generally impressed with the workflow. There was basically zero downtime in terms of progress. I can easily them imagining at least getting a 2x productivity boost, but I'd imagine it was more like 2.5x or more.
Sheepishly, what I didn't like about it was that I'm the kind of person that likes to get a lot done and then work on my own stuff on the job, or have the freedom to surf HN when I'm ahead of schedule, and that was kind of impossible there without your teammate knowing it. :)
But I will say it was very stimulating and fun. The other developers were really nice and fun to talk to. I work remotely, but I would certainly consider that arrangement if I were to get a desk job again.
It's better than the sort of office job where you're languishing on your own and nobody has a firm grasp of what exactly you're even working on in precise terms. I've been there before and it's incredibly stressful when you fall behind pace and your work performance starts to suffer. I feel like pair-programming eliminates that kind of thing.
I have a hard time seeing why this would work. On the other hand, it's more or less a hand over of knowledge for the system, so in that sense all the negative effects are might be zeroed. I've got this feeling that knowledge hand over is the biggest problem in the industry.
I would really hate to have to do pair programming but I'm not totally convinced it's all bad for the company/product. Maybe one day a week to spread the knowledge?
EDIT: The song is nice. A bit to specific topic to be funny though.
I do fully understand that it's not for everyone!
For some reason my boss was mentioning that we should do pair programming (they don't program). There's only a handful of devs. Nothing really happening. Personally I prefer asynchronous interaction, so I've been pushing for code review. But two of my coworkers started pair programming & both seemed to think it helped work through their issues. I've personally fallen into what might be called "pair programming" when pairing with a coworker who doesn't know how to program but knows all the business logic for a task
How are people pair programming? Does it work better when it happens organically? Does it change how much time you spend printf debugging?