Requirements and establishing priorities

We're starting a small project for a new client, and of course, we're gathering the requirements for their solution before we dive into designing and developing it.

Of course, clients start off with a grand vision of what their new software will be able to do for them, and then they say they want all that for a limited budget, and can we have it done next week?  The overlying principle in any project is that there are really three main constraints: time, money, and quality. The scope of the project must fit into the triangle formed by those three constraints.

So, Joel got us started a couple of years ago on a great way to help clients identify the priorities for the requirements they have given us. When we arrive at a list of requirements, we then assess them in four areas:

  • Benefit - the relative benefit of having this feature or requirement in the final solution
  • Penalty - the relative penalty of not having this feature in the final solution
  • Cost (or complexity)  - the relative cost of implementing this feature
  • Risk - how much you don't know about implementing the feature

We use a spreadsheet, and assign values 1 to 9 for each of these columns, next to the requirement itself. A benefit of 9 means that it is high benefit to include this feature, a penalty of 9 means that it would be really bad if we didn't include this feature, a cost of 9 meant it would be really complex or time-consuming to implement this feature, and a risk of 9 meant we didn't know how well the feature could be implemented.

To come up with a ranking of each feature, we use a Priority column which simply totals up each of the four B, P, C, and R factors, and then we sort descending on the priority column (this works great in Sharepoint too). Sometimes we will weight the factors by multiplying each of the factors by a percentage (35% B, 35% P, 15% C, 15% R) but it usually works out about the same.

Now we have a list of features/requirements that have the most important ones at the top, the least important at the bottom (note that you may have to account for dependencies between requirements as well as the priority). We can apply "scope" to the list and cut off the bottom stuff according to the amount of time or budget we have (assuming you don't want to cut quality).

It works pretty nicely.

I recently used it at a company where we were involved in a SEPI project (Software Engineering Process Improvement) and they found it a really useful exercise. I was able to develop an iteration plan for the construction phase based on implementing the features in the priority order. The early iterations were the hardest, most time-consuming ones, and, frankly, some parts of some of the early features spilled into the next iteration. But our last two iterations had the trivial stuff scheduled in it, so we were able to make up the slack easily. We also had early releases of the most critical pieces, and were able to adapt to some of the changes that were identified by the early adopters. If we had scheduled it otherwise, we would not have made the deadline. We did end up dropping some of the lowest priority features, but no one cared - success criteria were based on the highest priority features, not the lowest "nice to haves".

 

 

3 Comments

  • It seems to me that a difficult, but less important feature (3, 3, 9, 9) = 24 (4.8 weighted) could easily outweigh a crucial but easy feature (5, 6, 2, 1) = 14 (4.3 weighted).



    Do you apply a "reality check" to the final priority list to make sure it makes sense? Or does this all wash out because the top 60% of the list is going to get done anyway?

  • Yes, a reality check is in order, and usually that's where the weighting can adjust things if they are considerably out of whack. Or just deciding to rank them differently...

  • Actually, the formula could be made a bit more comprehensive, yet the complexity of the formula doesn't justify the difference in the results - typically. Also, take into consideration that you will likely place a "weight" on the different perspectives of the requirement. By default, eveything has equal weight of 1. If you wanted to place more weight on crucial features over risk and cost you could give it a weight of 2. The formula would look more like:



    Priority = (Benifit*BenifitWeight + Penalty*PenaltyWeight)/(Risk*RiskWeight + Cost*Cost Weight)



    Notice how the above is slightly different but slightly more difficult to do on a piece of paper - but possible in Excel and in Sharepoint.



    If you wanted to get even more detailed - there is yet another method that takes into account the overall % of the requirement in the total number of requirements in a list. This method, however, does require Excel to calculate and impossible to implement without a lot of extra programming in Sharepoint.

Comments have been disabled for this content.