I'm teaching my 16-year-old daughter to drive. While I ride along, I think about software development, because thinking about imminent death and dismemberment gets a bit old after the first half hour or so. Here's what I noticed: When she is stopped and she needs to do something next, like turn, she starts turning before she starts going forward. This leads to cutting of corners, crumpling of bumpers, harm to wildlife, etc. When she is moving and she needs to do something next, like turn, she starts turning long after I would. She needs to get off course before she can see the need to correct. I think this is like me and design. When I was a little nipper, I would design ahead before I started developing. This lead me to have designs that were carefully optimized for things that didn't happen. When my designs started to lose their fit with the actual requirements of the software, it took me a long time to notice and correct. Mature (or at least maturer) design for me is to get going first, then react. The instant I see the design lose fit, I start correcting. The result probably looks from the outside like I carefully plan ahead, but I am "just" reacting. --KentBeck ---- When I taught my 18-year-old son to drive a year ago, the most important things to teach him where "G''''''oSlow" and "D''''''oStop". G''''''oSlow gave him the time to react, to chose direction, to relax, to listen to me. D''''''oStop gave me the chance to shout "STOP" in case of emergency and have him stop within a few meters. What do I want to say? Neither G''''''oSlow nor D''''''oStop are a problem in software development. So I think there is a limit to the usefulness of analogies. -- HelmutLeitner Similarly, I don't see the analogy. When driving, you are already well aware that you are turning before you make the turn. You should have already signaled the turn well before actually making it. The error here wasn't in up front design, but in incorrect execution. Actually, having the prescience to know that you have to go forward first before turning ''requires'' "up front design," because it is not the "most obvious and direct" solution to the problem. -- SunirShah