Of course you specify what your code needs to do before you build the implementation. Don't you? Here are some possible ways that this may be done: 0. Not at all. ''[Does anyone know how to get a list to start at 0?]'' 1. Using notation (graphical, textual, mathematical) in a document, such as UML or Z. 1. Using lightweight declarative programming constructs, such as DesignInIdl 1. Using heavyweight declarative programming constructs, such as an Eiffel class with contracts fully defined on all its features. 1. Using tools to describe the behavior required by the component, such as CodeUnitTestFirst.