Tuesday, February 28, 2006

Paired Programming

I have been hearing a lot about paired programming recently. I've done some research on the net about this to find out what exactly "paired programming" involves.

First off, here's one of the better descriptions of Paired or Collaborative Programming from Wikipedia:


"Pair programming requires two software engineers to participate in a combined development effort at one workstation.

Each member performs the action the other is not currently doing: While one types in unit tests the other thinks about the class that will satisfy the test, for example.

The person that is doing the typing is known as the driver while the person that is guiding is known as the navigator. It is often suggested for the two partners to switch roles at least every half-hour."


That are people for and against the idea for different reasons. The supporters of the idea argue that the paired programming
- increases software quality for various reasons.
- increases morale and team work
- speeds up the software delivery
- improves hands-on training of the junior programmers
- and spreads the code knowledge reducing the dependency on a single person for an area of the code.

Other people object that
- some people are more productive when they work on their own
- senior people may find it frustrating work with people who are still coming up to speed. Also, the new people may find it frustrating if the senior people have a tendency to take over the whole programming process.
- different people have different coding styles and there may be potential conflits.

I have found that the biggest objection to this idea is the lack of scientific research into comparing the productivity/quality of paired programming and the traditional approach.

I must admit over 11 years of my programming, personally, I have produced better results when programming with another person. My second ever proffessional project never had any bugs from the testers or the field and I was working very closely with another programmer. Can it be a concidence? Maybe I am more suited to working other people.

Especially due to the following reasons, I see a lot of potential for the collaborative programming in the upcoming years:
- A very significant amount of software programming in the USA, UK and other countries have been outsourced to India, China, Russia and similar countries. One of the biggest challenges that have been well publicised is for the Western companies training up the outsourced partners and having enough control over the software that is being produced.
- Broadband technology has had a giant leap within the last few years. The analysts predict that the dial-up technology will be history very soon.
- Google is now trying to by-pass the whole dependency, created by Microsoft in the 80s, so that everything can be done over the internet without having to need anything but a browser.

So, the way I see it is that the paired programming can be and will used to have tighter relationships with the outsourced partners in the upcoming years.