Pair Programming Blog

philip Philip Shilane

Hi Kim.  How are you?

Kim Kimberly Lu

Hi Phil! I’m great, enjoying the sunny California weather. How are things on the East Coast?

 

philip Philip Shilane

Hot and humid here.

So, we were asked to write a blog post on pair programming since it is the hot programming fad now.  First maybe we should say a little about our backgrounds.

I’ve been with Dell for 10 years including my time with EMC and before that Data Domain.  I mostly programmed in C, sometimes on team projects, but always writing the code myself.  Until our current project got me into pair programming.

Kim Kimberly Lu

Wow 10 years! 👍

Last week was my one-year anniversary at Dell EMC and I’m currently part of the Engineering Leadership Development Program (ELDP) where recent college graduates rotate between 3 different business units every 9 months. I’ve pair programmed a bit before with the guys at Cloud Foundry and pair programming was actually one of the aspects of this project that influenced me to join the team.

philip Philip Shilane

I was interested in the project itself and neutral to slightly negative about pair programming.  My only experience with pair programming before this recent project was back in graduate school when I watched a professor “pair program” with a graduate student as a deadline approached.  The student typed as the professor watched.  It seemed more like micromanaging.

What did you think about pair programming when you first started with Cloud Foundry?

Kim Kimberly Lu

I really enjoyed it. 😃

Transitioning directly from undergrad, I found it difficult to understand and contribute to large, legacy code bases. I often found myself reaching out to more senior engineers to help walk me through it and it led to a sort of “unofficial pairing.” So when I found out that the Cloud Foundry team was pair programming and it was an actual development technique people were using, I was ecstatic.

philip Philip Shilane

It was somewhat similar for me.  This project already had a code base to understand, and I also had to learn Go programming.  I spent a few weeks learning Go and looking at pieces of the code on my own, but I made more progress when I started pairing with an experienced person on the project.  I started off watching the other person programming and trying to offer suggestions.  Then we switched so I started typing, while the other person reminded me of Go syntax and existing library functions.  I was still learning the system architecture while starting to program.

 Kim Kimberly Lu

Yup, at first I watched my pair “drive” then eventually we started taking turns writing the code as the other person reviewed at the same time. One of the main differences with our project and my experience at Cloud Foundry is that everyone was pairing locally at Cloud Foundry.

philip Philip Shilane

Yes, this project is different.  Half the team is in California and half is in New Jersey, and our pairing sessions are sometimes local and sometimes remote.  I work remote from the other team members in NJ, so I am pretty much always remote pairing.  For a few weeks, I was even remote pairing with a team member traveling to India.  The time zone difference and Internet latency were rough.

Kim Kimberly Lu

I can imagine. That sounds difficult.

Good thing we have some tools to help with remote pairing, such as using ScreenHero to share screens and being able to VNC into VM’s from separate locations. I also bounce back and forth between calling my pair from Skype/Lync and using the phone.

philip Philip Shilane

We also all work on a variety of systems: Windows, Mac, Linux.  Using the shared VMs has worked well for me.  Sometimes, I’ve had multiple people connecting to debug a problem.

The phone stuff seemed hard in the beginning.  Not everyone had desk phones, and we were using mixtures of phones, Skype voice, and other tools.  Sound quality with someone in a shared office was sometimes bad.  It seems better now.  Did something change in the shared office in CA?

 Kim Kimberly Lu

Yes, we got headsets! They’ve been very helpful with minimizing background noises since there are four of us in one room.

We also have “pair stations” where monitors are set up side by side on a shared desk so local pairs can easily go through code and work together.

philip Philip Shilane

I just got a headset too this week.  It allows me to pace when talking/listening and not be as tethered to my chair.

So how does local pairing work differently than remote?

 Kim Kimberly Lu

For me, local pairing is more flexible. Because of the time difference, we have a set agreed time to pair remotely. This is usually during East Coast afternoon and West Coast morning. So I make sure to have a clear schedule during that time to not interfere with pairing. For local pairing, it’s easier to step out for a bit to go to a meeting and come back.

philip Philip Shilane

With remote pairing, there is some stop-and-go when one of us wants to take a break or a phone call.  Each week, I’m in a pair that is tasked with a feature, bug fix, whatever, and we work on that until it is done.  We are each other’s code reviewers, so we can just check in to the main branch without further reviews.  Then we switch tasks and pair partners.

It seems like we switched partners more in the early months of this project.  I guess everyone was learning the project.   I think people have picked up areas of expertise and are picking tasks in those areas.

 Kim Kimberly Lu

I agree. People are definitely starting to specialize in some aspects of the project. Recently, I paired with a colleague to write some automation scripts and because of all the work he’s done with Kubernetes, I was able to ramp up fairly quickly through our sessions together.

During this time, I was also able to teach him about setting up our system in Cloud Foundry and how that fits in with Kubernetes. Pairing together for this kind of work, like new features, has been really helpful. Sometimes, I also find myself doing some individual work for things like researching or running performance tests. What about you?

philip Philip Shilane

I started individual programming when my partner got pulled into something else, and the remaining coding task was small, such as changing the logging format.  It seemed overkill to have two people perform a search-and-replace.  We’ve also had to deal with vacation schedules and odd-person-out situations where I had no one to pair with.  For extended individual programming sessions, I tried to work on researching new topics or experiments, basically stuff that would not get checked into the code base.

 Kim Kimberly Lu

I would research new possible solutions too, then eventually sync up with my pair on our findings and work together to get a small demo running. Since we’ve been pair programming for months on this project now, what do you feel works well and what doesn’t work well?

philip Philip Shilane

I like several aspects of pair programming.  On a recent task, I was more familiar with the internal architecture of our project, and my partner was more familiar with networking, and we pieced together our knowledge to add networking to our project quickly.

But what I probably like most is the social aspect of pair programming.  For a decade+, I have sat a computer all day.  Now I am actually talking with someone most of the time.  There is always some chit chat and gossip intermixed with the actual task to accomplish.

Kim Kimberly Lu

Yes! I feel like I’ve really gotten to know my teammates better through pairing and there’s great team communication, either through phone calls or just pinging each other on Slack. Also, as a recent college graduate, pairing with different team members has helped me learn more than just about our project or Golang, but also new ways to approach problems and how to write quality code.

philip Philip Shilane

So pair programming 👍 or 👎?

 Kim Kimberly Lu

A big 👍 for me!

philip Philip Shilane

I agree. 👍

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s