Utilising Pair Programming in a 100% remote environment

So, what is Pair Programming?

Pair programming is basically an exercise when two people work on a task together, one could be writing code whilst the other observing and taking a bit more of a high-level view. Personally, for me in an office environment, pair programming felt a bit of an alien concept. You’d be sitting next to someone, watching what they were doing and swapping keyboards. For Form3 it just means being on a call and collaborating with someone. It can be formal with two people like I just mentioned, or it can also be very informal with 3-4 engineers on a call talking through a problem and coming up with a solution.

There is no set schedule as to how much we utilise pair programming at Form3, it varies really! At the moment I am working on the same task as another one of the engineers and we’re spending most of the day pairing together. We might drop off occasionally to go make a coffee or go on another call with someone else and there are also other times where I may be working by myself on something which may happen for a few days.

There are also in-between times where I might spend half a day pairing and the other half working by myself. Sometimes I may be working on something that doesn’t warrant having two people looking at it so we’d always take a sensible view whilst pairing. Most of the time we do try to collaborate where it makes sense to do so.

An attractive feature of pairing is that it is very flexible. If I am pairing with someone all day we typically start after our morning stand up, normally at 9:30 onwards (so not an ungodly hour). We tend to have coffee breaks in between; I may go out for a run, so I’d say I’ll be back in an hour. It’s very relaxed and not like we’re glued to our zoom call! I personally don’t feel it impinges on my remote working flexibility – quite the opposite really as I tend to fit it around my life.

Solving complex payments problems at Form3

At Form3, I often find myself looking at very complex problems or specific code relating to payments that I may not have come across before so having the experience and knowledge of another engineer present helps a lot. Normally one of us will have seen code like that or have some understanding of the domain so it doubles your ability to understand the problem. It’s a good chance to learn from other engineers. For example, I personally did not have a lot of experience with infrastructure, so pairing was really useful for me to learn more about that side of things. It’s a bit like being in the office where you may go and ask ‘Jim, the database guy’ for help, except in the office Jim may have his headphones on, or Jim is always being asked for help so actually you might not ask as often as you should. Whereas here, I can just put a message out on slack and normally I’ll get lots of responses from people offering to help me solve the problem. No question is a stupid question, although we have a very experienced team, everyone has different strengths and weaknesses.

Before joining the company, I wasn’t sure if I’d miss being a solitary software engineer where you sit by yourself in your own world and doing your own thing. I obviously still get a chance to do that when I am working by myself but when I am pairing with someone, by the end of the day I’m often exhausted as we’ve made so much progress from the sessions which I probably wouldn’t have done by myself. So, although it’s a different style of working, it’s certainly not one that I regret taking part in. It’s a very productive and collaborative way of working!

Also, it helps me to feel close to my colleagues and when we have our company meet-ups it’s great as we already know each other well and end up having a right laugh at those get togethers!

Written by

Andy Kuszyk Staff Engineer

Andy Kuszyk is a Staff Engineer at Form3, based in Southampton. He's been working as a software engineer for 8 years with a variety of technologies, including .NET, Python and most recently Go. Check out more of his tech articles on his blog.