Tooling the Software Engineering Decision Making Process
When building a software product, there will be many points along the way when you (and the team) will have to make decisions.
Who has to make decisions through the lifetime of a software product? Literally everyone who is involved in a project. Developers must decide on implementation. Managers must decide on strategy. Architects must decide on technical direction. Designers must decide on look and feel.
Over the course of most software products’ lifetimes, thousands of decisions will be made, each one impacting much more than just “the matter at hand.” Being able to make decisions quickly and effectively influences the success of a software product from many perspectives. Quality and time-to-market are two of the most important metrics to mention.
So what are the key ingredients in making an effective decision? Data that lives within the context of the product and the availability of tools to asses the data and produce information.
Why would you need tools to help with assessing your system? Largely because doing things by hand and in an impromptu manner does not scale. More than this, tools (if properly designed) capture the thinking that went into assembling the ‘information factory’ and constitute a source of documentation for product aspects that the team considers to be important.
Would generic decision-making tools yield quality information to support the decision-making process? Usually no. Generic tools are not always capable of capturing the context. The better the context is captured, the more accurate the information we get from any analysis tool is.
The alternative path would be to take on a ‘not invented here’ approach and craft analysis tools that would capture the context of a project up to a ‘good enough’ (a measure that is also contextual) level. You can also make use of already available tools that you can adapt to your context (given that they can be easily, effortlessly adapted).
The key point is that you should allot development time to craft and maintain the tools that support the decision making process. Building and maintaining these tools must become part of the development cycle. When the time comes to make a decision, they will allow you to quickly assess the system, thus helping greatly with the decision process.