The Tao of Software

Monday, April 16, 2007

Shih

In trying to understand the Tao of Software, it would be helpful to have some understanding of Tao. Before I can jump into that, I need to explain a fundamental concept found in The Art of War called: Shih (pronounced shir, where the i is silent.)

The Rearing Serpent sports in the mists,
The Flying Dragon rides on the clouds
But when the clouds are gone and the mists have cleared,
They are no different from earthworms.

Shih is a function of a particular configuration of circumstance. The text says that knowing shih is like being able to roll round rocks down a large hill at your enemies. Gravity, in conjunction with an abundance of rocks lets you harness the power of that configuration and be victorious. Most people can figure out that much. However, circumstances change. To stick with this analogy, suppose it rains and all your stones get stuck in the mud. They lose their effectiveness as a weapon and the shih of that particular configuration (rocks up on a hill) is no longer available to you. Instead, you need to look to harness the power of the new configuration, like damming up some of the newly formed rivers so you can unleash a torrent of water as your enemies approach.

In modern day terms, we are less susceptible to changes in the weather but perhaps we can see a parallel in rapidly changing market conditions. A new regulation is passed, a well financed competitor moves into your space, the talent pool dries up or key people leave the company. To go on doing busines the way you've always done, is certain death.

As an software professional, we no longer have the "luxury" of being able to plan out our products 3 years in advance. The market moves too quickly and when push comes to shove, customers don't typically know what they want until they see something similar. As such, we can never afford to set any plans in stone. The best we can do is build something that's close to the specification and then return back to the customer to find out what they really wanted. In software, the forms we deal with are not rocks and mountains but classes and functional dependencies. As the requirements change, we need to be able to affect those changes on an existing system with as few modifications as possible. A well factored web site will allow you make adjustments to a single CSS to alter the entire look and feel of the site.

We pursue an agile development methodology because we understand that changing market dynamics (shifting shih) will alter how our customers will use our products. Harnessing that new configuration will give us a greater ability to compete in the market. Ignoring it will lead to our demise.