Hierarchies and Abstraction Two of the most effective general means of managing complexity are the use of hierarchies and abstractions. A hierarchy is a tiered, structured organization in which a problem space is divided into levels that are ordered and ranked. In a hierarchy, you handle different details at different levels. Using hierarchies comes naturally to most people. When people draw a complex object, such as a house, for example, they draw it as a hierarchy.
Abstraction is also a mean of reducing complexity by handling different details at different levels.
Any time you work with an aggregate entity, you're working with an abstraction. Abstraction is a more general concept than hierarchy. It can reduce complexity by spreading details across a loose network of components, for example, rather than among a hierarchy's strictly tiered levels. Programming productivity has advanced largely through increasing the abstractness of program components. Fred Brooks argues that the biggest single productivity gain ever made in software development arose from the move from machine language to higher-level languages.