In the software development process, the top-down and bottom-up approaches play a key role. Top-down design was promoted in the 1970s by IBM researchers Harlan Mills and Niklaus Wirth. Niklaus Wirth, the developer of Pascal programming language, wrote the influential paper Program Development by Stepwise Refinement.
Top-down is a programming style, the mainstay of traditional procedural languages, in which design begins by specifying complex pieces and then dividing them into successively smaller pieces. The technique for writing a program using top–down methods is to write a main procedure that names all the major functions it will need. Later, the programming team looks at the requirements of each of those functions and the process is repeated. These compartmentalized sub-routines eventually will perform actions so simple they can be easily and concisely coded. When all the various sub-routines have been coded the program is ready for testing. By defining how the application comes together at a high level, lower level work can be self-contained. By defining how the lower level abstractions are expected to integrate into higher level ones, interfaces become clearly defined.