Uncertainty Principle and Software Development

Uncertainty principle in completely successful software development

Because software development is an intrinsically creative process it is expected that uncertainty plays an important role. In this blog post I will discuss an uncertainty principle in developing software.

Before and during a software development process it is not possible to simultaneously minimize the uncertainty of several development criteria.

Two of the most important criteria being:

  1. Cost

  2. User expectation

Cost is defined as the amount of money involved for completing the entire development project. One wants to be certain about the total cost at end of the project. User expectation is defined as the degree of compliance between the software functionality/usability and the biased view of the end user. One wants to be certain about complying with user expectation. For a software product to be completely successful both cost and user expectation must match an a priori estimate.

The de facto standard for keeping the cost within a predefined cost bandwidth is to thoroughly specify each and every part of the future software product with such a precision that the cost can be estimated with reasonable certainty. However, specifying every part of the software product, fixing the resulting specification, building the software and delivering it to the end user will definitely lead to poor user expectation. The end product of a specification phase will be a rather boring document that is almost a formal definition of the entire product, not friendly reading material for the typical end user. Therefore, the end user will not be able to judge the specification based on his own expectation of the final software product. Also, the formal specification process will not respect “scope creep” which is a typical phenomenon during a software development process. A user will be able to understand its own demands much better when actually using the final software product.

Matching user expectations can only be obtained by embracing a iterative agile development process using working software prototypes. During the development process the user involvement is absolutely mandatory for successful development, success being an optimal match between expectation and the final software product. However, an agile iterative development process conflicts with an a priori fixed cost quote for the end product. The development process being agile, hence assuming volatile specifications, does not lend itself for absolute cost statements.

We are left with the unfortunate conclusion that a completely successful software development project does not exist. We are forced to consensus, we will have to deal with uncertainty. We have to consider cost and user expectation simultaneously in order to handle this uncertainty principle. Each of the two criteria will have to be weakened in order to reach a proper balance. Hence, both an agile iterative approach and a formal specification are absolutely essential for building successful software products. An agile approach supported by a just-formal-enough specification methodology is a perfect compromise.

 

Dexels BV, Grasweg 67, 1031 HX, Amsterdam Noord, t. +31 (0)20 490 4977, e. info@dexels.com