When we are following Agile methodology and Scrum process, Scrum is silent on how to deliver code; it only helps with managing process flow.
When we are following Extreme Programming practices, we often use some of the engineering practices, and often, that means utilizing Pair Programming. We should adopt Agile engineering practices in a ways that add the most value to our project and the practice we are following.
Pair-Programming means sitting side-by-side with one of your colleagues through the whole adventure: coding, unit testing, and then functional testing.
Pair Programming is easily the most controversial Agile technique because of its inherent benefits and risks, and it is ultimately the project team’s job to figure out whether the benefits outweigh the costs when trying to determine whether or not teams should pair on a specific project, and for what percentage of the time.
It is also recommended that during pair programming the person typing at the keyboard swap the keyboard with the partner every now and then. Forcing to switch the pairing roles regularly, results in increased productive and focused bursts of work. It also ensures that you take breaks.
Sometimes even when you’re not in the driving position, you might come up with an awesome solution to your problem that you need to type straight away. If that happens, you shouldn’t “steal” the keyboard from your partner, but instead let them know about your idea so they can incorporate it themselves.
Here both the partners collaborate on design, implementation, code and test. Partners alternatively swap the role of Driver and Navigator.
Driver: is the person who is at the keyboard, who answer’s navigator’s questions and is always open to feedback (Fine scale feedback).
Navigator: is an active observer who monitor the ‘big picture’, help the driver avoid distractions, track tasks and review code, asks questions, navigates the implementations and ensures use of best practices.
Benefits of Pair Programming If implemented correctly are:
- Way to build quality software.
- Eliminates waste: Having a pair to debate the most effective way to solve a problem means less time wasted and more time writing excellent code solving the right problems.
- Effective Knowledge sharing: Pairing ensures cross team sharing of knowledge of the entire code base. If a team hires a new member, the knowledge share gained through pairing makes these Knowledge share effective. This also results in reduced risk for the project.
- Technique Transfer: Allows transfer of techniques from experienced teammates to the partner.
- Highest quality code possible: Getting quality code out the door in a timely manner is served best by pairing.
- Risk mitigation and negates negative effect of interruptions: Pair Programming lessens the negative effect of interruptions (sickness, vacation, attending emergencies), because one of the team members can deal with the interruption while the other continues to work on coding.
In Summary, few of the benefits of Pair Programming are:
- Eliminates waste and brings Higher productivity
- Effective Knowledge sharing or Transition
- Higher-quality code
- Risk Mitigation
- More deliberate design direction
- Checks and balances for choices
The primary issue with Pair Programming:
- Inability to multitask: While working physically beside someone else, it’s impossible to respond to emails and IMs. That’s part of what fuels the productivity gain in of pair programming, but it does have some negative impact on the team: if you’re needed for something critical, it may take a while to respond. – This is probably why Extreme Programming requires teams to be co-located (e.g., in the same physical space).
- It’s important to take personality traits into account when pairing individuals together. This can also affect how we look at potential new hires, since it’s important to make sure new team members will get along with whomever we may pair them with in the future.
- Sometimes it is very difficult to share tight spaces like a computer area. We all occasionally need a little bit of privacy, which you can’t really have while Pair Programming. To compensate, create a high quality work environment.
- Product Owner and Management also need to be aware of the benefits of Pair Programming, and should not be misguided by unrealistic financial and legal implications.
Encourage socialize, Foster cohesion and Leverage team-member strengths: At the end just want to highlight that Encourage people in your organization, program or project to socialize outside of work. Socializing with co-workers outside the office is an effective way to open channels of communication, to create a better understanding and break down any walls of pre-judgemental or mistrust between team members. It also helps to decrease individual bias, stereotyping and false objectifying. Cohesive teams are more successful.
@Mohammad Sami – Agile Transformation Coach
3,978 total views, 4 views today