RubyConf 2021

Problem Solving Through Pair Programming

Problem Solving Through Pair Programming

by Emily Harber

In the video "Problem Solving Through Pair Programming," Emily Harber discusses the value of pair programming as both an effective coding technique and a mentoring strategy. Harber, a developer at Shopify, shares her personal experiences and insights gained from her time as a mentee and now as a mentor. She emphasizes that pair programming is a powerful tool for onboarding new developers, enhancing learning, and improving code quality. Harber outlines how pair programming provides opportunities for real-time feedback, communication, and the sharing of expertise, which fosters confidence in mentees and strengthens the mentor-mentee relationship.

Key Points Discussed:

- Introduction to Pair Programming:

- Harber introduces herself and her motivation for discussing pair programming, recognizing the audience's interest in improving their practices.

  • Personal Experience:

    • Harber recounts her journey from a boot camp graduate to a developer at Shopify, highlighting how pair programming was integral to her learning process.
  • Socratic Method in Teaching:

    • The value of encouraging dialogue through the Socratic method, where mentors guide mentees to find answers rather than giving direct solutions, is discussed as crucial for learning.
  • Building Trust:

    • Establishing trust in the mentorship relationship is critical, allowing mentees to feel comfortable asking questions and engaging in problem-solving.
  • Feedback Loop:

    • Providing regular feedback is emphasized as an essential part of pair programming sessions, helping both mentors and mentees improve collaboratively.
  • Role Reversal:

    • As mentees gain confidence, they should have opportunities to take on mentor roles, enhancing their learning where they can teach their mentors something new.
  • Logistical Practices for Remote Pairing:

    • Techniques for effective remote pair programming are shared, including scheduling regular sessions, using tools like Google Meet and Slack, and structuring time for breaks and feedback.
  • Accessibility Considerations:

    • Harber addresses the importance of incorporating accessibility into pair programming practices to accommodate all team members' needs, encouraging open communication about accessibility in prior to sessions.

Conclusions:

- Pair programming is beneficial not only for onboarding new developers but is applicable across all levels of technical experience.

- It fosters a collaborative environment where learning, teaching, and creating high-quality code occurs simultaneously, reinforcing that two heads truly are better than one.

- Harber concludes by encouraging attendees to embrace pair programming as a means to promote growth, learning, and higher-quality software development across their teams.

