Written by Daniel Burkhardt/Ferdinand Steinbeis Institute and Eric Simmon/NIST
We believe “pattern” is a term that you can see nowadays at every corner, in neuroscience, artificial intelligence, data science, architecture, etc. So, it is everything but nothing? Because of this, practitioners have the impression that patterns are of no practical use and are more useful for academia. However, this is wrong. Architectural patterns or design patterns can be extremely helpful when it comes to solution design, especially in complex environments or new domains.
The method of creating patterns for an architectural design is a way of capturing repetitive experiences that were gained during previous design activities. Defining this knowledge in a reusable and detailed manner that supports the reader during the problem solution step is the goal of pattern definition. In general, patterns offer:
- Well-proven design and architectural experience
- An abstraction of a set of specific problems
- Common vocabulary and understanding of design and architectural principles
- A means to document software architecture
- Support for the construction of software systems with defined properties
- Help to build complex and heterogeneous software architectures
Patterns never stand alone. There are many interdependencies between patterns. In order to support system design, patterns need to be defined in a pattern system, also called pattern language, which represents diverse relationships. Requirements for the definition of a pattern system are as follows [1, 2]:
- Patterns shall form a sufficient base of a system and shall refine architecture but also support the implementation
- All patterns shall be described uniformly. The description should be detailed and support the comparison with other patterns
- Relationships between patterns shall be specified by showing if a pattern refines, exposes, replaces, or can be combined with another pattern
- Patterns shall be found quickly in relation to the user’s needs to solve their concrete design problem. Alternative solutions shall be explorable
- It shall show how constituent patterns are applied and implemented to construct software systems
- It shall support its own evolution, for example by new technologies. Existing patterns might change and new or missing patterns will be added.
The difficulty lies in the different domain-specific pattern languages, such as those from Cloud Computing, Distributed Systems, and Security. Identification of related patterns from other languages is challenging, especially without expert knowledge. Reasons for this include [3]:
- Pattern languages are mostly documented in static books
- Pattern websites only present one specific pattern language
- Pattern repositories are not organized in pattern languages
- Even if pattern repositories are organized in pattern languages, they do not provide cross-domain relationships
So the Pattern Task Group of the Industry IoT Consortium (IIC) has set the goal to identify and create design and architectural system patterns in the area of overall IoT system design. This activity spans different verticals from Healthcare to Energy, defining a common IoT pattern language that supports interoperability between solutions and enables reuse across domains. Thus, efforts are minimized and room for innovation is created. To formalize the identification, creation, and connection of patterns, the group defined a template for pattern definition, aligned it with system architecture design, and created a pattern repository. A guidance document supports you in identifying and creating your own patterns in your respective area. In regular webinars, workshops, and IIC internal meetings we discuss the next steps, give updates about our progress, and support various pattern activities with our expertise.
The latest pattern added to our pattern repository is the “System-of-System Orchestrator”. The pattern shows a solution that combines various systems that each have their own functionalities. In combination, they provide additional functionality that every single system can’t do on its own. A system-of-system approach resolves complexity by establishing connections between multiple systems. Check out the pattern to get further details.
In the next months, our main focus will be on publishing additional patterns in the pattern repository. We are currently focusing on the Energy, Edge, and Healthcare domains. If you are thinking about creating patterns for recurring problems or already have patterns available, feel free to reach out to us. We are happy to provide feedback and help determine if your patterns are eligible to be published in the pattern repository. By doing this, we are able to define a common pattern language that relates to various patterns. This allows space for innovation to be identified and focused on.
Sources:
https://blog.iiconsortium.org
https://hub.iiconsortium.org/patterns
[1] F. Buschmann, R. Meunier, H. Rohnert, P. Sommerlad, and M. Stal, Pattern-Oriented Software Architecture, Vol. 1: A System of Patterns. Wiley, 1996.
[2] Alexander, C. 1979. “The Timeless Way of Building,” Oxford University Press (1).
[3] Weigold, M., Barzen, J., Breitenbücher, U., Falkenthal, M., Leymann, F., and Wild, K. 2020. “Pattern Views: Concept and Tooling for Interconnected Pattern Languages,” Communications in Computer and Information Science (1310:SummerSOC), pp. 86–103. (https://doi.org/10.1007/978-3-030-64846-6_6).