Principles of System Architecture

assignment for MIT/SDM

Good architecture is a legible and communicable map

related

able to be translated to another architectural language

Tag line

Descriptive

Prescriptive

Discussion (what it means or how it might be applied) {{renderer :wordcount_}}

A good architecture must function as a map for navigating a system. The actual system is the territory that exists in real life, and a good architecture must do the work of compressing the information in the system into a legible and communicable map.

A map must first be legible. This means that the map must not over-compress the information of the system. It must also exist in a form that can be understood by those who will implement a system, whether that is in a diagram, a document, a software representation, or some other form. Like the map of a territory, a good architecture must be usable as a form of navigation for those who wish to build or maintain the system.

A map must also be convertible to other maps. This means that the map should support conversions to new architectures, as required by those who may want to update the system.

Historical reference (philosophy, etc)

Albert Korzybski wrote about the ideas of maps and territories in mathematical semantics in his early 20th century paper. There have since been many versions of ideas like this. Similarly, this principle a loose interpretation of the idea that a system could be represented as a Category in Category Theory. In Category Theory, a functor is the morphism of one category to another, and thus leads to the idea that a well-structured architecture should behave like a category and be “functorizable”.

Optimizes mental resource allocation

novel

Tag line

Descriptive

Prescriptive

Discussion (what it means or how it might be applied)

A system architecture is a representation of the system that exists or will one day exist in real life. For that system architecture to be good, it must demand the mental resources of a user of that architecture. This means that it must sufficiently compress excessive details while avoiding over-compressing information that requires attention or is of greater importance to the system.

In other words, a good system architecture will require the user of the architecture to devote more mental bandwidth and focus to the parts of the architecture that have higher stakes or are more fragile.

When a system architecture achieves the proper balance of friction and seamlessness in the right places, then the user of the architecture can trust that architecture to sufficiently direct them, and the user’s mental burden can be offloaded. The user trusts that they do not need to create extra friction for themselves when things need to be double checked, the architecture will provide the appropriate amount of friction for them.

Historical reference (philosophy, etc)

This is related to the concept of Wu Wei (effortless action) in Taoism. It can also be likened to a “flow” state. Basically, a good system architecture makes the user of the architecture more able to achieve these effortless forms of work without compromising the quality of the system.

unable to be surprised ?

novel

Tag line

Descriptive

Prescriptive

Discussion (what it means or how it might be applied)

An architecture is, in some form, a model of the system that exists or will one day exist in real life. As stated by George Box (and many others): All models are wrong, some are useful.

In Bayesian probability, prior probabilities are used to

This means

Accounting for surprise means building architectures that integrate the prior probabilities into their model

Kaizen, architecture must either be flexible, or broad enough to account for adjustments in prior probabilities.

Historical reference (philosophy, etc)

Source

Surprise

Tag line

Descriptive

Prescriptive

Discussion (what it means or how it might be applied) {{renderer :wordcount_}}

When building any system, inevitably there will be unforeseen challenges or issues that come up. Understanding the “stream” of causality

Any modifications to the system architecture should always aim to find the root cause of these issues and solve the problem at their source. Another way of describing this is by saying that the system architecture should address the cause, not the symptom, of discovered issues.

If a system architecture only addresses known issues via band-aids directed towards the most visible symptoms, there will often be other manifestations of the root cause issue down the line.

In more complex systems, System Dynamics analysis is one way that these types of complex system interactions can be discovered and resolved in a way that accounts for the difference between addressing the symptom and the cause. How can we best fix unemployment

Historical reference (philosophy, etc)

Minimize sustaining energy

Tag line

Descriptive

Prescriptive

Discussion (what it means or how it might be applied) {{renderer :wordcount_}}

As stated before, entropy is the tendency of a system to progress from order towards randomness. To fight this tendency towards disorder, a good system architecture should aim to reduce the energy required to sustain the system. Energy here means all types of energy, including physical energy, human effort, or systemic energy. Any form of “entropy fighting” is considered energy output, and a good system minimizes the amount of energy input required.

An example of this would be two different systems, one that uses market forces to achieve its outcome versus one that uses government regulation. All else being equal, the one that uses market forces is a better architecture, because it uses the existing energy flow of the market to fuel its system rather than requiring the input of energy that is required by regulation.

Historical reference (philosophy, etc)

Source

Reduces side effects

Tag line

Descriptive

Prescriptive

Discussion (what it means or how it might be applied) {{renderer :wordcount_}}

An architecture is made up of sub-systems, and these sub systems must be built to reduce side effects outside of their intended functionality. The more side effects are produced by sub-systems, the more unpredictable and unmaintainable a system becomes.

Reducing side effects makes it easier to fight the tendency of a system towards entropy. One can think of side effects as “leaks” that may be harmless but have some probability of being harmful, especially at scale. Examples of side effects could be heat and sound in hardware systems, whereas in software it will mean any change to state caused by the function that is not the output of the function.

Historical reference (philosophy, etc)

While this principle exists in different forms in many areas, my version is mainly derived from the core concepts in functional programming. Like in mathematical functions, functional programming is designed around functions that are idempotent and produce no side effects, making them flexible modules that are easier to work with conceptually.

Source

Single responsibility

Prevent entropy with simplicity

Differentiates simple from easy

related

Tag line

Descriptive

Prescriptive

Discussion (what it means or how it might be applied)

The simplicity of an architecture is defined by the number of steps that are required to produce an output given an input.

The simpler a system architecture is the more entropy resilient that architecture is. This is because there are fewer parts that can break.

Historical reference (philosophy, etc)

Source

Maximizes immutability

Tag line

Descriptive

Prescriptive

Discussion (what it means or how it might be applied) {{renderer :wordcount_}}

Historical reference (philosophy, etc)

Source

Concepts

Mutability

Entropy

Representation