Tuesday, January 17th, 2017
Software development is a complex human enterprise carried out in problem domains and under circumstances that are often uncertain, vague, or otherwise incomplete. Development must progress, however, in the presence of those uncertainties.
The world is uncertain. Software development is uncertain. Decisions still need to be made, and the organization that makes the best decisions thrives.
“For a new software system, the requirements will not be completely known until after the users have used it.” – Watts Humphrey‘s requirements uncertainty principle.
Some teams start accumulating statistics of how long it took to do its work, in order to use this historical information to be more accurate when estimating new functionality at the start of every iteration. But software development is unpredictable. The past does not predict the future, since software development is different each time. The statistics database will not be useful.
The past does not predict the future.
We all want certainty, but it is often unobtainable. However, we can act intelligently, make good decisions, and constraint our risk. That is empirical software development in a nutshell and why developing small pieces fully functional in short iterations (maximum of four weeks) reduce risk. At the end of each development cycle, the software should be demonstrated to the users to obtain feedback on its functionality and suitability.
Summing up: An iterative approach will continuously reduce project risk from the outset. The reason why, is that it forces the team to address the most important aspects of functionality and to resolve high risk issues at an early stage.