Sunday, February 1, 2015

Effective Pairing

Several months ago, one of our development teams was trying to bring a project in for a landing and a call went out for developers to come in and do some “pair programming”. I’m sure we’ve all been at the end of a project that is running hot, had numerous change requests, and been subject to the mounting pressure to deliver the desired functionality by the promised date. I’ve been there, and wanting to build up some good karma, volunteered for a few sessions to help where I could.

It was a great experience, and after the project was over, several of us got together to exchange thoughts about effective pairing. Seven important elements for effective pairing came out of those discussions. Interestingly enough, these elements are also key to providing Winning Support.

Learn
Learning all you can from your partner establishes the framework for effective pairing. Your partner knows the code, the project history, and the overall picture, so assume the role of a student. Let your partner teach you and explain what is happening; your job is to listen attentively. More than likely, your partner already has the right information to solve the issue, but the problem is that he or she may have too much information. Allowing your partner to be the teacher will help to crystallize his or her thoughts, which will then narrow your partner’s focus to what is really important.

Inquire
Intelligent queries can help your partner sift through the pile of information. As your partner shares with you, listen carefully. Don’t ask general questions such as, “What’s that?” Instead, ask direct, specific questions:

  • “Why are you forcing the string to lowercase every time through the loop? Wouldn’t it be faster to force it to lowercase once before the loop?”
  • “You keep saying that we don’t need to look at this code. Why is that?”
Support
Supporting your partner can take many forms. Offer to fetch a cup of coffee, a Mountain Dew, a cold cup of water, or a snack. Maybe he or she needs a break; if so, the two of you can take a quick walk around the building. While you are walking, let your partner talk to clear the cobwebs.  This isn’t just an idle waste of time; your partner’s subconscious will continue working on the problem at hand, and you’ll both return refreshed and able to take a fresh look at the problem.

Don’t overlook the benefit of just being there with your partner. At the tail-end of a project that is under schedule, resource, and budgetary pressures, nothing is more demoralizing than working on a critical issue alone. Just having someone there who is willing to give of themselves to help you fight through the issues will keep the dark and depressing thoughts at bay.

Track
Tracking your partner’s moves through the code and through manual test cases takes keen observation skills. If your partner is exercising a particular test case, take notes. Keep track of the screens and the data entered to help ensure the test is repeatable.

Pay attention to how your partner is entering the data. If she types it in one time, but selects it from a list or copies it from a file another time, it’s worth a question. Usually, it won’t matter, but the test may not be exercising the same pathways in both cases.

In other situations, you may want to track process durations. Just noticing that an activity took one second during one test but 15 seconds during a subsequent test might help your partner uncover a potential problem.

Serve your partner by taking care of the periphery. Track the things that your partner isn’t focusing on, but bring them to attention if you see something that doesn’t fit with the patterns your partner has established.

Engage
Engaging your mind with the task at hand takes discipline. You are there to engage with your partner; therefore, your mind needs to be on your partner’s issues and not your own.

You are there to help your partner, not be a hindrance. You need to be actively involved in helping your partner concentrate on getting the work done. Being deep in the throes of a pair programming situation is probably not the best time to bring up that long story about that time you were working on a problem that is only tangentially related to your partner’s situation.

If you find your mind wandering and disengaging, you may need to return to the Inquire and Track aspects of a pairing exercise.

Nurture
Nurturing your partner takes grace and diplomacy. To nurture someone means you are caring for and encouraging his or her development and growth. In most pairing exercises, you are there to Learn, Inquire, Support, Track, and Engage, but there will be times when your experience needs to gently and gracefully come to the fore.

Knowing when to nurture your partner and on what subjects requires diplomacy.  You have to know what is important enough to be a teaching moment, and what can slide, especially if the pairing exercise is being performed under tight schedules and project pressures. Under those situations, making a big deal out of your partner’s coding style is probably not going to be well-received. However, if your partner is using the wrong design pattern or a resource-expensive algorithm, then that may be the time to gently and gracefully offer wisdom.

During a recent pairing exercise, I observed a junior developer whose partner was a very senior, respected leader. The senior leader was trying to lead the developer down the right path, but it was clear the young developer was out of his depth. Although the senior leader was frustrated and wanted to just grab the keyboard, he stopped and took the time to explain not only what was wrong with the existing approach, but why it would be a problem down the road.

Instead of just pointing out the problem and saying, “Fix it!”, the senior leader showed the developer the rationale behind the better approach, and then gave detailed instructions on how to implement the changes. This is one reason why this senior executive is so well-respected in our company and in the industry: he knows when someone needs a nurturing mentor.

So far, we have six important tasks for effective pairing:

  • Learn;
  • Inquire;
  • Support;
  • Track;
  • Engage; and,
  • Nurture.

Some of you have already seen the seventh — and probably the most important — task in any pairing exercise, and that is to LISTEN.

  • When you listen to your partner, you will be able to learn what you can about the problems he or she is facing.
  • When you listen to your partner, your inquiries will be direct and pointed, and will help your partner focus on what is truly important.
  • When you listen to your partner’s frustrated sighs and the heavy pounding on the keyboard, you will know it is time to support your partner with a cold soda, a snack, and a mental break.
  • When you listen to your partner, you can be better at tracking the pathways through the code and through the test scenarios.
  • When you listen to your partner, your mind will be engaged, and will not be wandering. If your mind is wandering, then you cannot be the effective resource your partner needs.
  • When you listen to your partner, you will be able to know when to nurture your partner’s mind and craft.
During one exercise this past summer, I was paired with a very sharp and talented front-end web developer. I am pretty sure he has forgotten more about Javascript and its numerous frameworks than I will ever hope to learn. To be honest, I was a little intimidated by him, and wondered why he would need a partner.

I asked him, “How can I best support you in this effort?”

He replied with, “Just listen to me mutter.”

Throughout the evening, he gave his internal monologue a voice and I listened. Together, we discovered a problem with one of the data-retrieval web services. It was a long and arduous evening at the end of an already-long day, but solving that particular problem helped to make the entire project a success.

When you stop to think about it, listening to someone mutter might just be the essence of providing Winning Support. We always respond when our clients are yelling, because we tend to jump at the loudest voices. But, sometimes the small, quiet mutterings of our clients can indicate a bigger problem, and learning to hear those soft voices can help to identify problems you don't know you have. When one client happens to mention some seemingly inconsequential thing, and then, another client raises the same issue a day later, it may indicate a deeper problem that needs to be addressed, and quickly.

We need to tune our ears to listen to those mutterings, to learn from them, to inquire intelligently about the issues being raised, to support those who are voicing concerns, to track what is happening, to engage our minds fully with those who are muttering, and to nurture those who need guidance.

Whether you are in a pair-programming exercise or you are supporting a large number of users, the key to providing Winning Support to your partner — and to your clients — is to LISTEN.

We can do this.


Let’s start Winning Support.