Chapter 6. Learning to Drive
We need to control the development of software by making many small adjustments, not by making a few large adjustments, kind of like driving a car. This means that we will need the feedback to know when we are a little off, we will need many opportunities to make corrections, and we will have to be able to make those corrections at a reasonable cost.
Now we have the general shape of the problem - the tremendous cost of risk, and the opportunity to manage that risk through options - and the resource needed to shape the solution: the freedom to make changes later in the cycle without significantly increased cost. Now we need to begin to bring the solution into focus. The first thing we need is a metaphor, a shared story that we can turn to in times of stress or decision to help keep us doing the right thing. I can remember clearly the day I first began learning to drive. My mother and I were driving up Interstate 5 near Chico, California, a straight, flat stretch of road where the highway stretches right to the horizon. My mom had me reach over from the passenger seat and hold the steering wheel. She let me get the feel of how motion of the wheel affected the direction of the car. Then she told me, "Here's how you drive. Line the car up in the middle of the lane, straight toward the horizon." I very carefully squinted straight down the road. I got the car smack dab in the middle of the lane, pointed right down the middle of the road. I was doing great. My mind wandered a little... I jerked back to attention as the car hit the gravel. My mom (her courage now amazes me) gently got the car back straight on the road. Then she actually taught me about driving. "Driving is not about getting the car going in the right direction. Driving is about constantly paying attention, making a little correction this way, a little correction that way." This is the paradigm for XP. There is no such thing as straight and level. Even if things seem to be going perfectly, you don't take your eyes off the road. Change is the only constant. Always be prepared to move a little this way, a little that way. Sometimes maybe you have to move in a completely different direction. That's life as a programmer.