23 January 2006

Personal Responsibility in IT

A mention on the Ottawa XP mailing list of the division of workload between a commercial pilot and co-pilot reminded me of a post I've been meaning to make for a while about personal responsibility in our industry.

I'm currently in the process of getting my Private Pilot Licence. I flew my first solo back in August, and to do so I had to pass a written exam known as the PSTAR. It's similar in concept to the test you have to pass in order to get your Learner's Permit for driving, although you need 90% to pass. The good thing is, though, Transport Canada provides you with all 200 of the possible exam questions, 50 of which are used on the test.

When I was studying, I noticed that fully 10% of the questions were along the lines of, "If a controller clears you for XYZ and you do not feel that it's safe, do you...", or "In a control zone, whose responsibility is it to...". In every case, it came down to the pilot in command being responsible for the aircraft, even if a controller has given you an instruction or clearance.

In October, I went over to the airport on a nice Saturday morning to practice takeoffs and landings, known as circuits. I did my pre-flight checks of the plane, with the flying school's owner there helping me move the plane out to be ready to taxi. Everything looked fine, and I taxied out and did 7 circuits. The rather odd thing was that I made 7 of my best landings ever, and was quite pleased with myself! After my last landing, I taxied off the runway and back to the ramp at the school.

As I pulled off the taxiway and onto the ramp, I heard and felt a thump below me and felt the plane dip a bit to the left. I thought I had hit a rut in the pavement, but realized very quickly that I had blown a tire! I killed the engine immediately and got out to have a look. The owner was on his way over to see what happened, and we looked at the tire. There was an enormous bald spot where the tire had blown, that had been worn right down past the rubber to the fabric lining. I missed it on my preflight, and the owner didn't see it either. We figured that it had been facing down when I had a look at the tires. Regardless, it was solely my responsibility to have ensured that the tires were safe for use.

If that tire had blown on the takeoff run or on landing, it would have been quite serious, with the plane and its sole occupant (that would be me) probably departng the runway to the side rather than up! In any case, it would have been a completely avoidable accident if I had just taken a better look at the state of the tires while we were pushing the plane out. Since that time, I have questioned another bald tire (though not as bad), and returned from a practice flight when an engine RPM gauge was acting wonky (that's a technical term). It turned out that the gauge was just affected by the cold, but it also could have indicated an oil leak.

For me, the analogy is that we as programmers need to have the same level of personal responsibility. If we see something that isn't right, we question it publicly or fix it. If we see code that doesn't have tests, we should write them. If we see opportunities for refactoring we should do it. If we see issues with our team, we should make them known and try to have them fixed.

If I didn't question the wonky RPM gauge and there was indeed an oil leak, I or the next person to fly the aircraft could have had an engine failure. Depending on when it happened, it could have been catastrophic and led to the loss of life. While most IT projects don't have the same life-critical implications, we still need to engender a sense of personal responsibility in our work.