# Make the interface deep

Principle `make-the-interface-deep`. A deep module hides a hard problem behind a small interface.

Judge a design by change amplification, cognitive load, and unknown unknowns. For consequential replacements, design it twice. Sketch two materially different interfaces, then compare caller burden, hidden knowledge, dependencies, failure semantics, and what each one deletes before choosing.

Read the full section in the [uncomplect skill](/skills/uncomplect#ousterhout-make-the-interface-deep).

## Related
- [Deep failure boundary](/terms/deep-failure-boundary)
- [Exception masking](/terms/exception-masking)

## Skills
- [uncomplect](/skills/uncomplect)

## Sources
- Ousterhout, John. *A Philosophy of Software Design*. 2018. [Link](https://web.stanford.edu/~ouster/cgi-bin/book.php). ([b10-a-philosophy-of-software-design](/bibliography#b10-a-philosophy-of-software-design))
