If the essence of architecture is management complexity, then abstract, hierarchical, divide-and-conquer and evolutionary thinking are our engineers / architects’four most basic weapons to deal with and manage complexity.
Abstraction is defined in this way.
To simplify the representation or description of something, abstraction allows us to focus on elements and hide additional details.
In system architecture and design, abstraction helps us get our minds about big pictures and hide temporary details. The power of abstraction determines our position directly.It can solve the complexity and scale of the problem.
There is no essential difference between the software architecture design and the children’s building blocks, but the problem areas and scales are different. The architect first forms an abstract concept in the brain, then decomposes the sub-modules, then implements the sub-modules in turn, and finally assembles the sub-modules to form the final system. So I often say programming.And architecture design is building blocks, good architects by the impact of professional habits, the eyes of the world are modular assembly combined.
In addition to abstraction, layering is also the basic thinking weapon for us to deal with and manage complexity. In order to build a complex system, we divide the whole system into several layers, each layer focusing on solving problems in a certain field and providing services to it. Some levels are vertical, and they run through all other levels.It’s called shared layer. Layering can also be regarded as an abstract way to decompose system abstraction into several hierarchical modules.
3、Divide and conquer thinking
Divide and conquer (or split and merge) is also a general approach to dealing with and managing complexity. The following diagram shows a divide and conquer thinking process:
For a big problem that can not be solved at one time, we will first decompose the big problem into several sub-problems, if the sub-problems can not be solved directly, then continue to decompose into sub-problems, until the degree of direct solution, this is the process of decomposition (divide); and then assemble the sub-problems into sub-problems.The solution of the sub-problem is combined into the solution of the original problem.
People in the community are often discussing: architecture is designed. Or evolved? I personally believe, based on more than a decade of experience, that architecture is both designed and evolved. For the Internet system, it is basically a three-part design, seven-part evolution, and is evolving in design, performing.In design, an iterative process.
In the whole life cycle of Internet software systems, the early design and development account for only about three-thirds, in the latter seven minutes, architects need to adjust the architecture according to user feedback. I think architects should not only make use of their own architectural design capabilities, but also learn how to use user feedback.And the power of evolution drives the continuous evolution of the architecture. This is evolutionary thinking.
Of course, the architecture design at the beginning is very important, and the system is basically formed. At the same time, a good architect knows that a system that can constantly respond to changes in the environment is a viable system, and the quality of the architecture depends largely on its flexibility to respond to changes. So we have evolutionary thinking.The architect can consider the evolution characteristics of the subsequent architecture at the beginning of the design, and the ability to respond flexibly to change is the main consideration of the architecture design.
Nowadays, a new architecture methodology-evolutionary architecture is emerging in the community. Micro-service architecture is a typical evolutionary architecture, which can quickly respond to changes in market users’needs, and single-block architecture lacks this flexibility.
The essence of architecture is the complexity of management. Abstract, hierarchical, divide and conquer and evolutionary thinking are the four fundamental weapons for architects to conquer complexity.
With the four basic weapons of abstraction, hierarchy, divide and conquer, and evolution, you can design as small as a class, a module, a subsystem, or a medium-sized system, or as large as a company’s infrastructure, micro-service architecture, technical architecture, or even organizational architecture, business architecture, and so on.
Architecture design is not static, but dynamic evolution. Only a system that can cope with environmental changes is a viable system. So even if you have mastered the three basic concepts of abstraction, hierarchy, and partition, you still need evolutionary thinking to drive the architecture with feedback and evolutionary forces while designingContinuous evolution.
Architects, while focusing on technology and developing applications, need to regularly sort out their architectural design thinking. Over time, the way you look at the world will change radically. You will find that the world we live in is also built on the basis of abstraction, hierarchy, division and evolution. anotherThe formation of external architecture design thinking will have a significant impact on your system architecture design capability.It can be said that the depth of mastery of abstraction, hierarchy, divide and conquer, and the level of flexible application directly determine the complexity and size of the domain that an architect can solve. It is a watershed to distinguish between ordinary application architects and platform/system architects.