two cappuccino served on cups near laptop computer

Pair Programming: Why and When?

In pair programming, two developers work together in front of one screen (or two, as long as they both look at the same screen) to get a task done faster and with higher quality. Just like a driving a car, there are two roles in the pair: The driver, who has the steering wheel, aka the keyboard in her hand, and the navigator who knows where to go and which crossroads lie ahead. As you want to switch these roles every now and then, it is very helpful to have two keyboards and mice attached to the computer you are working on or use a tool like Mango Lassi on Linux or teleport on OS X.

So why would you do work in a pair?

Fight distractions

Usually, you are not developing in a vacuum sealed room, so there will be colleagues, chats, telephone, and so on. If the navigator takes care of answering these interrupts (or at least deferring them to later), the driver can stay in the flow of writing code, and it will be easier to remain in the mindset of the task at hand. Getting back into a complex thought takes a while as we know.

Knowing what’s next while assuring code quality

The navigator does not have to care about how to auto-complete the current function, or minor details of coding. He or she can rather keep track of the next steps, which leads to less corner cases that are being forgotten and to better test cases. The immediate code review will usually produce better designs and better readable code because all work is being challenged immediately.

Knowledge sharing

Pairing is also a tool to learn and share knowledge. A pair can get inspired and learn about new technologies or new code together, and later on split up and continue to read further details. In this case, both developers start out with about the same level of (possibly little) knowledge and try to increase it as fast as possible. On the other hand, you can also learn from your co-developer: Someone who may have more experience in one area is a great navigator who you can tap while producing even greater value. Areas of knowledge that can be shared include experience in a different area of the product, or with a tool that is used to develop, or with an engineering practice, domain knowledge, or even specialized development knowledge (interface design, patterns, testing, etc). Sharing knowledge is the best way to establish collaboration as well as reducing the risk for the whole team in case one team member may become unavailable.

While pairing can be used extensively, sometimes it may not be the right tool for every situation.

Little complexity

If the task at hand bears little complexity and risk, usually its solution is very clear and well understood. In this case, pairing has very little effect on the quality of the product. Some drivers may not need a navigator to do a simple u-turn.

Distributed teams

Remote pairing just does not work as effective as local pairing yet. You can have audio and video conferencing, but I have yet to see good (and cross platform) editor/IDE integration. Without those, the navigator may get stuck with screen sharing that suffers from time lags. Plus, if you ever communicated line numbers, you know the pain.

Stealing the wheel

Good pair programmers need to learn to discipline themselves. Focus on the task is key (not on the recent vacation, or watching funny videos), but navigators must also refrain from abruptly stealing the wheel, eh, the keyboard.

Offshore scrum: A case study in lean thinking

Presentation at the Scrum Day in Düsseldorf December 2009, by Andrea Tomasini (agile42) and Dave Sharrock (be2)

Scrum Day Düsseldorf Scrum Day Presentation

Abstract of the speech

While the cost argument for moving traditional development teams offshore is well-known (and generally, still quite strong), the difficulty of maintaining high bandwidth communication with offshore teams using agile development methods has often been considered a substantial barrier to effective development. At be2, a Munich-based online international matchmaking service with an IT organisation based in Armenia, we choose to challenge these assumptions. With the help of agile42, a pilot agile project with two development teams was planned working with the product teams with the most critical business requirement, a complete rebuild of the core service estimated to take over six months before any major result was delivered to our customers. At the end of the pilot release sprint, the first changes to the site were live barely six weeks into the project. And as we start the final transition of the remaining teams, the pilot teams have continued development sprints with the result that the next release includes the majority of the planned design changes, just two months into development. We will present a review of the agile techniques we used, and those we adapted , to achieve a successful transition to scrum-based development. We will focus on the benefits and difficulties of building and maintaining offshore agile teams, and provide some insight into overcoming the challenges of offshore agile development.

DownloadOffshore scrum: A case study in lean thinking

Lamentations of flaccid Scrum and a case for SINO

I’ve been updating myself on the activites in the Prince2 camp to update this project management framework. One thing that stuck is the lamentations about the large number of PINO projects. PINO is an acronym (actually an initialism) for Prince In Name Only. In the Scrum world this has commonly been called ScrumButt, drawn from “we’re doing Scrum, but…” as well as the frequent desire to kick such teams in the butt!

Martin Fowler, one of the Agile Manifesto signatories has blogged recently on “flaccid Scrum”. FWIW, I agree with him.

We must constantly remind ourselves (and those whom we seek to influence) that:

    • Scrum is silent on which “software engineering” practices to use, but not on their use.

 

    • We must continuously assess our way of working against the Agile principles.

 

    • Undone work (aka technical debt) will continue to cripple delivery of value as long as we continue allow it to accumulate.

 

    • Scrum is just a tool to expose deficiencies and dysfunction in the team and the organisation – the problems remain ours to tackle and solve.

So while we continue to battle our demons, how about honestly calling some Scrum implementations SINO (Scrum In Name Only)?