Halhelms
SIGN UP FOR MY NEWSLETTER

www.savorgold.com is top on wow gold and runescape gold and World of Warcraft gold provider list for trusted services. Their reputation seems to growing by the minute, which isn't surprising because they are one of the safest sellers of Gold. Delivery speed and customer service are very good. They aslo are giving some bonus items depending on the amount of gold you purchase.

 
 
Halhelms

Recent Comments

Recent Entries

RSS

Concluding an Experiment on Pair-Programming

Over the last eight days, my colleague, Maciej, and I conducted an experiment in pair-programming. The experiment was inspired by a terrific piece on pair-programming by a highly-respected Java guru, Elliott Rusty Harold. (You can find his article here.) I've done pair-programming in the past, but never rigorously and so wasn't sure whether my affinity for it was justified. Today we concluded the experiment and discussed what we thought of it.

Our schedule for the days of the experiment were...

8.30 - 9.30 : Free time. Read, do email, explore blogs -- whatever

9.30 - 12.30 : Pair-programming

12.30 - 2.00 : Free time

2.00 - 5.00 : Pair programming

The project we worked on was a large one and some parts were quite complex. We had a good understanding of the domain already.

During our pair-programming time, we worked on one computer with two 24" monitors. We traded off coding when one of us got tired or when one of us had a better understanding of that area of the application. We did not discuss whether we like the experience while our experiment was under way.

Maciej and I discussed our findings. While not scientific, the results were very valuable. Here are the points that emerged from our discussion.

1. We felt the quality of the code was higher than either of us working alone would have produced. Often, one of us would share knowledge the other didn't have (or wasn't as familiar with).

2. We felt the quantity of the code was larger than we would have produced working separately. This was the biggest surprise to me, as I thought there would be a trade-off here. I believe the reason for this is related to point no. 3.

3. The three-hour sessions were intense. When we were pair-programming, there were no breaks to check email, read blogs, and generally avoid unpleasant work. At the end of the sessions, we were tired and found the 90-minute lunch break very helpful in "resetting" our brains for the next session.

4. We found that working together helped us produce cleaner, better-structured code. This was perhaps due to the constant refactoring of code as, together, we found ways to restructure and streamline our code. Less-than-optimal code that would have slipped through, had we been working on our own, was fixed.

5. Our motivation stayed strong throughout the project. This is a key factor, often overlooked. Code is only as good as the mental state of the programmer who produces it. Those sessions were intense. They were also very invigorating.

6. We gained from having a shared understanding of the full scope of the application. I think this will prove very helpful during the extensive maintenance the nature of this application will require.

7. We met milestones sooner

8. Having definite times of intense work and scheduled down time made it much easier to avoid external distractions. I was able to tell people, "Please contact me between 8.30 and 9.30 or between 12.30 and 2.00" Something a little magical there about having a schedule.

We decided that we want to continue with pair-programming. Being that productive is very rewarding. We also decided that we definitely wanted/needed to continue those breaks. I'm very pleased that the experience was such a good one.

Comments (Comment Moderation is enabled. Your comment will not appear until approved.)
Ben Nadel's Gravatar Hal, this is pretty awesome! I figured the quality of the code would be better, no doubt; but, the fact that you actually wrote MORE code is a bit shocking, but pleasantly so. I guess the point you make about not checking emails, twitter, IM, etc. probably affects this as well. When you are with another developer, it's just more focused.

Very cool! I'm a bit jealous.
# Posted By Ben Nadel | 7/31/09 6:46 PM
Sarah Kelly's Gravatar This is really interesting. Did you find that the "free time" was adequate for accomplishing the tasks that were not part of the pairs programming? How much of the free time did you actually use for down time, i.e. getting away from the computer, not working? For how long do you think that you could maintain this intensity level? Do you have any thoughts about remote pairs programming?
# Posted By Sarah Kelly | 7/31/09 6:56 PM
Phillip Senn's Gravatar Potential bumper sticker: "God is my paired programmer".
# Posted By Phillip Senn | 8/1/09 12:46 AM
Hatem Jaber's Gravatar @Sarah,

