Top down design: A top down design approach begins by identifying the main modules of the system, decomposing them into their lower level modules and iterating unless the desired level of details is achieved. This is stepwise refinement; initialising from an abstract design, in every step the design is refined to a more concrete level, unless we reach a level where no more refinement is required and the design can be executed directly.