When an organization or individual engages in solving a problem or achieving a goal by investing in software development it can feel like a completely foreign endeavor. For some it's scary, for others it's unfathomable, but at the end of the day everyone wants results.
I'm going to let you in on a little secret, the most successful development endeavors only require a focus on the results! That's actually easier said than done. The majority of the software development world has become obsessed with what goes in to the process instead of what comes out. This leads to discontent, waste, and sometimes failure!
Arnold Schwarzenegger attributed his success at body building to having a crystal clear picture in his mind of what he wanted his body to look like. He set out to sculpt his body with a vision of success. We should start with a vision of the organization we want to become and work backwards to get there. Developing software may be a piece of that, it may not. If we don't have a vision, how will we know what direction to take?
The following are a set of recommendations, questions and techniques to elicit a vision that produces results.
If you're already thinking about what the software will look like, what buttons it will have, what information it will present, what it will do, stop! It's impossible to prescribe effective solutions before we diagnose the situation. You never know, we may not even need software!
Customers are the reason we're in business. Any plan to expand an organization's impact has to start with the customer. Here are some questions to consider.
Determine the organization we want to become. Having a clear target in mind makes it much easier to get to the destination. Ask the following:
Don't keep the vision a secret. Collaborate with as many individuals (internal and external) as possible to draw upon a larger creative body. Share it with anyone involved in achieving the vision, empower them to make decisions. Challenge the vision. Everyone will be pulling in the same direction.
Visions are often grandiose. They're a set of ideas to achieve a higher organizational purpose. These ideas need to be refined. The best way to refine ideas is to understand their value. With a clear picture of value it's easy to cut aspects of insignificant value and enhance others to maximize the value. Value is the only way to ensure the endeavor is worthwhile and will receive the proper support to be successful.
Brainstorm with everyone involved. What is the potential tangible value and potential intangible value? What value will this create for customers? Monetarily, what will this do to sustain our organization so we can continue to serve our customers? Nothing gets to the point like money.
It's equally important to qualify the intangible impact on aspects like morale, relationships, communication, satisfaction, knowledge, goodwill, and trust.
Doing this value analysis collaboratively ensures everyone is on the same page. It also provides a foundation to fine tune the details of a plan to attain the vision.
If someone is dying and you're driving them to the emergency room would you stop to mail a letter, sit down to eat dinner, or for that matter, stop for any reason? Surprising as it sounds, I constantly see people lost in so many "nice to have" ideas that by the time they get to the emergency room, their vision is dead! Don't let your vision die!
Software is expensive to create and it can be even more expensive to maintain and adapt to new market demands. The only way to reduce cost is to minimize our efforts while maximizing our results. Cut out all the pit stops, detours and diversions on the journey toward the vision. Cut out things that are of marginal value. We should focus first on what is of high value. If there's time left over we can tackle marginal aspects.
On the way to the emergency room we wouldn't bother ordering a town car if we had a completely functional station wagon idling nearby. Nor would we charter a private jet or a yacht. Don't add unnecessary complexity to getting from where your organization is today to the vision of your future.
Complexity comes in many forms. It's better to remove complexity from existing processes before we seek to improve them with technology. Take the time to trim down existing processes. Automating unnecessary complexity significantly increases costs and increases the probability of failure.
As a bonus, removing complexity often negates the need for automation! Sometimes the existing process is just overly complicated and once simplified is no longer a burden.
The best way to know if our efforts are working is to have a means to measure progress. I like to think of this as taking a road trip. We can look at a mile marker to get an idea of where we are, we can estimate the mile marker of our final destination and then we can ensure we're making progress by periodically checking the mile markers. This is an oversimplification, what's important is that we routinely check our progress toward the vision.
Sometimes these will be quantifiable metrics but many times these will include judgement, especially with regards to aspects that produce intangible value.
Here are some questions to consider:
The most important thing to understand upfront is the vision, the value of the vision, and how to measure progress. Digging much deeper than an initial plan to get there is often wasted time. No one ever knows what is necessary upfront. Plan to learn and adapt to what you learn.
This is why the vision is so important to understand and solidify upfront. The vision is the target. The path to get there is irrelevant and we can't map it out 100% up front.
When time is spent upfront, beyond the vision, it's best to focus on risks and uncertainties. Analyse these just enough to mitigate the impact.
Handoff happens when one group throws something over the proverbial wall for another group to work on. Feedback and communication suffer. Misunderstandings have drastic consequences. The "builders" can't make critical trade offs and decisions about what to build based on the vision. They can only decide based on a plan that may not even achieve the vision (see Plan to Learn). At best this leads to sub-optimal results and excessive waste. At worst, it leads to failure.
The most common form of handoff when building software, and one of the number one reasons why projects fail, is when one group decides what to build and another blindly builds it.
Pretend computers have yet to be invented. How would we achieve our vision without them? Then, see where technology would be a benefit. No solution involving technology has to be 100% technology.
Happy workers make happy customers that sustain organizations. At the end of the day, technology serves to free creative resources to do what they do best: think, use judgement and make decisions. How can the vision be designed to increase the impact on employees? How can it free employees to use their creative power to further the organization?
This list is by no means comprehensive. Before we create software we need a clearly defined vision so we can see where the software fits (and doesn't fit) into that vision. Software itself is only a means to an end (the vision).