RailsConf 2018

Pairing: a guide to fruitful collaboration ๐Ÿ“๐Ÿ‘๐Ÿ

Pairing: a guide to fruitful collaboration ๐Ÿ“๐Ÿ‘๐Ÿ

by Andrรฉ Arko

The video titled "Pairing: a guide to fruitful collaboration" presented by Andrรฉ Arko at RailsConf 2018 delves into the practice of pair programming, a collaborative approach where two developers work on the same task at the same time. Arko highlights the benefits of pairing as a means of enhancing problem-solving, communication, and code quality while also recognizing the misconceptions and challenges that developers may face when pairing.

Key Points Discussed:

- Definition of Pairing: Arko emphasizes that there is no universally accepted definition of pairing and that experiences can vary widely among developers. The simplest form involves two developers working on one machine.

- Benefits of Pairing:

- It enhances problem-solving capabilities, as two minds working together can produce better solutions.

- Pair programming can lead to high-quality code through real-time code review and feedback.

- It fosters communication and collaboration, akin to a productive meeting.

- Challenges in Pairing:

- One common issue is the risk of one person dominating the session, leaving the other feeling sidelined.

- Another challenge is the psychological pressure inexperienced developers may feel when paired with seasoned developers.

- Establishing Trust: Trust and good faith between partners are essential for successful pairing. Each developer should feel safe to communicate openly without fear of judgment.

- Strategies for Pairing:

- Setting clear roles (driver and navigator) can help streamline the process.

- Establishing mutual goals, such as learning and completing the task, is crucial.

- Communicating throughout the session to ensure both partners are engaged and contributing effectively.

- Pairing Dynamics:

- Pairing with peers allows for the exchange of tips and knowledge.

- Pairing with less experienced developers requires patience and encouragement to help them grow, while pairing with more experienced developers should focus on mutual learning.

- A supportive environment, where both parties engage equally, is essential for productive collaborations.

Conclusion: The talk concludes with the message that pair programming is not merely about writing code together but about building interpersonal relationships and collaborative problem-solving skills. Arko encourages developers to adopt pairing as an integral part of their workflow to enhance not just their coding capabilities but also their professional relationships and growth.

