What We Do

Company

Resources

Events

Blog

Free Consultation

ahoy@headway.io

(920) 309 - 5605

5 min
How to Deliver Value During Pair Programming - My Story
Subscribe

How to Deliver Value During Pair Programming - My Story

Raphael Spencer
Developer

When I first started working at Headway, I noticed that some of my pair programming sessions were better than others. At first, this was a mystery to me, but the picture eventually became clear. Through my daily practice of pair programming here at Headway, I made different discoveries and observations which I will share in this post.

I hope my experiences and tips can help you identify issues, make improvements, and find better ways to create value every time you pair with someone on a project.

Act I: Receiving help

Faced with a daunting codebase, and being new to Ruby and Rails, I spent a lot of time asking for help in our Slack channel and doing live pairing sessions. Most of these pairing sessions consisted of jumping to different points in the codebase, exploring what was already there, and trying different patterns until something worked.

It was very effective. It was also completely alien to me.

remote pair programming session at Headway

Up to that point, I programmed like a bricklayer, building up layers of knowledge until I understood the whole thing–and only then, executing a solution. I found myself in different pairing sessions, growing more disoriented with each new open file that appeared in the Vim terminal, grasping at different chunks of code as they whizzed by, wondering when the session would be over so that I could return to the self-study deep-dives that I was used to.

And yet, during other sessions, I experienced a series of quantum leaps, which would have taken me hours to grasp, if going it alone.

Some sessions delivered value to me, and others didn’t—-this was a mystery to me, that I quietly placed in the back of my mind, as I continued my daily work.

Act II: Transitioning to giving help, that I am capable of giving

From time to time, other coworkers would ask me for help. It always made me nervous. Not only was I new to this vast codebase and to Ruby, but I also had to navigate the awkward moments of pair programming.

Such as:

  • Sitting in uncomfortable silence, when I’m out of ideas on what to do next
  • Opening a file, and forgetting why I’m there
  • Temporarily forgetting my Vim keybindings, and thrashing around in the terminal, while my puzzled coworkers watched
  • Constantly losing my train of thought, trying to maintain a conversation and understand code at the same time

pair programming discussion with remote developer

At first, I avoided pair programming. As time passed, I developed my own unique style, and things got easier. I became aware of some personal strengths, which could help the team out in different situations.

For example:

  • Identifying variable and method names, that aren’t what they say they are
  • Refactoring using functional programming and Sandi Metz style composition
  • Asking bricklayer-style questions, double-checking how we got here, and what we’re setting out to build

This was a big moment for me because I finally felt competent with pair programming.

But, just like when receiving help, some sessions were better than others. Even though I was competent while pair programming, I still didn’t enjoy it.

I wondered why, even after contributing to the group using my own unique strengths, I was still missing something, during certain sessions, but not others.

Again, I placed this mystery in the back of my mind, as I continued my daily work.

Act III: Delivering value that the other developer needs

At the time, I was going through a bass guitar tutorial. The tutorial was saying that in addition to having good technique, you need to listen carefully to what the rest of the band members are playing and play certain notes to make them sound even better.

Of the unique skills that I am capable of giving, what does the team actually need, in this specific situation, to be effective?

developer working on rails project

I put myself in my coworker’s shoes, and asked the question, “When this certain developer asks to pair with me, in this certain situation, what is he/she really looking for, and how can I supply that?”

For example:

  • Refactoring current implementation for understanding
  • Applying a computer science algorithm to a messy problem
  • Making sense of, and summarizing, new business logic
  • Finding new ideas
  • Validating the approach they are already taking

And here’s the thing: a person’s needs are different on every pairing session. Different individuals need different things while working on different parts of the project at different times. Part of discovering these needs is a trial-and-error approach: throw different things out there, and see what works. And in order to know if your trial-and-error attempts are working, you can compassionately listen and be fully present during a pairing session, and continually ask yourself “What notes can I play, at this given time, to make us sound awesome?”

Epilogue

So there you go: pairing sessions now go smoothly, deliver tons of value, and are actually fun.

development team meeting in Headway conference room

Conclusions and ways to improve

Pair programming can be viewed as a transaction: the person requesting help needs something, and with your unique talents, you have a way to supply it. Both sides of the transaction have to balance: the other person needs to find value in what you’re giving them, and you need to find value in the process of giving it.

Identify the needs and goals of the session

Identify what, specifically, you or your coworker needs to move forward. Are you stuck on inspiration? Implementation is difficult? Lacking specific domain knowledge? Lacking the “story” of the domain use-case?

Explore new ways of offering solutions

There is an infinity of tools you can use to make a pairing session successful. A “big picture” question might help to clarify the approach. A well-placed “what if” question might prevent a security issue. A simple statement, such as “that’s awesome”, or “I like they way you built this” might provide reinforcement against a difficult problem.

Sometimes, even a measured silence can be helpful: witnessing your coworker struggling through a difficult process, acknowledging their journey, and allowing them the space to discover the solution on their own terms.

Practice awareness

Pay attention to the overall “energy” of the session, whether it’s moving forward, or stagnant. If it’s stagnant, do something different. See if you can develop a sixth-sense when pair programming (certain queues you can listen for or watch for) that will tell you if the things you are providing are actually helping the other person.

Resources for continuous growth

Tuple’s Pair Programming Guide

Tips, tutorials, and resources for thoughtful pair programmers.

Nonviolent Communication by Marshall Rosenberg

Examines “The need behind the request” for any given communication.

The Power of Now by Eckhart Tolle

Explores the idea of becoming aware of the present moment, and appreciate it, instead of mentally trying to figure everything out.

Pair Programming - Mentorship Styles and Techniques for Growth

Learn the pros and cons of pair programming and the mentorship styles and techniques you can use to grow with your team.

Best Practices and Tools for Managing Remote Development Teams

Learn best practices for remote software development teams to more effectively manage and complete projects. These guidelines help ensure that remote meetings, communication, and team projects are productive, even when they happen remotely.

Level Up Your Development Team with Better Agile Retrospectives

One of the best parts about creating great software is getting to collaborate with others. It's also one of the hardest things to get right.


Asking Better Questions About Your Product

Download our free guide to begin implementing feedback loops in your organization.

By filling out this form, you agree to receive marketing emails from Headway.

Scaling products and teams is hard.

In this free video series, learn how the best startup growth teams overcome common challenges and make impact.

Scaling products and teams is hard.

In this free video series, learn how the best startup growth teams overcome common challenges and make impact.

You don’t need developers to launch your startup

In this free video series, learn proven tactics that will impact real business growth.

By filling out this form, you agree to receive marketing emails from Headway.

Make better decisions for your product

Dive deeper into the MoSCoW process to be more effective with your team.

By filling out this form, you agree to receive marketing emails from Headway.

A mindset for startup growth

In this free video series, learn the common mistakes we see and give yourself a greater chance for success.

By filling out this form, you agree to receive marketing emails from Headway.

The ultimate UX audit kit

Everything you need for a killer DIY audit on your product.

  • UX Audit Guide with Checklist
  • UX Audit Template for Figma
  • UX Audit Report Template for Figma

Enjoyed this post?

Other related posts

See all the ways we can help you grow through design, development, marketing, and more.

View All

Listen and learn from anywhere

Listen and learn from anywhere

Listen and learn from anywhere

The Manifest

Level up your skills and develop a startup mindset.
Stay up to date with the latest content from the Headway team.