Remote Product Development: When Programming Remotely, Don't Go It Alone
This article is part of a multi-part series on remote digital product development. As a fully-distributed organization since 2016, DockYard’s experienced teams of project managers, designers, and engineers have learned a lot about how to seamlessly collaborate across disciplines and time zones.
There’s a lot of uncertainty when transitioning your development teams to remote work. One tried and true method I’ve practiced in my 12 years of remote product development is “pair programming” to maintain team cohesion, velocity, and vitality. Pioneered in physical office workspaces, digital tools and online culture have caught up and it is not as difficult as you might expect to execute pair programming with distributed teams.
If you’re not familiar with pair programming, it goes like this:
Collaborate via video and screen sharing
Two or more people start a session. This can be a simple video call with screen sharing or it can include using one of the many code editors that allow simultaneous editing. It’s best to let the team decide for themselves what works for them.
Be sure to check that the setup meets your company’s IT privacy and security standards. If your company is moving to remote, they’ve probably already decided the primary video communication tool. If you’re exploring new tools, VSCode and the Atom editors are free options that offer a great pairing experience through extensions. The development communities are constantly innovating and the software is quite stable and user-friendly.
Designate roles and responsibilities
Once the session is started, one developer is designated as the “Driver.” They are the one who will be doing the typing. Their focus is usually on the more immediate concerns, constantly verbalizing their thoughts while typing. The other programming partner is called the “Navigator.” Their role is to actively listen and then communicate as decisions are being made. The Navigator generally has the luxury of thinking about larger issues, such as scope, edge cases, coding style, bugs, etc., and has the ability to queue up the next step of work.
There will often be moments of negotiation that require the Navigator and Driver to switch roles. Switching roles is very important. Like any conversation, you need to give everyone the chance to speak. When switching roles, code is committed, pushed to source control, and pulled by the new Driver — off they go.
The Day to Day
This is where things get interesting. You’re now effectively managing half the people for a good portion of the project. This has cascading effects in both sprint planning and in keeping WIPs low, which leads to a tighter focus and lower risk. Task assignment becomes easier and richer when working with pairs, especially for remote teams who don’t have the opportunity to meet in-person.
Instead of narrowly focusing on who can get a particular task done right, and in the appropriate time frame, you can consider many other factors. Does a team member need more experience in this type of task? Pair them with a mentor. Does one programmer have the right skills, while the other has greater context? Problem solved — pair them together.
Just remember, pairing does have its limits. People need breaks and opportunities to do deep solitary work in addition to completing the non-coding responsibilities of their job. All that communicating can be exhausting — eight hours a day of pairing is unrealistic and can be counterproductive. Be sure to rotate pairs often to maximize the benefits to the team.
Speaking of benefits, pair programming offers a variety of cultural, skills, and efficiency benefits, including:
- Opportunity for continuous learning: With pair programming, senior team members can serve as active mentors and enhance team communication, while simultaneously enabling junior team members to hone their skills. This is especially important for distributed teams that want to nurture more junior programmers, but struggle to be hands-on. Establishing a culture of continuous feedback and learning can create a top-notch team no matter the distance.
- Exposure to more diverse perspectives: When done effectively, pairing breaks down silos and gives everyone the opportunity to drive, to give and receive feedback, and to be exposed to a more diverse set of perspectives, genders, skills, and temperaments.
- Seamless onboarding: Pairing also enables faster onboarding of new hires by helping them to more efficiently learn a project, the business value of certain features/processes, and the company culture.
- Enhanced knowledge sharing: With pair programming, important knowledge can be transmitted to a wider group of people, in turn, reducing dependency on a few key team members. Similarly, pairing can also make it easier to identify knowledge gaps or bad culture fits.
- Greater collaboration and communication: Pair programming introduces faster feedback loops in just about every aspect of the “soft skills” needed to be a professional in modern development. Team cohesion grows as everyone shares stresses and victories day by day. The load of technical management gradually gets dispersed over the team and interpersonal dynamics to the fore.
- Built-in code reviews: By iteratively reviewing code, pull requests become sanity checks more than anything — especially when the pair is led by senior members.
- Consistent team coding style: With frequent team rotations, a singular coding style emerges to become the “team’s code” and not an individual’s. People feel more confident changing code almost anywhere.
So, where do you go from here?
The most important way to effectively implement pair programming is to gain team buy-in. Pair programming works best when everyone believes in its merits. It can help to ease into it by starting gradually — work in pairs once or twice a week and then hold retrospectives and follow up on the feedback. As processes work themselves out, increase to daily pairing as it makes sense.
Emotional security is extremely important to high-functioning teams, so make it a priority to let everyone know this approach is as much for their happiness and professional development as it is to enhance productivity.
Before proposing pair programming to your team, do research to ensure your success. There are a ton of tools, tips, and methods you can find online. There is so much great research available, but two resources are particularly valuable in helping to implement pair programming:
- The first is a powerhouse of a dissertation by Laurie Williams called, The Collaborative Software Process.
- The second, The Effectiveness of Pair Programming: A Meta-Analysis, extracts and correlates findings across many studies. Very valuable.
DockYard is a digital product agency offering custom software, mobile, and web application development consulting. We provide exceptional professional services in strategy, user experience, design, and full stack engineering using Ember.js, React.js, Ruby, and Elixir. With a nationwide staff, we’ve got consultants in key markets across the United States, including San Francisco, Los Angeles, Denver, Chicago, Austin, New York, and Boston.