Reduce system complexity, Distill important elements, Abstract component layers
I have written and spoken about simplicity many times. The reason itself IS simple. Most of the problems and challenges I have encountered in my career have a root cause of a too complex solution design or people process.
Complexity is defined by a combination of many simple things, each of which is transparent and easy to understand. Complexity can quickly devolve into complicated which is often opaque and difficult to understand.
My first questions about a problem seek to break apart complexity make things simpler. To decompose systems, keep asking the question can it be simpler? But remember one of my favorite musing of Albert Einstein “Make things as simple as possible, but not simpler” . Wise man
One advantage of simplifying of an issue, set of objectives, or parts of a system is that abstracting the pieces allows teams to view the whole and not just the details.
Abstraction allows viewing things from a different vantage point, a different point of view, focus or dimension. Different perspectives often provide insights that were not accessible previously.
Complex systems can also be broken down into independent groups, factors, facets or layers. A major value of this is to separate concerns into independent buckets of activities or capabilities.
This is exactly what numerous business management domains or perspectives do. It is also what technical standards layers and dimensions do. An often overlooked benefit is that domain specific methodologies and practices have superb applicability to other completely different problems
As the world moves faster, innovations much likewise move faster. Complicated solutions will be replaced by those that are simple and quick to implement. Never before has “Perfection is the enemy of good” been more relevant.