Sun, 18 Feb 2007
Two interviews with me recently went online. The first, at On Ruby, is about Ruby, amazingly enough. Also about Everyday Scripting with Ruby. The second is from Dr. Dobb's and is mainly about testing in Agile projects. A lot of overlap with this blog.
While I'm talking about metaphors...
A very long time ago, I learned to fence. What you see above is a lunge. A lunge moves you from a defensive posture to an attacking one—you're trying to stab the other person. But notice that the figure is balanced. Its center of gravity is between its feet, and it could remain in that position without tipping either forward or back.
If its opponent counters the attack and launches a counterattack, it could recover backward by pushing off the front leg, snapping the back arm up, and reassuming the original en garde position:
But suppose the opponent retreats away from the attack. Then our lunging figure can recover forward: keeping the center of gravity as is, pull the back leg in and curl the back arm. Now it's ready to keep pressing the attack: it can lunge again or move forward in a more guarded way.
The important thing here is that—despite the failure of the original attack—the manner in which it moved forward allows it to keep moving forward.
Software teams often seem to be unable to recover forward. If they make a wrong decision, they land off balance:
scramble awkwardly backward (
Or they can bull forward along a path they would not have chosen, had they known then what they know now, jabbing repeatedly and getting more and more off balance:
What they're unable to do is make use of where they are to take what now appears to be the best path:
For those of us who are merely mortal, it seems the best way to be able to recover forward is to practice the right stance. Get yourself into lots of situations where you end up going down the wrong path. Instead of reverting backward to a known stable state of code, add and rearrange code to move forward.
A good way to get yourself into those situations is by only writing the code that's needed for the small feature you're working on right now. Then some later small feature will make you recover forward—and learn about how your stance is imbalanced.
Some people believe you can recover forward from pretty much anything. (Ron Jeffries' Extreme Programming Adventures in C# demonstrates recovering forward from a design that doesn't support undo to one that does.) Others don't. I don't know what my opinion is, but I believe most people could recover forward a lot more than they think they can, if they practice.
The trick is persuading them to practice.
Credits: I learned to move forward instead of revert from Zhon Johansen. The first photo is from Dr. Stephan Dann and is licensed under the Creative Commons Attribution-ShareAlike 2.0 license. The second photo is from http://www.tcnj.edu/~fencing/glossary.htm; there's no copyright notice, but it looks to be from an old fencing book.