IMO, I think remote pair programming is just good because you are sharing the screen of the person who is doing the typing and you're basically looking over their shoulder. It's just as productive in either situation, but maybe others would prefer to be in the same setting.
# Posted By Hatem Jaber | 8/1/09 2:08 AM
Hal Helms's Gravatar @Ben It was sort of shocking. I thought that would be the price we paid, but it turned out not to be the case. People have noted before the power of being in "the zone" when it comes to programming. This state of intense concentration and focus produces prodigious amounts of high quality code. To that end, Microsoft gives its programmers individual offices with doors. But as Elliott points out (and I forgot about this until reading your comment), pair programming creates a zone for both programmers in which extraneous distractions -- including noise -- are simply filtered out without any conscious effort: it just happens. There's great power, it seems, in pair programming. My guess, though, is that managers will see only the "cost": two people doing the job that one previously did. What they fail to see is that the work produced by the pair far outstrips the aggregate efforts of those same two programmers working alone.
# Posted By Hal Helms | 8/1/09 12:10 PM
Hal Helms's Gravatar @Phillip LOL!

@Sarah The free time seemed just about right. If anything, though, I think we could give even another hour away per day and still be ahead on the metrics of quantity. As for how long we can sustain the intensity level, that's a very good question. It may be that we'll try something like "free Friday afternoons" -- or maybe even let Maciej go home at 12.30. I think the "work hard, play hard" idea may be very effective, but I'll report back as we get more experience.
# Posted By Hal Helms | 8/1/09 12:13 PM
Hal Helms's Gravatar Hatem and I have done a good deal of pair programming remotely; he lives 45 minutes away and is just too danged lazy to come down to beautiful Sarasota. ;-)

Remote pair programming is good -- but not, in my experience, nearly as good as being together physically. I think the key to this is an agreement that, while pair programming, both programmers' focus will be exclusively on that task.
# Posted By Hal Helms | 8/1/09 12:15 PM
Rob O'Brien's Gravatar @Hal, to your point on mangers seeing the cost of two programmers... On the surface, the manager would want to see double the productivity to justify the time-cost. As you dig deeper, the benefits of quality code (and thus future fixes or refactoring) could (should) outweigh any concerns. Here's to hoping.

Would you say that the skill level between you and Maciej was about equal? I can imagine that disparity of skill would challenge the effectiveness of the pairing.
# Posted By Rob O'Brien | 8/2/09 2:08 PM
Matt Williams's Gravatar I would also wonder if occasionally varying whom you are paired with would have additional benefits. Perhaps changing up per project or on bigger projects every few weeks could keep a pair from becoming too familiar or potentially getting stale.
# Posted By Matt Williams | 8/3/09 10:39 AM
Sarah Kelly's Gravatar @Rob re: skill level...I assumed that Maciej's and Hal's skill levels were comparable but would be curious to know how it would go with more disparity. It seems obvious what the benefit to the less experienced programmer would be, but would there still be overall benefits and benefits to the more experienced programmer?

@Matt re: varying the pairs...IMO, variety is always good, and since everyone tends to pick up on different things, working with different people will expose each other to those strengths.

Very interesting topic!
# Posted By Sarah Kelly | 8/3/09 12:58 PM
Hal Helms's Gravatar @Rob : On the skill level, Maciej and I have different skills. He's much better at database stuff and CSS; I'm better at architecture. Maciej is very skilled -- and very smart -- so having different skills is really helpful.

@Matt : Yes, I think changing the pairings is important. Hatem came down yesterday and we did a LONG day of pair programming. I was surprised that the experiences with Hatem and with Maciej were so similar, given that they're very different types of people. Interesting...

@Sarah : In the past, I've done pair programming with very junior developers -- and still found the experience good for both of us (and for the code). Even when a junior developer may not be able to add much in terms of code help, having someone to explain things to is VERY helpful in getting one's thinking straight.
# Posted By Hal Helms | 8/3/09 3:48 PM
Arlo Belshee's Gravatar I've similarly found the advantage of changing partners - especially for long-term sustainability (I've been doing pairing full-time at work for about 9 years now)..

Back in 2001, we did some experiments with pair duration (between swaps), which we wrote up in 2005 ("Promiscuous Pairing" paper. We found that, for us, the optimal pair duration was between 90 minutes and 2 hours. That kept us continually in beginner's mind, rapidly learning.

It also helped a lot with sustainability. We got up to working 5 90-minutes sessions per day, day in and day out, for 18 months. However, it only worked when there were at least 4 of us on the team (so we could rotate around enough).
# Posted By Arlo Belshee | 1/5/10 2:31 PM
 
   
Clicky Web Analytics