Some years ago Harlan Mills proposed that any software system should be grown by incremental development. That is, the system should first be made to run. even if it does nothing useful except call the proper set of dummy subprograms. Then, bit by bit. it should be fleshed out, with the subprograms in turn being developed into actions or calls to empty stubs in the level below.
I have seen most dramatic results since I began using this Technique on the project builders in my Software Engineering Laboratory class. Nothing in the past decade has so radically changed my own practice, or its effectiveness. The approach necessitates top-down design, for it is a top-down growing of the software. It allows easy backtracking. It lends itself to early prototypes. Each added function and new provision for more complex data or circumstances grows organically out of what is already there.
The morale effects are startling. Enthusiasm jumps when there is a running system, even a simple one. Efforts redouble when the first picture from a new graphics software system appears on the screen even if it is only a rectangle. One always has, at every stage in the process, a working system.
I find that teams can grow much more complex entities in four months than they can build.
– Fred Books, No Silver Bullet