Always on the lookout for good analogies to help get my point across, I happened to tune into the Nascar roundup on Friday night. Jimmie Johnson was being interviewed about the upcoming event.
As I am sure you can now guess I am a Nascar fan. Most of my friends and colleagues can’t understand this because from the outside looking in, it’s just a bunch of cars going round and round on the same track – what could be more boring than that. Quite the contrary however, Nascar racing is anything but ordinary. It’s a sport that requires incredible concentration, teamwork and most of all careful strategy and agility to outsmart the competition.
In particular, this Friday night’s interview struck a cord for me. The upcoming race was the 600 miler, a grueling race requiring mental fitness of the highest degree. Asked what he and the team were focused, on, Jimmie promptly answered “We’re working on making the car infinitely adjustable.”
I thought about this for more than a moment.
In Nascar, minor adjustments to the car’s setup can make the world of difference and in fact, the entire race is all about tuning the car for the current conditions. Race conditions change from moment to moment. Even the track temperature can make the difference of an additional couple miles/hour.
Assess the environment
So the manager’s job is to assess the car’s setup for the track conditions, how the competition is doing etc. I personally can’t think of anything more Agile than this. 40 plus cars flying around the track at close to 200 miles/hour all trying to assess the environment and make adjustments to the cars in order to squeeze out that little bit extra which can mean the difference between winning and losing. This all happens under enormous pressure and in an incredible short space of time.
Build the safety net for change
But it’s not the speed that is the deciding factor; it’s the adjustments that are made during the race to deal with the race conditions at that moment that ultimately lead to the fastest times.
I think the same is true for Software Development. Teams need to ensure that the codebase is “infinitely adjustable”, i.e. changes can be made quickly and without fear that something is going to break, based on customers changing requirements, the market conditions, the competition etc.
I know of only one way that teams can achieve code agility and that is through extensive unit tests, Test (TDD) and Behavior Driven Development (BDD). Writing tests gives developers comfort in knowing that changes to the code aren’t going to break the code. Developers that have this safety net are better positioned to put their company in a winning position. Companies never know where the next competitor is going to come from and what their strategy is going to be. The only certainty in life is that nothing stays the same. As a result you need to position yourself to be able to deal with change. The teams that manage this best are inevitably most likely to success.
I hope you find this analogy useful. I know it helped put things in perspective for me.