At this point in the project, you know what you are going to build, you have an idea of what you are not going to build, and your use cases provide the starting point to begin analyzing the structure of the software. This is the time to create a project plan, including a schedule. Prioritizing RequirementsTo prioritize requirements, consider at least these points:
PlanningPlanning is a continuous activity. Pragmatic planners know that you are most likely to succeed if you plan iteratively, starting at a high level and filling in the details as the project proceeds. RUP presents good advice on how to develop realistic plans. You develop them at different levels:
During the Inception phase we developed a high-level project plan. [6] We also developed a detailed iteration plan for just the next iteration. At the end of each iteration, you assess what you accomplished, adjust the project plan if necessary, and make a detailed plan for the next iteration. This process avoids unnecessary and often massive rework of plans.
Once we prioritized the use cases, we assigned them to a proposed series of iterations. We had a rough idea of how long the project would take, the functionality we wanted to put into the project, and some initial guesses on the difficulty. We used this information to create the project plan. Using guidance from RUP, and prior experience, we decided to plan for six iterations: one Inception iteration (our current iteration), one Elaboration iteration, three Construction iterations, and one Transition iteration. This initial plan is only an estimate. You may find later that you need more or fewer iterations. Starting with Elaboration, we scheduled use cases, or parts of use cases, for each planned iteration, through Construction. This activity is similar to a bin-packing problem. You want to put as many items as possible into the available space. Imagine that you are standing in front of a kitchen table and a set of items. You place items on the table in order of their value. To add an item, you find the appropriate place and push down towards the less valuable pieces to make room. Something falls off the edge of the table, but it's the least valuable item. If the items turn out to be larger than you expect, then again the least valuable items get pushed off the table. This is a simple way of understanding the value of iterative development. Figure 5.8 is an excerpt from the simple project plan we created. The items in the plan are taken from the iteration plan. The project plan "rolls up" the information in the iteration plans and provides additional information, such as planned resource allocation. After our Elaboration phase, we decided not to update our project plan because for our small project it would have meant duplicating work. As we have said before, this does not mean that we did not have a plan. It just means that we decided not to make it a physical artifact. For our project, there was not enough extra benefit to warrant the separate plan. Figure 5.8. Our initial project plan
Along with the overall project plan, which will constantly change throughout the project, we created a detailed iteration plan for our one Elaboration iteration. As in the Inception iteration plan, it contains a list of what we intend to do, who will do it, and when we expect it. It also contains a short description of how we will assess the success of this iteration. RiskRisk is a key concept in software development. Risks are those things that can cause your project to fail. [7] We want to build and deploy valuable software as quickly as possible. If we try to go too fast, we risk delivering software that has too many defects to be useful. If we go too slowly, we risk not delivering at all, or we risk the customer canceling the agreement. If we adopt new technology or techniques, we risk making mistakes. If we don't adopt new technology or techniques, we risk being left behind by our competition.
The Risk List is a key artifact in RUP. Like most useful artifacts, it is a living thing. You don't just make a list of risks, agree on them, and file them away. In fact, every time we ignored our own Risk List, we ran into trouble. You continually revisit the Risk List to ensure that you are working to reduce risk and that you can deliver working software to your customers. The Risk List can be informal. However, we recommend that you write it down, and keep it where people can access it, perhaps on a project Web site. Figure 5.9 shows a portion of our initial Risk List. The rank shows the risk's priority. When the rank is 1, we believe there is a high probability that the risk will be realized, and that the effect of that realization will be severe. A value of 5 means that the risk has little probability of occurring or the effect is not severe. If you create a large set of risks, you may choose to assign separate values to the severity of the risk and the probability that the risk will occur. Because we had a small set of risks, we decided to combine the two values. On our Risk List we also included:
Figure 5.9. Sample risks
Each team needs to adopt its own standards and decide how to use the Risk List. The important thing is to keep a Risk List and to use it to help your team on the path to success. |