00:00:11 Okay, guess it's about time. Can you all hear me? I can hear myself, but okay.
00:00:24 Cool! Great! Awesome. So, let's get started. This talk is called 'Pairing: A Guide to Fruitful Collaboration ๐Ÿ“๐Ÿ‘๐Ÿ'.
00:00:40 I just saw on my way in that they didn't get the emoji onto the sign, and I'm so upset! I did hear that I managed to break the proposal website by submitting a talk with emoji in the title, though, so I've got that going for me.
00:01:01 Now, back to pairing. This is kind of an evergreen programming topic, right? You talk to developers, and while some say pairing is great, others might say they tried it and it was actually horrible.
00:01:15 There's a broad spectrum of responses to pairing. Some developers have great experiences pairing with peers, where everyone is on the same page and has a similar level of knowledge.
00:01:30 Then you might pair with someone who's fresh out of boot camp, and you feel lost. Another common pairing situation involves sitting down with someone who's already super familiar with a topic you're not, leading to a frustrating experience.
00:01:47 This talk is really about how to avoid those frustrating situations and make pairing a fruitful experience regardless of experience level. Pairing can be a valuable tool in your professional toolbox.
00:02:13 So let's talk about how to make pairing a more flexible, useful, and valuable tool in your programming arsenal.
00:02:28 Real quick, I am Andrรฉ Arko. I am involved in internet things and co-authored the third edition of 'The Ruby Way', a book about Ruby.
00:02:40 I founded Ruby Together, a nonprofit that helps fund development work on Bundler and RubyGems. It's the first initiative where developers and companies contribute to a nonprofit, which then funds open-source development.
00:03:03 I've also been the lead developer of Bundler since around 2012.
00:03:13 For my day job, I am a consultant at Cloud City, focusing on architecture. For about five years, my job has involved joining engineering teams and working on architecture decisions while pairing with the existing team.
00:03:36 Much of what I'll discuss comes directly from mistakes I've made over the years, which you can avoid learning from them.
00:03:50 Even if you're convinced pairing is beneficial, it doesn't come with definitions or instructions. What is pairing? Asking ten different developers yields ten different, sometimes non-overlapping answers.
00:04:04 For this talk, we will start with the simplest definition: working with another developer on a single machine. Even if you have two screens, keyboards, and mice, you're still collaborating on the same machine.
00:04:40 If you've never had a good pairing experience, you might wonder why developers would only work from one machine. It might sound boring, but in a good pairing session, that's not how it turns out.
00:05:00 Ultimately, programming isn't just about typing and coding; it's about solving problems. Pairing with someone else often leads to a better problem-solving process.
00:05:19 Multiple people working together can create a solution, just like in meetings or brainstorming sessions. While pair programming can become a 'meeting-like' experience, the natural collaboration can yield positive results.
00:05:36 In an ideal pairing situation, both parties should work towards combining their experiences to prevent bugs and support one another, making programming a constructive social experience.
00:06:01 Having someone beside you motivates you to elevate your coding standards. When there's another person around, it's harder to justify bad habits.
00:06:22 Pair programming offers lots of benefits akin to code reviews, but with real-time feedback and high-bandwidth communication, which minimizes misunderstandings and clarifies confusion.
00:06:41 In a pair, if one partner notices the other has fallen down a rabbit hole in their logic, it allows for a collaborative reset and a shift in perspective.
00:07:00 Actively exchanging ideas with your partner ensures that both sides can vocalize their frustrations while supporting one another, ultimately leading to better solutions.
00:07:17 In a positive pairing experience, you preempt the bugs from both your experiences. A strong relationship with your pair encourages you to strive for better performance.
00:07:37 While pair programming has many advantages, it can also present challenges similar to meetings.
00:07:47 Common problems arise when one person tends to take control and dominate the project, making the other feel unengaged.
00:08:03 Itโ€™s also possible to work with someone ideologically rigid, which can lead to arguments and negate the benefits of collaboration.
00:08:29 Pairing with someone more experienced than you can feel like an endless performance review, creating pressure and anxiety.
00:08:43 That kind of pressure can lead to negative consequences, causing you to doubt your own skills and contributions.
00:09:01 The purpose of this talk is to help you maximize the benefits of pairing while minimizing its pitfalls. It will not happen overnight; it takes practice and effort.
00:09:14 Pairing should be a skill you continually refine, and it can lead to one of your most fulfilling programming experiences.
00:09:34 The most basic requirement for successful pairing is mutual trust. Both partners need to be able to work together in good faith.
00:10:02 Itโ€™s essential to avoid pairing with someone who is condescending or disparaging, as that can destroy the pairing experience.
00:10:23 Assuming you find a supportive partner, let's dive into various pairing scenarios: pairing with peers, less experienced developers, and more experienced developers.
00:10:49 When pairing with peers, it's a chance to swap tips, gain insights, and build a shared understanding of the work, leading to a more enjoyable experience.
00:11:09 Good pairing relies on consent and communication from both partners. Staying on the same page ensures both can contribute effectively.
00:11:29 Before starting, clarify technical aspects: which computer, operating system, editor, and shell to use. These agreements are vital for a smooth pairing experience.
00:11:48 Ideally, set up a dedicated pairing station where both partners can share the same context and understanding of the tools.
00:12:08 Jumping into a personal machine filled with numerous aliases and configurations can create awkwardness. It's essential to establish shared configurations.
00:12:31 When pairing remotely, ensure that the person typing has their screen shared. This allows for immediate feedback, much like in-person pairing.
00:12:50 To improve remote pairing, switch hosts whenever roles change. This helps maintain engagement and effectiveness.
00:13:06 Use the pairing session to clarify the problem at hand. Before writing code, ensure both participants agree on the issue they are tackling.
00:13:31 Make it a practice to articulate the problem thoroughly before jumping into coding, which can prevent missteps later.
00:14:02 Establish guidelines on roles: who types and who navigates the discussion about what is happening while working.
00:14:25 These roles are often referred to as the driver and navigator, where one person is focused on coding and the other maintains a broader perspective.
00:14:41 Incorporating test-driven development into your pairing can provide a structured approach, where one partner writes tests and the other implements them.
00:15:06 Being mindful of the urge to take control is crucial. When that urge arises, the experience can quickly shift from genuine pairing to an unequal dynamic.
00:15:25 A sound pairing experience requires maintaining the learning and collaborative nature of the interaction; otherwise, meaningful engagement is lost.
00:15:43 A wise approach is to allow everyone a chance to participate. Ensuring both people learn and grow equally is the primary goal.
00:16:03 Trust and collaboration can deteriorate quickly when either party feels overwhelmed by control or expectations.
00:16:21 With experienced partners, it's vital to keep communication clear. Establishing agreements should be flexible and align with both partners' comfort levels.
00:16:40 This could even involve timed shifts in roles every few minutes to promote engagement and participation.
00:16:56 Being in sync on roles allows productive partnership and fosters a supportive environment for learning.
00:17:10 When pairing with someone more experienced, it's an opportunity to understand problem-solving techniques and new ideas.
00:17:36 The most significant pitfall when pairing with a more experienced developer is feeling inadequate. However, you must fight that feeling.
00:17:55 Both partners should strive to ensure that the experience helps elevate your skills. Contributions are valuable, regardless of perceived knowledge level.
00:18:09 Ask questions when unfamiliar terms or processes arise. Your active participation is vital in transforming the session into a cooperative exercise.
00:18:26 Having more experience doesn't mean they're the ultimate authority; itโ€™s still essential to engage in a collaborative effort.
00:18:43 In situations where you're paired with someone with less experience, itโ€™s an opportunity to actively help them learn.
00:19:01 This can help you refine your own understanding, as often you might need to articulate thoughts and concepts clearly.
00:19:21 Before starting, establish cooperative, non-judgmental ground rules to ensure a productive environment.
00:19:43 Remind your partner that computers are challenging, and it's perfectly normal for everyone to feel uncertain sometimes.
00:20:05 Wait patiently when they pause, offering suggestions without rushing to take control. Encourage them to engage actively.
00:20:21 Create an environment that is as frictionless as possible, minimizing pressure to act quickly.
00:20:36 Your own comfort is essential in ensuring a smooth pairing experience. This can be achieved through careful management of your impulses.
00:20:54 Ultimately, this process is a chance to elevate your understanding and enhance your collaborative skills.
00:21:12 Clear communication is critical both in programming and while pairing with someone less experienced.
00:21:29 In summary, programming is inherently collaborative; recognizing pairing as a social process can help you connect better with stakeholders.
00:21:48 To close, remember that fostering effective collaboration requires all parties to remain engaged, supportive, and willing to learn from each other.
00:22:11 Finally, throughout this process, do not forget the importance of mutual respect and communication to foster an inclusive environment.
00:22:28 Thank you for joining me in this discussion on pairing, and keep these insights in mind for your future collaborative efforts!