Two Heads, One Code: A Guide to Effective Pair Programming

Introduction

Pair programming involves two developers collaborating at a single workstation: one, the "driver," writes the code, while the other, the "navigator," provides real-time review, with roles switching regularly between the pair.

There are various pairing techniques for pair programming. Here are some of the most used ones.

  1. Ping Pong Pairing
    • In Ping Pong Pairing, developers take turns assuming the roles of "driver" and "navigator."
    • The "driver" writes the code while the "navigator" observes, reviews, and suggests improvements.
    • Once a unit of work is completed, they switch roles.
    • This technique promotes a collaborative approach to coding and ensures that both participants are actively engaged in the process.
    • It's often used in Test-Driven Development (TDD), where one developer writes a failing test, and the other developer makes it pass.
  2. Driver/Navigator
    • In Driver/Navigator pairing, developers switch roles on a timed basis, typically every hour.
    • The "driver" is responsible for writing the code, while the "navigator" provides guidance, reviews the code, and helps with problem-solving.
    • This technique ensures that both developers have equal opportunities to contribute and helps prevent fatigue or tunnel vision that can occur with extended periods of coding.
  3. Keyboard and Mouse
    • This technique involves one developer controlling the keyboard and mouse while the other provides guidance or reviews the code.
    • While it can be effective when there's a strong sync between the pair, it's generally not recommended as it can lead to one developer dominating the coding process, limiting the collaborative aspect of pair programming.
  4. Silent Pairing
    • In Silent Pairing, developers work together without verbal communication, relying solely on written communication and code comments.
    • While it may seem efficient, it can lead to misunderstandings or missed opportunities for collaboration.
    • It's not recommended for most pair programming scenarios where effective communication is crucial for success.

Pros and Cons

While Pair programming is extremely useful when understanding is mutual and in sync, there are drawbacks too. Let's look at both, the pros and cons of it.

Pros

  1. Continuous code review boosts quality.
  2. Dual minds enhance problem-solving.
  3. Facilitates knowledge sharing and mentorship.
  4. Fewer interruptions and quicker issue resolution.
  5. Foster's team morale and collaboration.

Cons

  1. Possibility of disagreements or communication challenges.
  2. Increased resource usage with two developers on one task.
  3. Dependence on compatible pairing partners.
  4. Initial productivity may lag as developers adapt.
  5. Not ideal for all tasks or those preferring solo work.

Anti Patterns in Pair Programming

An anti-pattern is a common solution to a recurring problem that initially appears to be beneficial, but ultimately leads to negative consequences. In the context of software development, anti-patterns represent practices or patterns of behavior that are counterproductive or harmful to the development process, code quality, or team dynamics. There are ways to avoid anit pattern in pair programs. Listed below are a few of them.

  • Pinpointing Everything: This refers to excessively criticizing or nitpicking every detail of the code, which can be counterproductive. It's advisable to allow some time for the developer to rectify issues before providing feedback.
  • Intractable Argument: When the pair encounters a disagreement or deadlock, involving a third person or mediator can help facilitate resolution and prevent a prolonged impasse.
  • One Pair Zones Out If one member of the pair becomes disengaged or distracted, it's important to address the issue directly by initiating a conversation to understand and resolve any underlying concerns or distractions.

7 Ways to WIN

On the bright side, here are 7 winning strategies for Pair Programming success.

  • Be willing to lose-listen to another person: Embrace humility and openness to alternative ideas, valuing the input and perspectives of your pair programming partner.
  • Be an encourager: Foster a supportive environment by providing positive reinforcement and motivation, boosting morale and confidence within the pair.
  • Vocalize in layman's words to the other person: Effectively communicate technical concepts in simple language, ensuring mutual understanding and facilitating collaboration.
  • Expect and accept correction: Embrace constructive criticism and feedback from your pair, recognizing it as an opportunity for growth and improvement.
  • Leave space: Respect your partner's autonomy and ideas by allowing them room to contribute and express themselves freely during the pairing session.
  • Allow speed differences - slow/fast coding: Acknowledge and accommodate differences in coding speed and style, ensuring both partners feel comfortable and engaged in the process.
  • Swap driver often: Regularly rotate roles between driver and navigator to promote equal participation, prevent fatigue, and foster a balanced collaboration.

Conclusion

I hope this blog clears the concept of Pair programming that epitomizes collaborative power in software development. Embracing humility, encouragement, and diverse perspectives leads to enhanced productivity, creativity, and code quality. In navigating modern software challenges, let's remember: success isn't just code, but the bonds and solutions we cultivate together. Finally, I am open to discussing any thoughts, or ideas on pair programming.

Thanks for reading.

Next Recommended Reading Getting Started with Extreme Programming