Pair programming is a big part of how we produce high-quality work at Tandem. When two (or more) of our software engineers collaborate on a tough problem, their combined brainpower makes the code stronger!
After a recent productive pairing session, Stephanie and Shamyle (also known as #TeamStephyle) sat down to share their thoughts on fearlessness, working remotely, and why it’s important to have some fun while pairing.
What made yesterday’s pairing session so great?
Stephanie: We were working on a part of the app written in Python, which neither of us is very familiar with, and we were working with a difficult legacy technology. Those are the challenges that we faced. What worked well was that it was a real team effort in figuring this stuff out. Neither of us knew what the code was doing at first, but we had an open mind and looked at the problem from a new perspective. It wasn’t one person really driving: it was something we tackled together.
Shamyle: We were trying to make a SOAP request. The SOAP protocol isn’t antiquated, but it’s an old way of trying to make requests. It looks very cryptic when you receive the response, and you have to parse through it. And, when the data was coming back, the format was very inconsistent. We had to keep our eyes open a lot and do some detective work to get familiar with the environment.
One thing that really helped was Stephanie asked me at the beginning of our session, “have you ever worked with Python before?” I think it was great to start the session this way. A lot of times you go into a pairing session, and you’re afraid to say ‘I don’t know.’ But by getting on the same page immediately, it breaks the ice.
Stephanie: When you’re pairing with someone new, you might not know what they’re familiar with. It’s best to go in without a lot of assumptions, and just get on the same page from the start.
Shamyle, you’ve said Stephanie is ‘fearless.’ Why is that important for a software engineer?
Shamyle: You can’t be afraid of what you don’t know. If I was pairing with someone who wasn’t as fearless as Stephanie, I’d feel pressure to be the fearless one. In some situations, where you truly don’t have enough background on a language or a problem, it makes sense to go ask someone else for help. But in other situations, if you’re fearless enough to just dive in, you end up realizing you’re more capable than you knew. If you are willing to take risks, to explore, to go into the dark… sometimes you end up being really productive!
Yesterday, because we dove in, we not only were able to write the code, but now we have enough information to actually refactor it and put in some improvements.
Stephanie: I’m actually usually pretty nervous to tackle stuff that’s new to me. But when you’re pairing with someone at a similar experience level to yours, there’s lots of room to bounce ideas off of each other and learn together.
How is pairing remotely different from pairing in person?
Shamyle: In the office, you aren’t just with your pair, there are a lot of other people around as well. There’s a lot more distractions in the office! Now that we’re working remotely, we have to force ourselves to take breaks–those breaks happen more naturally in the office setting.
Another thing I’ve noticed about the dynamic is that when you are in the office pairing together, you can physically point at the screen or take someone’s keyboard to start typing. With remote pairing we give each other more time to think because there is this delay. I’m forced to communicate more clearly, and not just point at things or take over when I have an idea.
Stephanie: Shamyle and I let each other know what we’re doing off-screen. Sometimes we’ll be looking something up in a separate window that the pair can’t see. Instead of it being an awkward moment of silence, it’s easy to just say “hey, I’m just looking up how to write an if statement in Python in a separate window.” That shows empathy for your partner and is something that I really appreciate in making remote pairing more natural.
What role does communication and empathy play in pair programming?
Stephanie: There are times when he immediately understands something, and there are times when I immediately understand something–when we take the time to explain those things to each other, we’re able to both have a full understanding of the code so we can make it the best it can be. When it’s mutual, it makes the win feel shared, which is important for pair programming. It lets you both feel ownership over the progress you’ve made together.
Shamyle: When you have joint ownership like that, it leads to higher quality software. You’re less likely to introduce a bug or have something missing when you have two pairs of eyes on a piece of code.
Stephanie and I are lucky enough to have the same level of experience, but when you are working with someone who isn’t as experienced as you, it’s really helpful to have a lot of empathy. The less-experienced person may be tempted to just go along with what you say, but I think it’s really helpful when the more-experienced person tries to educate their partner about what’s going on as much as possible. When less-experienced people are comfortable enough to ask questions, it challenges the more-experienced person’s assumptions and can lead to fewer weaknesses in the code.
Any other tips for engineers who are new to pair programming, especially remotely?
Shamyle: I’d like to say that it’s helpful to have fun as well! Stephanie and I have random conversations about articles or Taylor Swift, and we need to do that sometimes because it’s not just about the code–it’s about communication and connection.
Stephanie: Sometimes I’ll send Shamyle a YouTube video or we’ll talk about a documentary.
Shamyle: We were talking about Miss Americana and Taylor’s story about how she initially was trying to be who others wanted her to be, but then she realized she has to stand up for what she believes in and what’s meaningful to her. Taylor Swift is the most incredible person in the music industry.
Stephanie: It’s important to not do so much work that you are burnt out by the end of the afternoon. With remote pairing, it’s easy to just go for three or four hours straight when you’re immersed in a problem. Once you’re at a good stopping place, take a break, rest your brain so you can be fresh to tackle the next problem.