The difference between a Decision and a decision is simple. A Decision spelled with an uppercase “D” is one based on data, information and real-life experience. A decision spelled with a lowercase “d” is one made without data, information or a real-life experience. All too often I have seen decisions based on an individual’s feelings or opinions of a given situation. It makes me shake my head. In some cases, a business will use an algorithm or spreadsheet with embedded formulas to “choose” the best decision based on a set of desired requirements and associated weights applied to each requirement. For certain decisions, this might be the most appropriate way to assess the situation. For me, working to develop web-based software applications, it just doesn’t work.
The most common method of decision making during a development cycle I have come in contact with is the “committee” driven requirements analysis. During this process a group of usually high level managers (far from end users) sit down and work their way through a spreadsheet of requirements to decide which ones should be included in the next six-month iteration of development. In my experience, the only information included in the requirement column is the perceived expected behavior or outcome of the given feature or change. The end of this type of development cycle is usually followed by hundreds of hours of testing and arguing about how each feature should work, how it actually works and how we ‘thought” it would work. As well as two strokes, three heart attacks and a combined three square inches of newly exposed scalp for the male members of the team…
Every day I make decisions. Some turn out to be the right ones. Some turn out to be horribly wrong. Since I accepted the role of product manager rather than simply a project team member, I have put a great deal of thought around decision making. I ask myself questions like: “What information do I need to make a decision the right one?,” “At what point do I have enough information to make the decision?,” “Does the outcome of each decision I make effect the remainder of the product launch in a positive way?” I still can not answer all the questions I have about decision making. However, I have used the following principles to aid in making the right decision most of the time:
1.) Make lots and lots of small Decisions. When you send your developers off on a mission to complete a large section of code or forge an entire revision to an app in one shot, there are inevitably a lot of decisions that have to be made along the way. If your development team has to make these decisions on the fly, against an imaginary timeline, there is a large chance the decisions will be made without all pertinent information. It’s more likely each small Decision will be the right one if you use all the information available from the complete team at each point a decision is required.
2.) Keep the communication channels open between developer and subject matter experts. I recommend daily touch points of less than 15 minutes. Meetings are expensive, time consuming and often attendees are never prepared. I prefer discussions to take place at the programmer’s workstation while he or she is working on changes. This allows demonstrations of current and expected behavior to be shown immediately. Real information and real code turns into a visual aid. It is important all team members understand the purpose is not to meet the schedule. The real purpose is to launch an application people love to use. I might go as far as saying it should be expected that as you move from design to development, you’ll need to make lots of little changes along the way. I question any development cycle where there is little difference between the original designs and the product at launch.
3.) Test, Test, Test. After each Decision there should be some time spent to test it. Testing does not have to be a project in itself. Testing should be performed by both developer and the team member who is in the best position to interpret what will and will not benefit the end user. Testing at each available opportunity is essential to minimizing the amount of change required after a bad decision is made. For example, if a change is made and not tested, each change implemented from that point forward could require revisiting if it’s found the original change was in error.
These principles also contribute to a pleasure filled work environment by allowing each team member to work on what they love. Development does not have to sit in endless conceptual meetings, nor does the product management team need to wait months or weeks to debut new features. The three principles I illustrated above can and should be applied to any development scenario. Using these principles to govern product testing and design reduces our development cost and gets our product to users faster. And in the end, that’s what it’s all about.