The key to building a good software development team is to focus on the development of the staff. In most software teams many learning opportunities are removed to focus on the commercial or time-line of the project. Practices such as the two weekly demo or paired programming are drop to free up more time. Agile is full of learning opportunities which will improve the individuals, team and then the software they produce. lets look at benefits to learning and the software created by Pair Programming in more detail.
Pair Programming is a software development technique in which two programmers work together at one work station. One types in code while the other reviews each line of code as it’s typed in. The person typing is called the driver. The person reviewing the code is called the observer or navigator. The two programmers switch roles frequently (possibly every 30 minutes). – Wikipedia
When I first saw this my initial thought as a project manager was this was the biggest waste of resource a software project could have. Mind you at this point I also believed that people could work 20 hours a day for weeks and shouting made people work faster (the ignorance of youth).
Now I am an advocate of Pair Programming for several reasons the most important being that it provides an excellent way to have experienced developers transfer knowledge and experience to junior developers, it is this knowledge transfer that interested me more in paired programming especially the changes that began to appear in the style of code and quality of the code that was being produced.
Most teams are made up of individuals from different backgrounds and with varied experiences so the potential for pair based learning is obvious, but most people don’t respond to either teaching or learning in a one directional knowledge transfer. As Pair Programming facilitates discussion on how the code is being written and in may cases opens discussions on principles, which as the developers delve into theses points they begin to evolve the way the both think.
Possible the most interesting but far from surprising benefit is that the team progress through the normal team development process quicker (“forming, storming, norming and performing” Tuckman 1965) and are less likely to get stuck between the norming and performing stage.
The team dynamics is dramatical changed by this process as collaborative discussion is forced by the nature of two individuals working on the one peace of code. Supported by the close physical proximity to each other genuine relationship will be forced to develop as the interaction happens between the two paired individuals.
With in some teams I have seen the affect of pair programming ware the pairs are being continual rotated every day or so. This mixing of the team helps to deliver a bond between all the members of a new team.
Collective Code Ownership
One of the other advantages of Pair Programming is that it creates ownership of the code among the whole group, so it means that any single team member can change code, add functionality, refactor or fix bugs during development. This ownership of code being shared among the whole team leads to people being held accountable for decisions on how they have designed code, also this opening and discussions can lead to the development of the application being improved through debate.
Not normal agile practice but I have found along with the other elements of pair programming making the developers present their code to the team, helps to transfer knowledge and ideas also spark conversations on deeper elements of coding.
Along with the many benefits of that support the learning and development of the team their are many others that will help sell the concept of pair programming to the business:
With the mixing of pairs all the developers have a better understanding of the whole code.
New members of the team have a reduced period “getting up to speed”
Minimises dependences on individual members of staff
Massively reduces bugs in the code
It is harder to hide problems and easier to spot issues in the project
Their are many other benefits to pair programming I would strongly recommend that you try it if you are part of a development team.