David Parnas described two principles for the proper use of modules:
- 
One must provide the intended user of a module with all the information 
needed to use the module correctly, and with nothing more.
 -  One must provide the implementor of a module with all the information
needed to complete the module, and nothing more.