I have been reading Malcom Gladwell’s Outliers, and in it he discusses the events which lead to plane crashes. Gladwell explores the plane crashes of Korean Airlines to demonstrate that cultural legacy is important to understand success factors. One interesting point he explores is the communication required in the cockpit between the captain and the co-pilot.
Interestingly the flight deck of large commercial planes, like the Boeing 747 is intended to be flown by 2 people and it works best when you have one person checking the other, or both willing to participate. “It’s .. clear that when you have two people operating the plane cooperatively, you will have a safer operation than if you have a single pilot flying he plane and another person who is simply there to take over if the pilot is incapacitated”. Apparently, and surprisingly, most crashes (of the Korean Airlines) occurred when the captain was piloting the plane (someone who has many hours of experience), as opposed to the co-pilot (who typically does not have as much experience). This is because if the senior captain sees something wrong that the co-pilot is doing, then he will issue a command to the co-pilot to correct the situation. However, if the co-pilot sees something wrong he will not issue a command to his superior officer as a command, and will either hint at or suggest a correction. It is clear that clear communication is the essential ingredient to correcting otherwise fatal sequence of events*.
Unfortunately for the crew and passengers aboard the fatal Korean Airline planes, Korea has a culture of high respect for authority expressed in both their customs and their language. So, the cultural forces behind the Korean co-pilots makes it nearly impossible for them to speak up and correct the captain, even when they know that the captain is in the wrong (read the book - the black box recordings are amazing). What turned Korean Airlines around? They realised that the problem was not to do with the experience of their pilots or the maintenance of the planes, but that it was this cultural force which was at fault. They hired some help, enforced English (which does not have an inbuilt respect for authority) as the only language which could be used in the company, and as a result helped the co-pilots have the confidence to speak up when there was a problem.
Now, don’t get me wrong - I find airline investigation to be truly fascinating (have you ever read about the lead up to the flight on the Challenger? It wasn’t just the O-rings fault). But the most interesting take-home for me was how the cockpit experience parallels pair programming.
Pair programming is intended for 2 people, and works best when you have one person checking the other, or both willing to participate. It is clear that when you have two people working cooperatively you will have a safer (ie higher quality) software than if you have a single developer developing the work and another person who is simply there to take over. Pair programming works well when you have the less experienced developer at the keyboard flying the development, and the more experienced developer course correcting when the co-pilot makes a mistake. And just like the cultural forces that caused so many disasters for Korean Airline, the cultural forces of the development community leads to many pair programming sessions, crash-and-burning.
There are many people out there who only experience the forces that lead up to pair-programming disaster stories. It can be very dismissive of us to say that these people just don’t get it (and never will), or that they haven’t tried hard enough, but Gladwell has lead me to start believing that there is a cultural bias towards single programming. Take universities for example - you can be expelled for working collaboratively; individual results count, team work in assignments is often discouraged.
Korean Airlines managed to change their practices despite of their culture; I am confident that anyone who is willing to can change their practices to have a successful pair programming flight. The first step as always, is to acknowledge the problem.