I made a change in the blogger configuration to ease the later work when blogging. It is possible that older entries are not correctly formatted.

Sunday, 18 April 2010

Agile Methods - Pair Programming

I had a job interview the week before and I enjoyed the possibility of participating in a mock job day last week. This day was really interesting for me. I could learn a lot about agile methods. In particular I noticed how difficult it was for me to interact in pair programming work.

After that I looked more into agile methods to try to see what I was missing and what I could have done better. The following article: All I Really Need to Know about Pair Programming I Learned In Kindergarten gives some tips on how to work with pair programming. It also states that pair programming needs a little adaptation

I summed up in the following paragraphs the positive and negative aspects of pair programming.

Positive Aspects

  • More structured: Pairs usually choose to code at more appropriate positions and have shorter breaks.
  • Better Code: during pair programming, programmers come less into dead ends and achieve a better quality.
  • Better distributed Flow: Pair programming has another kind of Flow: a programmer can choose to communicate to his partner the current state and let the partner resume coding at that place. Stops in the coding can be thus better minimized.
  • Fun Working: Pair programming is often more thrilling and interesting as lone development.
  • Distribution of Project Knowledge: When Pair programming is used, and partners are changed frequently, programmers obtain a better knowledge of the whole code base. Preventing the loss of knowledge assets when programmers go.
  • Mentoring: Every one has knowledge that others do not. Pair programmierung distributes knowledge and skills.
  • Team consolidation: people learn to know each other better, which improves the collaboration in the team.
  • Less Break: Pairs are less frequently disturbed as people working alone.

Disadvantages

  • Cost: Advantages such as better quality and efficience need a number of iterations to be able to work correctly, therefore the cost in early phases are higher.
  • Finding Team Elements : not every programmer can be used together and getting used to pair programming may need some time
  • Autority problem: Who decides the solution to use when the solution are contradicting each others?
  • Time pressure: programmers may require more time because of mentoring tasks or to adapt to different code styles and strategies
  • Code copyright: it is not always clear who is the real owner of the code.
  • accountability: when mistake or copyright violations occur, it may be difficult to decide who is accountable.
  • Team size: it is more difficult for larger teams to decide what and how the code should be solved, therefore pair programming is more efficient for smaller teams
  • Knowledge requirements: if different types of tasks need to be performed, programmers need to know more.