On Abstractions: Simplify by omiting unimportant details and writing deep modules
Modular Design Good software is almost always decomposed into modules that are relatively independent of each other. Independent modules makes congitive load easier on the developer working on the software. In an ideal scenario this independence is hard to achive. A good guiding principle to create best modules is to write deep modules. Deep Modules Shallow Modules