By Daniel Burkhardt, co-chair IIC Patterns Task Group; Doctoral Student @ Ferdinand-Steinbeis-Institute; Co-Founder & CEO of Innothenics UG, Stuttgart, Baden-Württemberg, Germany
Intro to Patterns
Companies are characterized by highly competitive dynamics, uncertainty, and dependencies. Challenges require fast selection and integration of solutions based on technologies. Complexity hinders the definition of a clear vision and estimates a future value for a selected solution. Companies struggle with this and require guidance in the search for value-generating solutions.
Currently, a heterogeneous development of solutions can be observed. Proprietary solutions are developed for specific problems in comparison to open-source developments that are driven by communities. New technologies impact existing methods and lead to further progress in both camps. However, gaining an overview of specific designs and architectures of solutions is almost impossible. Companies are forced to search in their present ecosystem for support which keeps them in their usual way of thinking solutions but prevents innovation in finding new approaches.
Patterns provide an implicit and replicable view of how a system is developed. When experts solve a new problem in a given context, they do not develop a complete and distinct new solution. Rather, they recall a solution that has been developed already and reuse the essential parts of this solution to solve the new problem. The thinking in problem-solution pairs is common in domains like architecture or software engineering. Abstracting from these specific problem-solution pairs in the respective context and keeping the common parts results in patterns. If the problem arises again, the pattern will provide a solution. Thus, patterns offer:
- Well-proven design and architectural experience
- An abstraction to a set of specific problems
- Common vocabulary and understanding of design and architectural principles
- A means to documenting software architecture
- Support for the construction of software systems with defined properties
- Help to build complex and heterogeneous software architectures
In general, a pattern describes a recurring design or architectural problem that comes up in a specific context and shows an established scheme for its solution. The scheme consists of components and their relationships as well as how they collaborate [1].
We differentiate between two types of patterns – architectural and design patterns. Design patterns mostly describe a specific coding scheme, whereas architectural patterns describe the constellation of components as part of a software system.
- Architectural Patterns describe at high-level essential cohesive elements of software architecture. In contrast to design patterns, architecture patterns focus on major parts of a system and visualize how they are assembled and organized. For example, it emphasizes message or data flows. Thereby, they address recurring architecture design problems and provide a software solution that is commonly accepted.
- Design Patterns show on an abstract level design solutions to a specific problem that have developed over time. They are visualized in an easy, well-structured, and understandable form to capture the key aspects of the solution and grasp complex fields. On a lower-level scope, patterns show how components are built.
So, the question is now – why we should use patterns, especially after a system is built. Therefore, we provide some arguments that underline the benefits of patterns. These are essential due to the increasing interconnectedness of systems and, thus, the increase of complexity. Patterns…
- Support the design and search for existing solutions to increase the efficiency of architecting systems
- Support the creation of interoperability and communication between systems of different organizations
- In collections show space of solution alternatives that can be connected to create new systems or services.
- Push thinking creatively for a solution design
- Support the understanding of solutions based on systems by providing distinct functionalities
The Industrial Internet Consortium (IIC) started the Pattern TG to collect and define architectural patterns for the space of the Industrial IoT (IIoT). We are creating an open repository for patterns to specify the solution space of the IIoT. By doing this, we aim to accelerate developments through the reuse of existing solution enabled by patterns. The inherent knowledge of experts is provided in a compact form to power new solutions in this space. Based on this, knowledge exchange and discussion on patterns should be initiated.
What did we already do? We created an initial repository on the IIC Resource Hub that everybody can access. There, we want to publish approved patterns for the use of everybody designing IIoT systems. In addition, we started a group on the IIC Community Forum. We would like to start a discussion on the specific patterns to develop them further and collect experiences about the usage of a pattern. Workshops around patterns will follow to educate the community about the importance of patterns.
Please look into the IIC Resource Hub – Pattern page – see our template for submitting patterns and browse through the current example of patterns, like the 3-tier-architecture, edge analytics, or lambda.
Additional Resources
- Patterns Task Group
- Patterns Collection Initiative
- Patterns Library
- Submit a Pattern
- Contact the Task Group Chairs