Introduction to Monte-carlo Simulation for Software Development – Forecasting and managing software development project risks & uncertainty
Monte-carlo analysis is the tool of choice for managing risk in many fields where risk is an inherent part of doing business. This paper examines how to use monte-carlo techniques to understand and leverage risk in Software Development projects and teams.
For software development, it is often necessary to estimate a project upfront in order to get project approval, obtain budget and hire the correct team size and skill-mix. This is often at odds with the Agile development methodology where full upfront design and specification is avoided, and delivery happens in small iterations until a backlog is completed. The desire to work iteration to iteration and choose a finite level of work each cycle is compelling, and it does un-deniably bring value to production earlier than a pure waterfall approach.
However, the fact still remains that in order to provide any value to an organization, a finite minimum level of functionality (work) needs to be delivered by a preferred date, within a budget constraint; very few companies will sign off on a project that has no target date, and an open budget. Often delays incur high cost; not just development costs, but also as competitors launch new feature first, or take an increasing market share. Even with Agile teams it is important for any development manager or organization to be ready to answer the following questions on an ongoing basis –
2. What is the likelihood of releasing by date x?
3. What resources do you need to hit date x (money equals people, so the question is often how much more money do you need to hit date x)?
This paper introduces a technique for answering these questions given the risks involved in software development and delivery. Monte-carlo analysis is a proven technique for determining the likelihood of an outcome in the face of many difficult to measure input criteria. Monte-carlo analysis doesn’t completely eliminate any risk, but it does give a much higher degree of satisfactory answer than the plain guesses and gut feel that is employed today (as to release date) in many software projects.