Have you encountered this also in your daily interactions with others? I mean the allmost automatic or intuitive Human reaction to complex problems is that they most of the time try to simplify complex cases by stripping things. Things that might at first hindsight be non-essential but at second hindsight are very essential.
Suppose you present a complex picture like the exploded view of the motor shown in the picture, the standard reaction can be to leave out details so people can have a better overview. This is where it can go wrong. If people (not you and me but all the others ofcourse) abstract complex things without knowing the essentials of the complexity, they might make the wrong (or sometimes even desastrous) decision. So the key to abstraction is that you translate a certain given complexity to a simpler viewpoint WITHOUT leaving out the essential aspects. In the example case, the abstracted picture could be a motorcycle where the exploded view of the motor is now merely an integral part of the total concept. But the details inside are still essential. And thus you cannot leave them out. Even if you think they are too complex or too costly or whatever.
I think Einstein got it right when he stated: “Everything should be made as simple as possible, but not simpler”. Map this to the exploded view of the engine and you know what I mean. So we should keep the complexity, not fight it, but abstract it only on communication level, not on architectural level! And that’s where communication skills can come in handy: if you can’t explain it to your grandmother or to your children, you should abstract your viewpoints, but not the architectural essentials! Leave the multi-layer approach (figure inspired by a Wikipedia article) intact! Happy decomplexing!
Our society is getting more complicated ( “ingewikkeld” in Dutch, as the picture to the left shows) by the day. And yet, we still are looking for ways to simplify things while the total complexitywill certainly not diminish. So we need to accept total complexity as a given and find clever ways to handle it. That is where abstraction comes in as one of the possible tools. It’s a favourite tool used by architects and designers. With abstraction you just hide certain complexity by abstracting it and putting a (virtual) box, domain, layer or whatever you want to call it, around it. Take the PC as an example: a highly complex device, both HW- and SW-wise but the dirty details have been cleverly hidden by it’s designers. So an average user does not need to bother with the internal complexity anymore. He or she can start adding extra new complexity on top of it. But abstracting also has drawbacks: we can loose oversight because we don’t understand the inner working of our black-boxes anymore. If they work, they work oke, but if they fail, we are in trouble. People who really understand what is happening inside these insane HW/SW ecosystems, accessed by black boxes we call PC’s are getting more and more scarce. And then there is society itself, societal complexity or the way we all interact. It is not so simple to abstract complex social interactions. So maybe in this domain, chaos science can help us a little. Consider The Emergence Principle in the splendid article Living on the Edge: “capable of rising to increasingly higher levels of complexity and order all by themselves“. Sounds like a possible (scientific) solution to handle societal complexity questions. But will it also work in our day-to-day life? The mummy picture originated here.
Ever seen a stereogram? Shown in the left there’s an example. It contains hidden (abstracted) visuals. Now try looking to your organization (which might very well be a complex social system) as if it were a stereogram. Now imagine that you are the architect that thinks remodeling or redesigning this organization is a fairly easy job, right? That’s because you abstracted out all social complexity (you didn’t see the real picture in the stereogram). What then remains is a cold, rational model of a lifeless organization. Now that’s very easy to remodel. After all, social aspects are not your problem to solve, right? Well, I don’t agree. Architects should model or design organizations built for human beings first, and not only for organizational models that are mathematically or economically correct. Architecture that was designed for human beings should after all work the best of all. So if you in your architecture work are abstracting out a certain unavoidable complexity (for example social complexity, especially in larger organizations), chances are that your design will be lousy because you distributed complexity in a wrong area (abstracted it “away”) instead of coping with it in your design. By coping with it in your design, you leeave the design complexity to yourself instead of to your customers.