A module's quality can be reasoned about as a ratio: interface complexity is the cost and the useful functionality hidden behind it is the benefit. 'Deep' units (small interface, large implementation) create leverage; 'shallow' units (large interface, little functionality) add system complexity without any offsetting leverage.
Gives a concrete, comparative criterion for deciding whether to split an abstraction or leave it whole — directly applicable to designing agent tool surfaces, service boundaries, and library APIs where interface surface is what actually consumes context, tokens, and model attention.
Any interface exposed to a consumer (human, code, or an LLM) should be evaluated as benefit (capability) divided by cost (surface area the consumer must learn, hold, and choose among). Applies to tool schemas, prompt-visible APIs, config options, and CLI flags.
Interface complexity is the cost; useful functionality provided is the benefit.
Shallow classes have large interfaces with little functionality underneath, adding system complexity without providing leverage.
Deep classes have simple interfaces with immense functionality hidden below, providing strong leverage against complexity.
File I/O interface in Unix/Linux with only 5 functions hiding hundreds of thousands of lines of kernel complexity.