Object oriented design is an old approach where code modules are grouped into "objects" that represent their "concepts." Handling judgement failure, the reason this works becomes apparent: Concepts of human language already have hierarchy: a pet is an animal species is a biological organism and a friend. Each of these categories have normal properties: things like having physical location, or feelings we hold for them, or needing common things to survive. When we associate our code with concepts we are familiar with, we produce a situation where inheritance provides for reuse without having to think about it. The categories into which the concept fit, already hold the information of what kinds of things are likely to derive in a useful, reusable way.