Your submission was sent successfully! Close

Thank you for signing up for our newsletter!
In these regular emails you will find the latest updates from Canonical and upcoming events where you can meet our team.Close

Thank you for contacting our team. We will be in touch shortly.Close

  1. Blog
  2. Article

Aaryan Porwal
on 16 June 2024

Pair Programming: The Ubuntu Way


At our core, we believe in Ubuntu: “I am what I am because of who we all are.” This philosophy of interconnectedness is woven into everything we do, including how we approach software development. This belief in our interconnectedness extends to how we build software. Pair programming, a practice where two developers work side-by-side, isn’t just a reflection of our values—it’s a powerful driver of quality, innovation, and team cohesion. Industry research consistently backs this up, showing that pair programming leads to fewer bugs, faster knowledge sharing, and ultimately, better products.

Understanding Concerns

We recognise that some developers may approach pair programming with reservations. Perhaps you’re concerned about a loss of autonomy, the potential for interpersonal friction, or feeling held back by your partner’s pace. These are all valid considerations, and we want to address them head-on.

Autonomy: You still own your ideas. Pairing doesn’t stifle your creativity—it amplifies it. Two minds brainstorming together often spark better solutions.

Conflict: Healthy disagreements drive innovation. Pair programming turns conflict into a tool for refining ideas and tackling challenges head-on. It’s all about crafting the best product.

Pace: It might feel slow at first, but pairing slashes debugging time and reduces errors. The initial investment speeds up complex tasks, making the whole process more efficient.

Two Heads Are Better Than One

Pair programming significantly enhances our daily productivity. It sharpens our focus by minimising distractions and establishing an immediate feedback loop. Acting as a live code review, it helps catch errors instantly, resulting in cleaner and more maintainable code. Additionally, pair programming accelerates learning, enabling us to quickly grasp new languages, tools, and techniques. It boosts motivation, encouraging us to undertake ambitious projects and conquer challenges we might avoid individually. Plus, it’s enjoyable, fostering stronger connections with colleagues and making work more enjoyable.

However, pair programming also requires a degree of vulnerability. It demands that we open up our thought processes and work habits to another person, which can be intimidating. This vulnerability is crucial, though, as it fosters an environment of trust and continuous improvement. By exposing our mistakes and uncertainties, we create opportunities for growth and collaboration, ultimately leading to better outcomes for both individuals and the team as a whole.

“Vulnerability is the birthplace of Innovation, Creativity and Change”

Brené Brown

Here’s How To Make It Work:

  1. Roles: The driver focuses on translating thoughts into code. The navigator acts as a real-time reviewer, offering suggestions, catching errors, and ensuring the bigger picture isn’t lost. Switch roles frequently to keep both minds sharp (e.g., every 25 minutes).
  2. Pairing Up: Don’t force it. Find a partner organically, based on shared project interests or a desire to learn.
  3. Prioritising Communication: Open and transparent communication is paramount. Explain your logic, ask questions, challenge assumptions, and share your insights freely. Remember, we are stronger together, and our collective wisdom is greater than the sum of its parts.
  4. Hitting a Wall? If you encounter a roadblock, take a break, step back, and talk it through. Often, simply articulating the problem aloud can lead to a solution. Lean on each other and seek guidance.

Different Skill Levels in Pair Programming

Pair programming often involves collaborators with varying levels of experience, which can lead to misunderstandings about each person’s contributions or frustrations due to differences in pace. Here’s how to navigate these challenges:

  1. When Your Pair Has More Experience: Don’t assume they know best. Their need to explain their approach might bring new insights. Asking questions about the how and why can lead to fruitful discussions and better solutions.
  2. When Your Pair Has Less Experience: Don’t assume they can’t contribute much. Their fresh perspective might help you find a better solution. Explaining concepts to them is also a great way to test and solidify your own understanding.

Pair Programming Tools

When it comes to pair programming tools, there’s a wide variety to suit your needs, whether you prefer open-source or proprietary solutions.

  1. For video conferencing, open-source options like Jitsi and proprietary platforms like Google Meet or Zoom are excellent choices. These platforms allow seamless communication and screen sharing, which are essential for effective pair programming.
  2. For collaborative coding, Visual Studio Code’s Live Share feature is particularly impressive. With Live Share, your collaborator can see the full context of your workspace in their own editor. This eliminates the need for them to clone your repository or install any dependencies, making the collaboration process smooth and efficient. Similarly, JetBrains offers the “Code With Me” feature, which provides a comparable experience within their suite of IDEs.
  3. For those who prefer a more lightweight and simple setup, consider using an SSH + tmux combination. This method allows for real-time collaborative coding without the overhead of a full IDE. For a detailed guide on setting this up, check out Ham Vocke’s blog, which provides a step-by-step walkthrough.

Join The Movement

Pair programming embodies the philosophy of community and collaboration. Working together, programmers can celebrate successes, troubleshoot challenges, and learn from each other in real-time.

It’s more than a technique; it’s a cultural shift that mirrors the open-source ethos, where collective intelligence drives innovation. As the Ubuntu community continues to champion inclusivity and collaboration, embracing pair programming is a natural progression.

Let’s foster a culture where code is co-created, knowledge is shared, and the joy of programming is amplified through the power of partnership. Together, we can build not only better software but also a stronger, more vibrant community. This is the Ubuntu way, and it’s time to extend it to the heart of our development practices.

Further Readings

  1. Cockburn, A., & Williams, L. (2000). The costs and benefits of pair programming.
  2. Williams, L., Kessler, R. R., Cunningham, W., & Jeffries, R. (2000). Strengthening the case for pair programming. IEEE Software, 17(4), 19-25.
  3. Lui, K. M., & Chan, K. C. C. (2006). Pair programming productivity: Novice–novice vs. expert–expert. International Journal of Human-Computer Studies, 64(9), 915-925.