00:00:16.760
My name is Joe Moore and I've pair programmed for almost thirteen and a half years, almost every single working day.
00:00:23.199
For the last four years, I've been pair programming remotely, using remote pair programming full-time.
00:00:30.759
During those thirteen years, I've worked for Pivotal Labs, which is an agile software development consultancy, and I work remotely from Atlanta.
00:00:38.399
For those of you who didn't hear this, I would love feedback at bitly.com/programmingAMA. It's totally anonymous.
00:00:44.640
For the people who just walked in, there's a microphone here and a microphone over there.
00:00:50.559
If you have questions, it would be great if you could make your way to one of them and start queuing up while I talk about some other stuff.
00:00:56.520
Otherwise, I'm going to grab these mics and run around, doing a bit of a Mori, maybe.
00:01:01.920
So again, thank you to everybody for coming here. Who is at least somewhat familiar with pair programming?
00:01:09.080
I'm going to estimate that it's about 80 to 90%. That's great!
00:01:15.960
For those of you who don't know, pair programming is a software development technique where two programmers work on the same code at the same time, solving the same problem on the same computer.
00:01:27.640
You can also apply the word remote to that, using some remote collaboration software, like video chat, audio chat, screen sharing, and so on.
00:01:40.079
So what are the benefits of pair programming? I could have slides and slides and slides, but I'll just give you a few. Benefits include having a continuous code review, cross-training junior developers and those who are more experienced, and reducing the number of bugs because you have two pairs of eyes on the same work. Having differing opinions can raise what I call the team's highest common denominator, leading to great outcomes.
00:02:03.960
Generally, as most of us know, two heads are better than one when solving hard problems.
00:02:16.080
What are the challenges of pair programming? It can be very exhausting, and personality conflicts can arise when individuals don't get along. It is definitely one of the most challenging software development practices to implement, both from a social point of view and from the perspective of selling it to management.
00:02:40.440
It's not just double the money and twice the time; it also requires dedication to be effective.
00:02:55.599
I want to address one of the top-three questions right now: when do you decide to take breaks? The answer is simple—take a break whenever you need to.
00:03:11.960
It's important to remember that you're working together as people. If you've been going for an hour or more, it's definitely time to take a break—stretch your legs, play some ping pong, or use the facilities—whatever helps you recharge.
00:03:30.879
Pair programming is an intense discipline, and managing your energy levels is super important.
00:03:42.640
With that said, feel free to ask me anything. Who's got a question over here?
00:04:06.720
There's a question about how one team finds pairing tends to slow things down by maybe 50 to 100%, and they even use it for hard tasks but skimp on it otherwise.
00:04:21.199
I think empirical evidence has shown that in controlled environments, pair programming can slow down accomplishment of tasks by about 15% on average, which is not as drastic as 50 to 100%. There are other payoffs to consider, such as improved code quality, and focusing on the ultimate goal could reveal the long-term benefits of pairing.
00:04:56.199
Identifying the root causes of slowdowns is crucial, since it might not be just pairing that's causing it.
00:05:02.639
I also appreciate the point about balancing the workload when working with junior developers, especially to avoid the inefficiencies caused by having the pairing imbalanced.
00:05:24.000
At our company, we tend to evaluate tasks on a scale and pair for those that need it most. Once we've identified value in more complex tasks, it might be easier to incorporate pair programming in those areas.
00:05:41.480
Managing stakeholder expectations is also important, and being open to retrospectives can reveal both challenges and opportunities for improvement.
00:06:00.840
Pair programming dynamics can be complex, and understanding the spectrum from junior to senior developers can guide better pairing practices. It’s about building empathy and transferring knowledge during the pairing sessions.
00:06:15.680
Different tools should not dictate pairing arrangements; instead, general adaptability and communication should guide the way. If you have differing preferences for editors like Vim or Sublime, strive for common ground to facilitate smoother collaboration.
00:06:32.760
Integrating people across disciplines, including QA engineers, can enhance collaboration and lead to better overall product quality.
00:06:52.560
Remember, effective pair programming always revolves around building trust, being patient with each other, and valuing open dialogue.
00:07:02.960
Managing experiences while supporting junior developers is critical. Encourage growth rather than feeling like you have to take over every time.
00:07:10.760
Tools can also enhance pair programming experiences. Using timers, or pairing with a specific structure like ping pong pairing helps maintain engagement and ensure balanced participation.
00:07:23.760
Getting feedback from peers also assists in developing better pair programming habits.
00:07:33.360
With good communication, team dynamics can thrive as developers become more comfortable sharing the keyboard while testing each other's skills.
00:07:46.080
Overall, it’s about finding balance between guiding others and allowing them to explore solutions on their own.
00:08:01.950
Thank you all for your questions and enthusiasm. Remember to keep practicing pair programming!