April 24, 2014
Fellow technical spelunkers,
The development landscape is littered with slippery slopes. Some design patterns are better than others; some are more complex than others. Some people are easier to work with, some harder to work with, some more rigid in following standards for standards sake, etc. The key with any project is to find that happy medium of simplicity and re-usability without sacrificing on clarity and functionality.
In a recent project, several ambiguous requirements left us in a state of trying to develop against a moving target, chasing our own tails, or whatever idiom you prefer. Because of this, it was difficult to do things as simple as specifying names of folders & files within the source tree. In essence, we were trying to come up with names for features before we knew what those features even were.
A common phenomenon known as Analysis Paralysis, or Decision Paralysis, can easily manifest itself in this situation. Developers are stuck between trying to decide where to place and define XYZ while trying to understand what XYZ is meant to actually represent. Imagine trying to decide how best to plant a certain row of flowers in your garden for an optimal color distribution in the summer – before you’ve actually decided where to place your garden in your yard and what shape and size it will be.
In the end, you can’t price the flowers themselves because you don’t know how many you need to fit the space, and you’re struggling with the size of the garden because you’re not sure how many flowers will fit in the space you haven’t decided on yet or what will fit into your budget!
Whew, what a mind bender! This hesitation can easily lead to reduced efficiency while discussion after discussion takes place to decide where to plant your new Kadupul Flower seeds your wife spent your life savings on – err, I mean, where to define the names and areas to start writing your code, or which 3rd party packages you should start leveraging.
In the end, the fact of the matter is that it doesn’t really matter. That is, the end result absolutely matters, but the stepping stones you take to get there, especially those baby steps early on, are simply not a big deal. Any and every development project is a living, breathing entity meant to grow & adapt to the needs over time, as those needs are eventually defined.
So take a shot at it, commit to a decision (after some thought, of course) with the full knowledge that it very well might be, and probably will be, the wrong one and keep going! And above all else don’t judge others too harshly over poor decisions that are made in the early stages. After all, hindsight is frequently 20/20. Besides, you might one day look over the revision history of those changes and realize you were the poor sap who made that awful decision over which you’re now shaking your head in confusion.
Keep your toques on!
Thanks to Billy Shall for the original post and concept of “analysis paralysis.”
Photo Credit: Michael Davis-Burchat on Flickr Creative Commons
Stay up to date with our email updates!