Risk Management
Introduction
Software development is a risky business. It is important that risks are identified and dealt with in a timely manner. There are a number of generic practices that can reduce common risks in a software project.
Risk Driven Development
Make sure you start working on the most difficult parts of the system at the beginning of the project. These are the problems that will make or brake your project. It can be a tough performance requirement. It can be cutting edge or unknown technology. It can be parts of the system where the requirements themselves are unclear. By dealing with the biggest technical risks early, losses are minimized if some of the mission critical requirements or goals are unattainable and lead to the termination of the project. Even if it does not lead to project termination, it is still valuable for future estimations of project scope if the most uncertain factors are eliminated.
Iterative and Incremental Development
Do not build the whole system in one big sweep. Do a little at a time and make sure you have something to show the customer after each iteration. If it is the right kind of project, the customer might even be able to start using the incremental deliveries. Risk driven development simplifies the choice of requirements to be implemented first. Iterative and incremental development reduces the integration risk by running the project through all phases in each iteration. It also reduces the risk of misunderstandings between the customer and the developers in terms of project goal and requirements by continuously giving the customer working parts of the system to try out.
Architecture Centric Development
The engineer should focus on creating reusable languages and components in all stages of the project. If the project is terminated midway, the focus is changed radically, or a technology upgrade is necessary to meet the requirements, there is a good chance that major parts of the system can be reused in the new effort. Loss of invested money and time can be reduced. The overall project risk is lowered with an architecture centric development process.