After you've defined all the actions, you need to decide which actions to implement and in which order. This is an absolutely crucial question because no one in any team has unlimited resources. Therefore, you must establish a priority. In a corporate environment, those priorities are often based on who cries loudest. This is wrong and leads the software engineering process into a spiral of chasing an unreachable goal. Just as when a dog chases its own tail, this way of doing things is not efficient.
The best way of knowing which action needs to be implemented is to calculate the value. The trick is to convert a gut feeling into a quantitative value. The calculation does not remove the gut feeling; rather, it converts the feeling into a really strong or really weak one. A really strong or really weak feeling is a number value. When you combine this value with other factors, you create a valuation.
When you were defining the action, you had to define the time to implement and its associated risk. However, some additional factors, which help determine the implementation viability, are required. For example, attributes that can be associated with the action XML tag could be as defined in the following list:
political : If you implemented this feature, would it add to the project's political viability? A low value indicates no political advantage, whereas a high value indicates the opposite .
benefit : If you implemented this feature, would the benefit of the project increase? A low value indicates no benefit to the project, whereas a high value indicates the opposite.
cost-of-implementation : If you implemented this feature, would the cost of the project significantly increase? The increase in cost is based on costs other than labor, such as testing by an external institute or the purchase of additional hardware. A low value indicates a high cost, whereas a high value indicates a low cost. It would seem that a low value equals high cost is opposite to how the value should be defined. This is because a low cost of implementation is beneficial and hence results in a higher value. The end comparison value must be as high as possible to be considered a candidate for implementation.
Calculating the viability of an action takes three steps. The first step is to make a calculation based on the time to implement and the risk associated with the implementation. The second step is to make a calculation that combines all of the additional factors. The last step is to combine the first and second steps so that you come up with an end number.
Only two factors are involved in the first-step calculation are time to implement and risk to implement. When you're attempting to define a good situation, which has the highest number, you want the least risk. A good action would be both short and risk free. Equation A.1 represents a good calculation.
((([time to implement] / [max time to implement]) * [constant 1] / ([constant 1] + [constant 2])) + (([risk of implementation] / [max risk] * [constant 2]) * [constant 2] / ([constant 1] + [constant 2]))) * 100
For the calculation to be effective, the max values have to actually be the maximum values of the project. If they're not, the mathematical calculations will be incorrect and meaningless, which is very important to avoid. The constant values are used to balance the scalings.
The idea in Equation A.1 is to normalize the time to implement and the risk of implementation factors. Normalization is the process of taking a number and making its value between a fixed band of ranges. Normalization is important because it allows you to combine other factors without having one factor dominate the result. The purpose of the constants is to weigh one factor over the other. For example, a higher value for constant 1 than constant 2 means that you desire a better time to implement. The last multiplication of 100 converts the scaling to a value between 0 and 100. Once the equation has been applied to various actions, a higher number means a more desirable action.
The second step of the calculation requires you to combine the additional factors and apply normalization, as we did in the first equation. Equation A.2 demonstrates this.
(([factor 1] / [max factor 1] * (constant 1 / (constant 1 + ... + constant n)) + ... + ([factor n] / [max factor n] * (constant n / (constant 1 + ... + constant n))) * 100
In this equation, each factor is normalized against the maximum value of the associated factor. Then we apply a weighting to factor in the importance of additional factors. In the Additional Factors section of this appendix, some weightings that could be used for the additional factors are: political 10 , benefit 30 , cost of implementation 20 . We developed these weightings by looking at an action that represents the weakest weighting. The weakest additional factor is political, which is assigned a value of 10. Then, the next weakest additional factor is considered and compared to the weakest additional factor. The question that you need to answer is how much more important the next weakest additional factor is in comparison to the weakest additional factor. In this example, the cost of implementation factor is twice as important as the political factor, which results in a weighting value of 20. This process is continued for all factors. A final consideration is to compare the individual weightings to each other. For example, consider if the benefit weighting is actually 1.5 times better than the cost of implementation weighting. If this does not correspond to your gut feeling, adjust the value.
We use this approach to weightings because it is easier to say an additional factor is two, three, or four times as important than another factor. It is harder to say if an additional factor is a half, quarter, or eighth as important as the most important additional factor than another factor. The second-step calculation normalizes the weightings, which therefore does not require the user to figure out if the distribution of the individual additional factors is mathematically correct. As with the first calculation, the second calculation includes a multiplication of 100 to the end result. This puts the additional factor value into the range of 0 and 100.
The third calculation combines the results from the first and second calculations to generate an end value. In the simplest approach, the two values can be added together and the result can be used to compare each action and determine which is the most important. While this approach works, it is susceptible to the problem of not having weightings associated with the first and second calculation. The simplest third-step calculation implies that you do not care more about the simpler-to-implement feature than the additional factors.
It is possible to normalize the first and second calculation results using Equation A.3.
([result calculation 1] / 2.0 * (constant 1 / (constant 1 + constant 2)) + ([result calculation 2] / 2.0 * (constant 2 / (constant 1 + constant 2))
A higher value for constant 1 means that you consider the best time to implement and lowest risk action to be more important than the best additional factor action. However, the third calculation is purely optional, as either implementation of the calculation is acceptable.
Some additional notes about the calculations:
The various constants 1, 2, etc., are only scoped to the individual calculation. Therefore, when you implement the equations, do not assume that you can reuse constant 1 from the first calculation in the second or third calculation.
Math is wonderful because it allows you to get the value when you want. Therefore, it is vitally important that if you modify Equations A.1, A.2, and A.3, they normalize and weight the data. Otherwise, the generated values will be meaningless. You can modify the calculations by using mathematical curves to highlight specific valuations of a factor. Math can be used to do anything you want, and therefore it is important to be objective when devising the formulas. If you fudge the formula or the data, you are only fudging your own decision.
Once you have applied the calculations, you will get a list of numeric values. The highest-value numbers indicate actions that should be accomplished (higher numbers indicate a higher priority). Based on these priorities, you can begin distributing actions among your team members .