Deep and shallow modules:

The best modules are deep: they allow a lot of functionality to be accessed through a simple interface. A shallow module is one with a relatively complex interface, but not much functionality: it doesn't hid much complexity. Interface is a cost (you want to reduce it), functionality is a benefit (you want to increase it)

A Philosophy of Software Design
from John Ousterhout 📕