Choosing a good level of abstraction

Woman holding a black gift box in a red top, showcasing elegance and surprise.

Is opening the black box a valuable use of my time? Or is it nuance in the pejorative use of the word. Here is what I learned on choosing a good level of abstraction.

When analyzing a system, you have to make a choice. What to leave in, and which details to leave out. I struggled with that choice until I put the information into a hierarchy.

Super-system, system and sub-system

The hierarchy I found most useful is the tripartition into super-system, system, and sub-system. To find a fitting choice for the included boundaries sometimes comes naturally, but always depends on the context. My go-to heuristic boils down to the degree of interaction. As long as the interaction is stronger within a group of components than without, the group forms its own system (a more formal version is the nearest neighbor classification).

Now that you classified the components, can you influence their outbound interactions, or are the inbound interactions important for your decision-making? If not, you can stop with the outer system being left as a black box. Apply this procedure with recursion and you are nearly done.

In the last step, backtrack with insight in mind. Whenever you can get further valuable understanding from opening up a black box, unpack and draw more black boxes.

In the end, every black box should make sense —you can map their inputs to their outputs reasonably well. If some critic utters the truism, it’s more complicated than that, can they show the relevance of understanding the inner functions of the black box?

What is reasonable well depends on the context. For example, in software engineering, one values clean, easy to understand and communicate code. To that end, assigning a single responsibility to a closure, in which every component is on the same level of abstraction, helped me with modularity and isolation. For expressive communication, awareness of changes in the language and mental models give me a hint on where to set system boundaries when choosing a good level of abstraction.

Scroll to Top