InfoQ

InfoQ

News

My Bookmarks

Login or Register to enable bookmarks for unlimited time.

The content has been bookmarked!

There was an error bookmarking this content! Please retry.

Common misconceptions about paired programming

Posted by Floyd Marinescu on Nov 03, 2006

Sections
Process & Practices
Topics
Agile ,
Agile Techniques ,
Teamwork
Tags
Co-Located Teams ,
Pair Programming ,
XP
Paired programming is an agile practice that is the source of much debate. Martin Fowler, one of the signatories of the Agile Alliance and well known author and thought leader, has written an article on common misconceptions with paired programming.  The misconceptions, in brief summary, are:
  • Doing Agile requires doing pair programming.  "The manifesto doesn't mention pair programming and most agile methods don't make it part of their approach."
  • XP requires pair programming. XP projects usually do XP but "like any agile method, expects a team to choose its own process."
  • People assuming they just won't like pair programming. Most people like it after they try it, others don't do it right and are left with a false impression.
  • Pair-Programming halves the productivity of developers.  Better designs, less mistakes, better understanding offsets the decrease in ability to type code.
  • It's only worth pairing on complex code, not boring rote code. Martin mostly agrees with this but points out that if the code is boring, maybe the design is bad. :)
On the point about halving productivity, Alistair Cockburn & Laurie Williams' XP2000 paper on the cost and benefits of pair programming concluded that together pairs spent 15% more time on a problem together than apart, but this is "repaid in shorter and less expensive testing, quality assurance, and field support."  Another empiracle study which included Ward Cunningham and Ron Jeffries showed that by the third pairing attempt,  paired programmers were producing 19% better code for only 10% more programmer-hours.

Ward Cunningham's famous C2 wiki also includes a pair programming page with another set of misconceptions:
  • Pairing is primarily a micro-level source code review.
  • Pairing will halve my team's productivity (same as Martin's).
  • Pairing sounds like an unpleasant task. It would drive me crazy (same as Martins).
  • We don't do pair programming here.  But infact people often get together to solve bugs which is a form of pair programming.
  • Pair programming is a training program.
Martin's write-up included an important lesson, which is a good one for all of us:
I should also point out that to most XPers I know the question of whether a team is XP or not is uninteresting; the real issue is whether a team is effective.
"if the code is boring, maybe the design is bad" by Jean Barbu Posted
What about pair programming where only one half is a programmer? by James Taylor Posted
  1. Back to top

    "if the code is boring, maybe the design is bad"

    by Jean Barbu

    Not 100% true. Try developing any nowadays web application UI when selecting a radio button should display new 10 controls, disable other 5 and hides the rest of it. Find that challenging?

  2. Back to top

    What about pair programming where only one half is a programmer?

    by James Taylor

    How about using a business rules management approach and having a programmer and a business analyst be the pair developing the "code"? Lots of business rules customers do that and get great results - the business person understands the problem, the programmer has the technical skills to understand the objects involved and performance implications and they turn out a lot of accurate rules quickly.
    I wrote an article about rules and agile but for some reason did not mention this scenario. I also wrote a piece on how rules close the gap between IT and the business here on my blog. Would love to know what people think
    JT www.edmblog.com

Educational Content

Jesper Boeg on Priming Kanban

In this interview, Jesper Boeg, author of the new InfoQ book – Priming Kanban, discusses the keys to using Kanban effectively, and how to get started if you are currently using other approaches.

New-age Transactional Systems - Not Your Grandpa's OLTP

John Hugg discusses high volume transaction processing applications with high and low frequency profiles, and how VoltDB can be used for that purpose.

Cool Code

Kevlin Henney examines code samples to see what can be learned from them starting from the premise that one won’t write great code unless he knows how to read it.

Collaboration: At the Extremities of Extreme

Jason Ayers share the observations he made watching a team of developers collaborating in real time on the same code base, pushing XP, pair programming and continuous integration to their extremes.

Yesod Web Framework

Michael Snoyman presents Yesod, a web framework written in Haskell and containing a web server, templating, ORM, libraries (templating, gravatar, etc.).

Transactions without Transactions

Richard Kreuter and Kyle Banker on how to avoid classical RDBMS transactional systems by using compensation mechanisms, transactional messaging or transactional procedures.

Attila Szegedi on JVM and GC Performance Tuning at Twitter

Attila Szegedi talks about performance tuning Java and Scala programs at Twitter: how to approach GC problems, the importance of asynchronous I/O, when to use MySQL/Cassandra/Redis, and much more.

10 tips on how to prevent business value risk

One category of risk that project teams need to ensure they address is business value failure – delivering a product that fails to provide value for the business investor.