SDT Conference 2011, London Position Paper
An Empirical Approach to Reducing Uncertainty
Uncertainty is a problem at many different levels in most software projects. For example consider these questions:
- What should we build?
- What can we build?
- How many different ways can we build it and what will each option cost?
- Communicating about what we’re going to build and how, is difficult: how can I know that people understand what I’m writing?
- How do we get to market quickly with an acceptable feature set?
- Can we afford to maintain our code?
Each of these difficulties can be helped by thinking empirically - with scenarios and examples. Developing test-driven software can help in a number of ways, but we need to consider that different kinds of projects cope with different kinds of uncertainty.
Here are two example project types with different kinds of uncertainty:
1) In a banking project there may be more uncertainty deciding what exactly the system should do and what the exact policies should be. By contrast the technologies used to develop the system may be quite conservative.
2) In a mobile data system it may be clear what the system should do but require a greater deal of technical investigation (for example, spike solutions with new and undocumented hardware) to establish whether it can be done and what it would cost.
A concrete, empirical acceptance-test driven approach encourages people to concentrate on discovering what we need rather than speculative design.
I’m interested in technologies and methods that help people to think concretely and empirically about what systems should do. Specifically that means:
- acceptance test-driven development, example-driven development and similar approaches, and
- systems with a REPL (read, evaluate, print, loop), image-based systems (and development environments like eclipse that provide the illusion of one) and similar technologies.