A common way of solving a problem is to break it down into conceptually simpler sub-problems (and so on). This is often a good way of constructing a program: eventually the sub-problems are small enough that you can write the functions.
You can use dummy functions to let you get on with the development: suppose you need to sort some data but, at the moment you cannot recall a suitable method. Put a dummy sort in the code and carry on as though it really worked.
Functions are thus a natural consequence of top-down design.
maspjw@