00:00:10.400 Good morning, everyone! Thank you for coming to my talk. This is my first in-person talk at a conference that’s not pre-recorded. So, if I have any hiccups along the way, thank you for bearing with me. I’m assuming that most of you are here because you’re interested in pair programming. Either you're already pair programming and want to improve your habits, or you want to incorporate more pair programming into your mentorship practices.
00:00:26.080 I am very excited to share my personal experiences with pair programming, and I hope to send you home feeling more excited about pairing with your mentees and colleagues. You’ll gain tools, tips, and tricks to improve your pairing sessions, making them more productive, educational, and even fun.
00:00:50.000 So, first of all, who am I and why should you care what I have to say about pair programming and mentorship? My name is Emily Harber, but some people call me Emmy or Pixie. My pronouns are they/them and she/her.
00:01:00.640 I am a semi self-taught boot camp graduate, and I graduated in early 2020. Since then, I have been a developer at Shopify, working on the Docs and API Libraries team. I've worked on interesting projects such as our TypeScript and Ruby libraries, and our developer documentation site, which recently had a nice refresh. If you haven’t checked it out yet, I highly recommend it.
00:01:33.040 More recently, I transitioned into providing mentorship for an intern, and it’s been an excellent teaching and learning opportunity for me, as I have been able to pair with her in that capacity. Now, how did I become interested in pair programming? During my boot camp, I spent a lot of time pairing with technical coaches who taught primarily using the Socratic method.
00:01:59.600 If you're unfamiliar, the Socratic method involves opening a dialogue through leading questions instead of providing direct answers. This approach helps students come to their own conclusions and solutions. I appreciated this technique because it mirrored real-world scenarios: how we work on code and solve problems, rather than simply spoon-feeding answers.
00:02:32.000 About four months after graduating from the program, I was hired as a developer at Shopify, which has a culture that heavily emphasizes pair programming. From the start, it was encouraged during my onboarding sessions.
00:02:50.000 When I joined my team, I was paired with a senior developer appointed as my official mentor. He became my go-to person on Slack for questions, silly or serious. Whenever I had coding questions, he offered to jump on a call so we could pair together. He guided me, just as my technical coaches did in boot camp.
00:03:06.400 Eventually, we were assigned to the same project, and we began pairing more frequently because there were times I felt stuck or needed an experienced perspective on my work. That pairing process became a regular part of how we completed work, and through it, I benefitted from his expertise.
00:03:44.240 I learned to communicate about technical concepts better, grew more confident in my ability to navigate the codebase, and became comfortable with it much faster than I would have otherwise. After a few weeks of consistent pairing, something surprising happened. One day, he reached out to me on Slack, asking for my help on an issue.
00:04:01.920 It shocked me to be asked for my opinion by someone with years of experience! Of course, I said yes, we hopped on a call, tried different approaches, and ultimately found a better solution together. This collaboration happened more frequently, and we realized we had naturally transitioned to a peer relationship rather than a mentor-mentee one.
00:04:27.760 From then on, I began pairing more often with others on my team, and eventually transitioned into being a mentor myself. I carried this practice into my mentoring approach. I received great feedback from my mentee about how supported she felt during her onboarding process and internship, leading to her eventual full-time position on our team.
00:04:56.800 This brings us to the central theme of my talk: pair programming as a form of mentorship. Many people view mentorship as simply sitting down for a conversation once or twice a week, or month, and sometimes treating it like a career-focused therapy session. While personal rapport is vital, there’s immense value in working closely with a more experienced developer to solve complex and interesting problems.
00:05:30.640 Through pair programming, you provide your mentee an opportunity to build confidence with your guidance, practice communicating about technical concepts, and explore areas they're less familiar with. Conversely, as a mentor, you share your expertise and knowledge in real-time, supporting your mentee in a more tangible manner than with weekly conversations.
00:06:02.640 The benefits of this process extend to the mentor, as well. Your mentee will likely teach you something new, regardless of where they are in their career. Remember that everyone knows something you don’t, which opens the door for role reversals in your interactions.
00:06:28.480 This knowledge transfer during pair programming happens in both directions. As a mentor, this offers you a chance to re-solidify your understanding of concepts by viewing them from a new perspective, while your mentee feels supported in their growth and learning.
00:06:56.960 I like this quote from Farhan, who advocates strongly for pair programming and has given many talks on the subject: "Pairing is about more than just programming." So, why incorporate pair programming into your mentorship practice? A good first step is shifting your mental model of mentorship to align with what mentorship truly aims to achieve, which is building trust between both parties.
00:07:35.040 As a mentor, you want to create a comfortable space for your mentee, making it easy for them to approach you with any questions, no matter how silly they might seem. Show your mentee there are no stupid questions, and create an environment where it’s okay to ask for help—it’s the first step to building trust.
00:08:07.120 Everything about communication in this context needs to be intentional, especially in our current remote-focused world. As we work with colleagues from a distance, becoming accustomed to the virtual collaboration environment is crucial. The pair programming practice naturally maintains open lines of communication and creates a constant connection between you and your mentee.
00:08:35.680 Pair programming is a high-contact way to build trust quickly. Regular contact through pair programming sessions promotes open communication. If you engage in daily collaboration, you'll naturally become more comfortable with each other. Your mentee will gain confidence while having you there to support them.
00:09:06.480 Additionally, through the pairing sessions, your mentee will observe how you work in real-time, making mistakes and exploring your development environment together. This transparency can be incredibly humanizing for someone early in their career who might feel pressure to be perfect.
00:09:36.960 Pairing can also help establish healthy work habits. The routine you develop can include professional development and code reviews, allowing you to instill good practices like taking breaks and maintaining focus.
00:10:04.080 Not all mentorship relationships happen during onboarding or with early career developers, but there is still immense value in pairing, even with more experienced colleagues. For example, mentoring someone who's mid-level and aiming to become a senior engineer involves tackling increasingly complex concepts where pairing can be beneficial.
00:10:24.000 We’ve covered a lot about the advantages of pair programming. Now, let’s talk about how we can implement this practice effectively, especially in a remote setting. Start by making pairing a regular part of your schedule. Use calendars to coordinate with your mentee and build a routine around these sessions.
00:10:56.160 Pair as often as your schedules allow; for some, that might mean a few hours each week, while others can pair for hours a day. Whatever it looks like for you, establishing a consistent schedule is essential. If you set an hour for a pairing session, use that time efficiently and try to stick to it.
00:11:30.240 You might find it tempting to extend sessions if the focus is good, but without a plan for that extra time you might find it challenging to continue without a solid plan. For longer sessions, consider using tools like the Pomodoro technique to structure work and break times.
00:12:00.960 As you set up these sessions, allow for a five-minute buffer at the beginning and end to communicate the requirements and scope of what you’ll be working on, as well as to provide feedback. Feedback is one of the most valuable gifts you can give to colleagues; don’t skip this step.
00:12:33.760 Providing feedback could be verbal or written, sharing how the session went—whether it’s about pacing, ideas shared, or areas for improvement. Regardless of how you do it, clear communication is vital.
00:12:55.520 It’s also crucial to understand the distinct roles during pair programming sessions. Typically, one person drives—the one typing and implementing what you’re working on—while the other navigates, understanding the requirements and guiding the implementation process.
00:13:12.880 As a mentor, your role will often be to navigate the tasks or issues, helping keep your pair focused. Breaking down the problem into manageable tasks helps ensure clarity and direction throughout the pairing session. Tools like Kanban boards or GitHub project boards can assist with organizing the work.
00:13:42.080 The driver, typically the mentee, will spend the session actively coding. As a mentor, your job will be to support them through technical decisions while advocating for open dialogue and discussion about implementation.
00:14:00.480 Feedback is crucial during this process, much like a live code review. Encourage open discussion, reflecting on what decisions have been made throughout the session. The continual feedback loop elevates the quality of the coding output.
00:14:29.440 As your mentee becomes more comfortable and experienced, encourage role switches during your pairing. Both roles—driving and navigating—build confidence and competence for more successful collaboration.
00:14:59.680 Let's also touch on tools and accessibility considerations for remote pairing. Many tools, from GitHub to Trello to Zoom and Slack, can enhance your pairing experience, each with its strengths and weaknesses. My favorites include Google Meet or Slack for quick chats and screen sharing.
00:15:28.800 However, for more interactive sessions, tools like Tuple, which allows multiple cursors and live collaboration, are hard to beat. Other tools like Google Docs are great for collaborative design discussions.
00:15:59.680 While discussing tools, it’s important to address accessibility in pair programming. Different individuals may have unique accessibility needs, including the requirement for closed captioning or various communication methods.
00:16:29.120 Before pairing, always ask your colleagues about their accessibility needs and concerns. This proactive step not only promotes awareness but also makes it comfortable for team members to disclose their needs.
00:16:56.000 My personal experience has shown me the importance of adjusting setups according to different accessibility needs. Making small but crucial adjustments ensures inclusivity not just in pair programming but throughout our entire workflow.
00:17:19.520 The adjustments you make to accommodate someone’s access needs parallel considerations for taking breaks or understanding knowledge levels in a given space. Doing so fosters a collaborative, communicative environment where everyone can be productive.
00:17:49.600 As we wrap up, you should now have a solid understanding of the how and why of pair programming, especially in the context of mentorship. However, remember that the value of pair programming extends beyond just mentorship or onboarding.
00:18:05.760 Pair programming is applicable at all career stages. The collaboration and context-sharing benefits are universal, significantly enhancing the quality and speed of development work.
00:18:25.600 As you advance in your career, the importance of pairing will only increase with the complexity of the problems you're likely to face. Eventually, you will hit the limits of what you can accomplish alone, so leveraging a partner for varied perspectives will be incredibly beneficial.
00:18:47.600 In summary, you should pair more often—both with your mentees, mentors, and colleagues. Hopefully, now you feel more confident regarding when, why, and how to do that effectively.
00:19:09.040 Thank you so much for being here! You can find me online as the CodePixie. That’s my handle everywhere. Stay safe, take care, and remember to always pair!
00:19:27.840 Now, I believe we have some time for questions, so if anyone has any, feel free to ask!
00:19:35.040 Yes, to repeat your question for the recording, you were asking about the timing for giving feedback—whether it should happen immediately or after a buffer for comfort. The answer can vary from person to person. Some may prefer immediate feedback, while others might need time to process it.
00:20:19.200 Indeed, it’s important to establish open communication about preferences for feedback during your pairing sessions. As for modeling feedback, consistently providing positive feedback is key. Use your one-on-ones to also invite constructive feedback and showcase the feedback loop effectively.
00:20:53.040 If someone is feeling shy or less vocal, one approach is to ask open-ended questions rather than yes/no questions. Keep the conversation open to encourage expression and ensure they feel involved. It may also be helpful to build some casual conversation into your pair programming sessions.
00:21:17.840 As we approach the end of our time, I’d like to emphasize that maintaining comfort through good communication and a friendly atmosphere will yield the best pairing experiences.
00:21:37.680 Thank you all for your excellent questions! Feel free to chat with me further about pair programming, mentorship, or any other topics of interest. Your engagement means a lot!