Program built this way are in general very clean. As you go to the right,
modules become more specialised and more application independant. They
are reusable in other applications. As you go to the left, you are getting
more and more application dependant. Well this is the application itself.
One design philosophy is to get a module as specific as possible. Said
differently, the module receives parameter on the left and process them
and this is all it knows about the rest of the program. This can be
simplified with the qsort() C library function. It knows what to sort
from its argument and really do not care if the application is graphical
or text base or a daemon. It is sorting and this is fine.
You find quite a lot of reusable function and component in the C and C++
libraries. They are generally at the far end of the tree.
One unfortunate conclusion outlined above is that reusability is getting
worse while you move to the left of the graph. With large application
you find you are too often on the left side and creating
reusable components, framework components is difficult.