On our team we do a lot of what we call “pair programming”. Many of you may be familiar with this term already, but for those who aren't, pair programming typically involves sitting in a room together and tackling a particular problem or feature, often for a day or more. However, since our office is temporarily closed for safety reasons we’ve had to learn to adapt our practices. During a recent retrospective the team collected some of what has worked for us for remote teamwork since the start of quarantine.
Most of these tips and techniques can be applied to any kind of work, not just writing code! They are geared toward two people working together rather than a full team or larger meeting.
Note that many can be applied to working with another person more generally, but we found that every challenge that comes with 1-on-1 work in person is magnified when doing so remotely and therefore worth highlighting.
One final message before we begin: all of this data is qualitative, with a small sample size. By bringing this post to the community we hope to expand that and create a list that more closely represents universal trends.
We’ll start off with the benefits of pairing on work.
The biggest reason we pair on tasks is the classic adage: “two heads are better than one.” It’s true! When two people are working on something together it is delivered more polished and complete than one person working alone, thanks to real-time review and quality-control. The people involved also report that they come out with a better understanding of the final product.
When more than one person is working on a subject this also furthers the dissemination of understanding across the team. Leaving one person to work on a particular problem means that only one person truly understands the solution and we’ll need to hope they’re around if it pops up again.
And finally, a huge benefit to pairing is you get some Real Human Interaction! As we’ve heard frequently over the past few weeks, it is important to balance our physical and mental health with our working lives. Take a few minutes at the start of a call to be social! Show your coworkers that you care about their well-being. It helps to relax your mind and takes off some of the pressure that we’re all feeling.
Without further ado, here are some strategies and techniques that have worked for our team.
This one is helpful for any project you’re working on, remote or in person. Creating a project goal and smaller milestones allows you to pick which items you would like to focus on completing during each call. Be sure to brainstorm this at the beginning if it’s not something that already exists on your project!
It is also a good idea to define your roles and responsibilities at this point. When each of you is clear as to who is doing what, it makes working independently easier if you can’t find a time to work together. If it makes sense for one person to take on more of the project, they should. There’s no sense in dividing the work equally if it will actually be harder to complete that way.
Let’s get real: most of us are working from home right now, we’re not used to it, and that has totally messed up our normal schedules. That can be good in small doses, but also stressful! Setting a daily check-in with your pair programming partner can help regulate your schedule in general, but it will also help you both get in tune with individual progress and what still needs to be done. This doesn’t need to be a video call; it could simply be ten minutes set aside to message back and forth with minimal distraction.
In addition to the short check-in, creating a daily work session will provide a block of time for heads-down work without fear of someone scheduling another meeting for you. This is especially useful when there is a short turnaround time. You don’t always need to work together during the daily session, or even to use the entire time, just keep it on the calendar!
Watching someone else write code can feel like watching grass grow. I’m sure if you're reading this you are more interested than most, but after a while it gets old. Try switching off who is sharing their screen with whom regularly. Not only does this keep attention better, but it increases the sense of “ownership” around the feature. It also helps with QC, as the passenger is more likely to spot an error where the driver may be focused elsewhere.
An important part of being the driver is making sure your passenger knows what you’re doing. If they don’t, you’ll both get lost and frustrated. It helps to narrate what you are doing. Speak what you’re typing; say why you created that function the way you did; explain the unit test you’re about to write. Especially when one of you has a poor connection and can’t make out the code, this sort of explanation helps you stay in sync. Creating this shared understanding helps with continuity when you’re working separately, too.
Whether it’s a shared IDE, online notes program, or whiteboard app, having a place where both users can type or draw simultaneously while talking on video chat helps describe ideas, remember bits of information for later, or provide examples for something. You may also find that sharing this out later helps other team members gain a deeper understanding of your feature.
Just like your agile (or kanban, or scrum, or…) process, your pairing process shouldn’t be set in stone. Check in every so often and ask some of the standard retrospective questions. What is working well and what could be improved? What should we keep doing, stop doing, and start doing? Any of these will work. You don’t need to spend too much time on it but be sure to ask and answer questions without ego. Remember: feedback is a gift! Use it to learn where you can improve and iterate on your pairing process.
Sure, you should always be patient when working with another person, but remote pairing requires an extra level of patience. Lag in video calls or screen shares may suggest that the other person is done speaking when they’re just delayed. It’s hard to read cues in body language over video that we take for granted with in-person interactions, so instead just wait another three seconds before starting to speak.
Pairing with someone remotely also exacerbates differences in the pace at which people work. Don’t get frustrated when your collaborator asks you to slow down or doesn’t know all the shortcut keys that you do. In addition, narrating while working is a new challenge for most of us, so expect that both of you will be going more slowly than usual.
There are still many challenges remaining when it comes to remote teamwork. Here are a few we are still consciously working on.
Maybe it’s different at your employer, but with a workforce that is 100% remote, many people have found that they have more meetings on their calendars than before. Coworkers are scheduling time because they can’t just walk over to someone’s desk and ask a question. This can make setting a recurring meeting time more difficult.
Additionally, notifications from chat programs can be a distraction or privacy issue during screen sharing. Be sure to disable any popup or banner alerts before you start your meeting!
There are inherently more technical issues involved in coding over video calls and screen sharing than coding while sitting next to someone. You have to depend on your and your collaborator’s internet connections, the call app, any shared documents, and more. These issues can be particularly frustrating since they’re out of your control. But to reference back to the last section, just be patient! If you can’t work through a particular issue, take a break from pairing and come back to it later.
It is also important to keep in mind that some tasks don’t translate to screen sharing. Scrolling through code or webpages looking for something specific just does not work, even with the best internet connections. Small fonts or particularly detailed screens are another no-go; if you need to lean in toward your monitor to see something, your collaborator won’t be able to distinguish it.
Remote pairing is not easy! It takes time, cooperation, patience, and practice to do it well, so don’t expect your first work session to be flawless. It is particularly challenging for most people to talk and type at the same time. Even just explaining what you’re doing and why could be something you’re not used to.
During this learning curve you will also find the remote pairing sessions more physically and mentally demanding than in-person pairing. This is also normal! Just like the first time you give a presentation to the CEO or go for a run, some things take time to get used to. Practice. Iterate on your process. Don’t assume that the way you pair with one person will be the most effective way to pair with every person. Did I mention “iterate”?
Let us know what you think! Have you tried any of these techniques? Do you have any of your own that you find invaluable? Let’s keep the list growing!