Information Hiding
The concept of information hiding is central to creating deep modules in software design. Ousterhout emphasizes that each module should encapsulate specific pieces of knowledge, which represent design decisions. This knowledge is embedded within the module’s implementation but does not appear in its interface, making it invisible to other modules. For instance, the details of how to store information in a B-tree or how to implement the TCP network protocol are hidden within their respective modules. This approach simplifies the interface, reducing the cognitive load on developers who use the module. Ousterhout states, 'The interface reflects a simpler, more abstract view of the module’s functionality and hides the details; this reduces the cognitive load on developers who use the module.'