Example Driven Development

Example driven development is the best name to cover acceptance test driven development, behaviour driven development and specification by example approaches.

The concepts of acceptance test, testing and a tester have been defined long ago. I have found that changing their meaning is difficult. Even when we talk about test driven development we have to spend a lot of effort to explain that it is not done after programming and not by the separate testers.

The same happens if we talk about specifications. The old school uses user stories as a new way of writing specifications, which could be then send to a separate development team. Collaborative design is not happening as it should.

Though I like the idea of programming with natural languages, I think that they are too abstract and too prone to interpretations. Examples are a good way to explain things unambiguously and in a way that both the users and programmers see useful. Behaviour is something that programmers talk about, but for users that might not be as clear as examples.

With example driven development I want to emphasize collaborative design where users and developers work together using examples to clarify how users interact with computer programs to achieve business benefits that pay the return on investment.

Traditionally we have specifications, tests and code written to different purposes. They should not just be consistent but the same. In agile tests are specifications and in behaviour driven development code is moving closer to the tests.

The ultimate goal might be that we have only one description of the program that can be understood by both the users and the compilers. That is one goal of visual programming. The lack of programmers has been tried to be solved by moving the work to users. This approach has not been very successful because building large programs requires a lot of logical thinking and solutions to huge amounts of details. Software designers are not endangered species but programmers might be if the abstraction level of programming goes up.