Capturing Software Architecture Knowledge for Pattern-Driven Design

Context: Software architecture is a knowledge-intensive field. One mechanism for storing architecture knowledge is the recognition and description of architectural patterns. Selecting architectural patterns is a challenging task for software architects, as knowledge about these patterns is scattered among a wide range of literature. Method: We report on a systematic literature review, with the aim of building a decision model for the architectural pattern selection problem. Moreover, twelve experienced practitioners at software-producing organizations evaluated the usability and usefulness of the extracted knowledge.\newline Results: An overview is provided of 29 patterns and their effects on 40 quality attributes. Furthermore, we report in which systems the 29 patterns are applied and in which combinations. The practitioners confirmed that architectural knowledge supports software architects with their decision-making process to select a set of patterns for a new problem. We investigate the potential trends among architects to select patterns. Conclusion: With the knowledge available, architects can more rapidly select and eliminate combinations of patterns to design solutions. Having this knowledge readily available supports software architects in making more efficient and effective design decisions that meet their quality concerns.


Introduction
Software architecture plays an indispensable role in the success or failure of any software system, as it deals with the base structure, subsystems, and interactions among these subsystems [1]. Software architecting can be viewed as a decision-making process: software architects consider a set of alternative solutions that could solve a system design problem, and select the set that is evaluated as the optimal [2]. Software architecture decisions are design decisions that address system requirements, including both functional and quality requirements. In this article, we present the results from an SLR that intends to support architects in the decision process, by linking quality attributes to software patterns 1 .
Software architecture design decisions, such as the selection of architectural patterns and software design patterns, are typically made in the early phases of the software development life cycle. In the following paragraphs, we define architectural patterns, styles, and tactics [3].
Architectural patterns are universal and reusable solutions to commonly occurring problems in software architecture [4]. Each architectural pattern describes high-level structures and behaviors of software systems and addresses a particular recurring problem within a given context in software architecture design. Architectural patterns aim to satisfy several functional and quality attribute requirements. In literature, sometimes the terms "architectural patterns" and "architectural styles" are used interchangeably, since they are, in essence, the same concepts and only differ in their description forms [5].
Software design patterns are experience-based standard solutions applied by developers to solve common problems when implementing a software system [6]. Note, a software design pattern is not a finished design that can be transformed directly into source or machine code. Architectural patterns are similar to software design patterns but have a broader scope. In this study, we focus on architectural patterns, and for the sake of brevity, we use patterns to refer to them.
software architecture tactics are design decisions that improve individual quality attribute concerns [7]. Tactics that are implemented in existing architectures can have significant impacts on the patterns in the system. In other words, tactics are reusable architectural building blocks that provide generic solutions to address issues about quality attributes that patterns have impacts on.
Pattern descriptions contain knowledge about quality attributes, and software architects rely on that knowledge to make effective design decisions, so increasing such knowledge means increasing the role of patterns in satisfying quality attributes [8]. Patterns and quality attributes are not independent and have significant interaction with each other. Such interactions can be observed as trade-offs between quality attributes. Software architects need to select and employ an optimal set of patterns to satisfy quality concerns. For instance, some studies assert that Reusability is a strength [9,10] and Scalability is a liability [11,12] of the Layers pattern. If an architect is looking for both qualities, she has two options: choose another (set of) pattern(s) or use software architecture tactics to improve Scalability.
Software architects are making the design decisions that have long-lasting impacts on quality attributes of a software-intensive system [13]. Software architects define the architecture of the system, maintain the architectural integrity of the system, assess technical risks, perform risk mitigation strategies, participate in project planning, consult with design and implementation teams, and assist product marketing [14]. Therefore, software architects make high-level design decisions every day [15]. Software architects engage in processes of creation, perfection, and destruction on a daily basis. Their work consists of setting standards for developers, designing and implementing new parts of a system's architecture, developing shells around and interfaces to legacy systems, monitoring quality attributes, and occasionally creative destruction to make way for significant renovations. Pattern selection is a process that happens organically during the process of architecting a system.
Generally speaking, functional requirements define what a system does, whereas quality requirements explain how well those functions are performed [16]. Quality requirements tend to present trade-offs that must be thoroughly negotiated and resolved [17]. For instance, a software architect might want to design a system to be both highly secure and available, or she might want a system to respond quickly and support thousands of users simultaneously. Therefore, she has to design an architectural solution that supports these conflicting quality requirements to optimize the delivered system's value. Quality requirements are often more challenging to measure and track than their functional counterparts. Whereas functional requirements are either present or not present in a system, quality requirements tend to be achieved at various levels along a continuum [16].
System quality is best exposed in production, independent of whether system quality has been made explicit. Note, it is essential to recall those well-known authors, such as Wiegers and Beatty [18], classify quality attributes as external (exposed at the run time/in production, e.g., performance) and internal (exposed at design time, e.g., modifiability). If architects do not think about performance, the system will still expose its performance in the field. The knowledge around the quality of a system under design is hard to gather without in the field experiences; however, experience with similar patterns in other systems provides invaluable insight into the inherent qualities of a new system. The rationale behind this article is that patterns exhibit similar quality behaviors when purely implemented (without tactics) in different systems and that this knowledge can be used by architects to make informed design decisions.
In this study, we followed a mixed research method, a combination of qualitative and quantitative research, to systematically capture architectural knowledge and make it available in a reusable and extendable format. First, we conducted a Systematic Literature Review (SLR). The SLR has been carried out following the steps and guidelines of Kitchenham [19] to identify common lists of patterns and quality attributes, besides strengths and liabilities, application domains, combinations, and trends of the patterns. Next, a serious of expert interviews, based on Bogner et al. [20], has been conducted to evaluate the usefulness and reusability of the extracted knowledge. Note, the knowledge is summarized in this article, and we propose three ways of disseminating the knowledge to the architect: education, tool support, and pattern quality impact reporting. The practitioners who participated in this research confirmed that the extracted knowledge supports software architects with their daily decision-making process.

Patterns in Software Architecture
Several definitions exist that explain Software Architecture. It is both seen as the set of structures of software elements, and their relations and properties to reason over a software system [21], and as the set of principal design decisions [22].
In this paper, we consider the former definition, the set of structures, as the outcome of the latter, i.e., software architecture is the outcome of a set of principle design decisions. This is reflected in the meta-model, depicted in Figure 1, which is based on the ISO/IEC/IEEE standard 42010 [23]. Architectural decisions may depend on other decisions, pertains to one or more concerns of stakeholders, and should contain some rationale to justify it. The outcome of the decision affects the architecture description. Besides, the decision may raise new concerns. Concerns include both functional requirements as well as quality attributes [21].
An architectural pattern expresses a fundamental structural organization schema for software systems [24]. A closely related term in literature is "architectural style". As there is no widely accepted definition for both terms in literature, we refer to both as "architectural pattern". An architectural pattern differs from software patterns, also referred to as design patterns, in that a software pattern provides a solution for a general design problem [6], whereas an architectural pattern describes the organizational schema of a software system. Table 1 outlines the definitions of the foundational concepts for the SLR. Please note that many of the definitions were handpicked from the plethora of definitions available because we needed to make sure that the definitions fit the meta-model in Figure 1.   [23], for decision-making in software architecture. The essential included elements are the architect, the architecture, the knowledge base, and the quality attributes.

Decision Process
Building a software architecture can be regarded as a decision-making process [2]: a software architect considers several alternative solutions (design decisions) that could solve the design problem statement, and subsequently chooses one of the solutions that optimally addresses the problem. The software architecture design decision, such as the selection of architectural patterns, is formulated as follows: (1) a software architect runs into a design problem, (2) she looks for actual features she thinks can solve this problem, such as "distribute data over multiple servers", (3) she goes through the description of several patterns and identifies several candidates, (4) she identifies an optimum pattern for her problem and goes through tactics to make sure it works in the context. The decision model for the pattern selection problem can be used in steps 2 and 3 to facilitate the decision-making process for software architects.

Term Definition
Refs Software Architecture Software architecture is the structure or structures of the system, which comprise software components, the externally visible properties of those components, and the relationships between them. [1] Pattern universal and reusable solutions to commonly occurring problems in software architecture. [4] Tactic design decisions that improve individual quality attribute concerns [7]. Quality The quality of a system is the degree to which the system satisfies the stated and implied needs of its various stakeholders, and thus provides value. [25] Architect person, team, or organization responsible for systems architecture [26] Rationale captures the knowledge and reasoning that justify the resulting design, and its primary goal is to support designers by providing means to record and communicate the argumentation and reasoning behind the design process. [27,28] Decision A decision is consisting of a restructuring effect on the components and connectors that make up the software architecture, design rules imposed on the architecture and resulting system as a consequence, design constraints imposed on the architecture, and a rationale explaining the reasoning behind the decision. [29] Functional Requirement condition or capability that must be met or possessed by a system, system component, product, or service to satisfy an agreement, standard, specification, or other formally imposed documents [26] Concern is any interest in the system. The term is derived from the phrase "separation of concerns" as in Software Engineering. One or more stakeholders may hold a concern. Concerns involve system considerations such as performance, reliability, security, availability, and scalability.
[23]  Figure 1 represents a meta-model for decision-making in architecture. It shows in general terms how patterns, quality attributes, and tactics are related to each other, and how they are linked to the architecture. It provides a structure for discussion of the specific ways that applied tactics affect the patterns used. It also provides a foundation for the description of the impact of applied patterns and tactics on the software architect's quality concerns. Note that we distinguished the applied patterns and tactics in the architecture from the potential set of design decisions (patterns and tactics that are available in the knowledge base of software architects).
The pattern selection process is challenging for software architects, as knowledge about patterns is scattered among a wide range of literature. Knowledge regarding patterns has to be collected, organized, stored, and quickly retrieved when it needs to be employed. There exists a need for a decision support system that intelligently supports software architects in selecting suitable patterns according to their requirements.

Related Studies
It is becoming increasingly common in software engineering to synthesize results through SLRs, even though that is a relatively recent phenomenon [30]. In software, architecture research SLRs are also increasingly common [31,32] and generally serve the purpose of mapping out particular research challenges in the domain. Our SLR was conducted because we lacked a near-to-complete source of evidence to create a reliable decision model for architects. Our study distinguishes itself from such studies as it synthesizes literature intending to collect data for practitioners and evaluates the collected data with practitioners themselves. The study also contributes overviews of commonly discussed patterns and quality attributes, providing a basis for new research. It is notable, for instance, that many of the quality attributes found in our study are not present in the well known ISO standards.
The software architecture field has evolved over the last four decades [33,34] from the early fundamental concepts from the mid-80s to the ubiquitous proliferation of roles of software architects in contemporary industrial practice [35]. Architectural knowledge, such as the impacts of patterns on quality attributes, has been widely addressed in the literature. However, the knowledge is fragmented over a wide range of heterogeneous studies [36,37,38], so a sound methodology is required to capture and aggregate this knowledge systematically. The data collection is an empirical study that can be quantitative or qualitative [39]. Quantitative data comprises numbers and classes, while qualitative data involves descriptions and explanations of phenomena. Quantitative data is analyzed using statistics, while qualitative data is analyzed using expert interviews or/and case studies to provide a more detailed and more in-depth explanation. However, a combination of qualitative and quantitative data often provides a better understanding of the studied phenomenon [40] (Mixed research).
Research methods are classified based on their data collection techniques (interview, observation, literature, etc.), inference techniques (taxonomy, protocol analysis, statistics, etc.), research purpose (evaluation, exploration, description, etc.), units of analysis (individuals, groups, process, etc.), and so forth. Multiple research methods are combined to achieve a fuller picture and a more in-depth understanding of the studied phenomenon by connecting complementary findings that conclude from the use of methods from the different methodological traditions of qualitative and quantitative investigation [41].
In this study, we considered a systematic literature review and expert interviews as a mixed data collection method to identify frequent mentioning sets of patterns and quality attributes that were discussed widely in academic publications. Then, we highlighted 29 patterns and 40 quality attributes than were mentioned in more than three selected primary studies. Moreover, we extracted potential strengths and liabilities of the patterns to map the patterns to the quality attributes and calculate the impacts of the patterns on the quality attributes based on fuzzy logic. Additionally, we realized that the authors of the selected primary studies employed the patterns in particular types of systems and applications so that we considered them as the potential application domains of the patterns. Furthermore, we tracked the publications' years of the studies and their mentioned patters to imply a trendy manner among academics to employ patterns and research them. Table 2 positions this study among a subset of selected primary studies. This table shows that none of the selected primary studies employed qualitative and quantitative data collection methods to evaluate a significant number of patterns. Note, the research results of all of the selected primary studies have been included in the knowledge base of the SLR (See Section 3.7).
Note, an extensive list of studies addresses the impacts of patterns on quality attributes. Each study considered different sets of patterns and quality attributes (Columns #P and #QA). Moreover, we perceived that some patterns have conflicting impacts on a particular quality attribute. For instance, some studies [53,49] expressed that Performance efficiency is a key strength of Client-Server, however, some other studies [54,55] stated that Performance efficiency is a key liability of Client-Server. The majority of studies in the literature reported some potential domains of patterns. However, we realized that different studies suggested different domains. For example, Yang et al. [46] stated that Pipe and Filters can be used in Operating Systems, and Buyya et al. [45] Table 2: This table shows a subset of studies in literature. The first six columns indicate the selected study (Study), the publication type (PT) (including Research Paper (RP), Book, and Chapter (Chp)), the publication year (Year), and the data collection method (DCM), the research purpose (Purpose), and data collection type (Type) of the corresponding selected primary studies, respectively. The seventh and eighth columns (#P and #QA) denote the number of considered patterns and quality attributes in the selected primary studies. The last three columns identify whether the selected primary studies investigated on the potential domains of patterns, possible trends of utilizing patterns, impacts of patterns on quality attributes, or not.

Systematic Literature Review
Recently, we designed a framework [56] and implemented a Decision Support System (DSS) [57] for supporting software developers and architects (decision-makers) with their multi-criteria decisionmaking (MCDM) problems in software production. An MCDM problem deals with evaluating a set of alternatives and considers a set of decision criteria [58]. The framework applies the six-step decision-making process [59] to build maintainable and evolvable decision models for MCDM problems in software production. Moreover, the framework provides a guideline for decision-makers to build decision models for MCDM problems in software production. Based on the framework, we built decision models for the selection of Database Management Systems [56], Cloud Service Providers [60], and Blockchain Platforms [61] 2 .
In order to capture knowledge systematically regarding patterns and build a decision model, based on the framework, for the pattern selection problem (as future work), the following research questions have been formulated to guide our study: RQ 1 : A set of patterns among an extensive list of patterns should be considered. Note, patterns can be alternatives to each other, for example, Interpreter, Rule-Based System, and Virtual Machine [5].
RQ 2 : By increasing knowledge about patterns, it is possible to make better-informed decisions, avoid failures, and better satisfy quality attributes and achieve system-wide quality targets [8]. A set of quality attributes should be defined in the decision model. Quality attributes are characteristics of the system that are intrinsically non-functional. One of the primary purposes of the architecture of a system is to create a system design to satisfy the quality attributes [50]. It is essential to find quality attributes that are widely mentioned by other researchers to identify the characteristics of patterns.
RQ 3 : Part of the software architects' concerns are those requirements that have impacts on quality attributes of software-intensive systems [62]. Quality requirements are the horizontal crosscutting concerns that impact a system, such as performance, security, and usability. Software architects should be aware of any requirement or design decision that impacts one of these concerns and should elicit requirements that allow for the measurement of quality attributes. Therefore, to build a beneficial and powerful decision model for the pattern selection problem, it must be achievable to find which patterns impact specific quality attributes, compare and contrast impacts, and highlight their interactions.
RQ 4 : Application-generic and application-specific knowledge are two types of architectural knowledge [2]. Application-generic knowledge refers to knowledge that software architects have implicitly in their heads, from their former experience. Moreover, application-specific knowledge involves all the decisions taken during the architecting process of a particular system and the architectural solutions that implemented the decisions. In other words, application-generic knowledge is used to make decisions for a single application and thus construct application-specific knowledge. Therefore, knowledge regarding application domains, in which candidate patterns are already employed, can help software architects make informed decisions.
RQ 5 : Patterns tend to be combined to provide greater support for the reusability during the software design process [63]. A pattern can be blended with, connected to, or included in another pattern. For instance, the Broker pattern can be connected to the Client-Server pattern to form the combined Client-Server-Broker pattern [7]. RQ 6 : Software architecture has experienced considerable growth over the past decades, and it promises to continue that growth for the foreseeable future. Although the architectural design has matured into an engineering discipline that is broadly recognized and practiced, some significant challenges will need to be addressed. Such challenges are expected to arise as a natural outcome of dissemination and maturation of the well-known architectural practices and technologies [64]. Software developers and architects should be aware of technology advancements, standards, and trends that affect potential architecture decisions and concerns. The last research question investigates any potential trends among architects that attract them to use a particular pattern.
Systematic Literature Review is one of the most broadly accepted research methods of evidencebased software engineering [65]. An SLR provides a prescribed process for identifying, evaluating, and interpreting all available evidence relevant to a particular research question or topic [66]. In this study, the SLR functioned as a knowledge acquisition process to capture knowledge about patterns and ultimately making it available in forms of reusable knowledge. The SLR has been carried out following the steps and guidelines of Kitchenham [19]: reasoning the necessity of the SLR, defining research questions, searching relevant studies, applying inclusion/exclusion criteria, assessing the quality of studies, extracting knowledge, analyzing the results.

Data sources and search strategy
In this study, the search strategy has two search methods: manual search and automatic search. These search methods are complementary to each other. In the manual search, we investigated published studies in reputable journals and conferences in the software architecture domain. This search method guarantees that we explore relevant studies, but it consumes a significant amount of time and effort in judging many irrelevant studies.
In the automatic search, we defined a search query to retrieve results from scientific search engines. Firstly, the search query was built based on the generic keywords extracted during the manual search process. In other words, the search query only contained generic keywords to avoid possible biased search results; for instance, we did not consider any standard titles of patterns (such as Layers and Client-Server) and quality attributes (such as performance and availability) explicitly. Secondly, we tested the query on the selected scientific search engines to find out whether the outcomes are compatible with the results of the manual search. Note, the query contains the concepts of the meta-model (see Figure 1), as it gives an overview of the decision-making process in designing architecture. In the automatic search [67], we used the following query: (("software architecture" OR "software architectural" ) AND ("pattern" OR "style")) AND ("selection" OR "evaluation" OR "quality attribute" OR "design decision" OR "decision-making") Figure 2 demonstrates the stages of the search process and the numbers of primary studies in each stage. Moreover, Table 3 shows the journals and conference proceedings considered in the manual search besides the scientific search engines in the automatic search. Note, Google Scholar was not involved in the automatic search since it offers many irrelevant studies. Moreover, it has substantial overlap with the other digital libraries considered in this SLR.

Inclusion and exclusion criteria
The inclusion and exclusion criteria were applied to the selected publications at different rounds of the search process, as illustrated in Figure 2. The studies were included in the SLR if they were peer-reviewed, written in English, available, and discussed patterns. Furthermore, the abstracts or titles of the primary studies had to explicitly state that the articles were on the topic of architectural patterns. The articles were published mainly as journal papers, conference papers, theses, technical reports, or books. Knowledge extraction process The peer-reviewed articles relevant to the topic of interest were published from 1990 to the first half of 2019. Note, we did not limit the SLR to this period. However, we did not find any qualified primary studies before 1990 to add to the SLR's knowledge base. Editorials, position papers, keynotes, reviews, tutorial summaries, and panel discussions were excluded from the SLR. Moreover, all duplicated publications, studies with inadequate validation (i.e., no evidence), and on other platforms instead of computer-based patterns (e.g., Computer Networks, Electronics) were not considered in the SLR. A publication was only selected for knowledge extraction when it had at least a proof of concept (such as a case study or an experiment). The less mature one was excluded if two publications addressed the same topic and were published in different conferences or journals. The journals and conference proceedings in the manual search besides the primary studies in the automatic search were reviewed by four researchers (including a principal investigator, a junior researcher, and two research assistants).

Quality assessment
In addition to the inclusion and exclusion criteria, it is essential to assess the quality of primary studies [19]. The quality assessment of primary studies comes up with more detailed inclusion and exclusion criteria, guides the interpretation of findings and determines the strength of inferences, and offers recommendations for further research. Recording the strengths and weaknesses of primary studies indicates whether aspects of study design or conduct have biased the results (substantially the extent to which the study results can be "believed") [68].
Dyba and Dingsoyr [69] introduced three main issues (Rigour, Credibility, and Relevance) regarding the quality of primary studies that should be taken into account when assessing primary studies in an SLR. Rigour indicates whether a thorough and appropriate approach has been applied to research methods in the study. Credibility signifies whether the findings are well-presented and meaningful. Relevance denotes whether the results are useful to the software industry and the research community. Dyba and Dingsoyr presented 11 quality assessment questions to cover the three main issues that have been used in our assessment. Both the first and second authors determined quality assessment criteria independently. Discrepancies arose in around 10% of the articles, and these were discussed collaboratively to come to a final judgment. The questions provide a measure of the extent to which we can be confident that primary study findings can make a valuable contribution to the review. The grading of each of the 11 quality assessment questions was done on a dichotomous ("yes" or "no") scale. Table 4 shows the result of the quality assessment questions for the primary studies in the SLR.

Search process
The number of primary studies at each stage of the search process in this paper is presented in Figure 2. First, we found 20,278 articles as a result of the manual search. Due to the considerable amount of retrieved publications in this step, the first round of selection was performed (Review topic area, titles, abstracts, and conclusions). Some publications were not easy to select based only on their titles and keywords, so such publications were preserved for the next round of selection (7,042 publications). At the end of the second step, 2,005 publications met the inclusion criteria in the manual search process. Next, by scanning and skimming the text of the selected publications, 493 relevant publications were identified. After that, snowballing was performed to scan the references of the selected publications to explore and identify 43 more studies in the manual search process. In the last round of selection, if a publication met all the inclusion and exclusion criteria, it was included. After reading the primary studies thoroughly, 209 publications were selected. The quality of the primary studies was reevaluated according to the quality assessment questions to exclude the low-quality publications (11 publications were removed).
Next, the query was built according to the extracted keywords from the primary studies of the manual search. After performing the automatic search, 1,095 publications were found. In the first round of review, 311 primary studies were selected according to their topic areas, titles, abstracts, and conclusions. Afterward, inclusion and exclusion criteria were applied to refine the primary studies, so 189 articles were moved to the next stage. Based on the scanning and skimming of the primary studies, 74 papers were considered for performing snowballing. Subsequently, 9, more studies were added to the knowledge base of the SLR. After reading the primary studies completely, 37 primary studies were selected. The quality of the primary studies was reevaluated according to the quality assessment questions to exclude the low-quality publications (3 publications were removed).
Eventually, 232 high-quality primary studies (198 + 34 ) promoted to the knowledge base 3 of the SLR for performing the knowledge extraction process.

Knowledge extraction process
A structured coding procedure is employed to extract knowledge from the selected primary studies. Structured coding captures a conceptual area of the research interest [70]. The extracted knowledge has been classified into six categories: Patterns, Quality Attributes, Impacts, Application domains, Combinations, and Trends. The rest of this study reports the results of data analysis with a descriptive approach.

Threats to validity
The validity assessment is an essential part of any empirical study, including SLRs [71]. The validity frequently involves Construct Validity, Internal Validity, External Validity, and Conclusion Validity. Other types of validity, such as Theoretical validity and Interpretive validity, were rarely considered in the field of software architecture, so they are not discussed in this paper.
Construct validity refers to whether an accurate operational measure or test has been used for the concepts being studied. In this study, a meta-model (see Figure 1), based on the ISO/IEC/IEEE standard 42010 [23], was built to represent the decision-making process in designing software architecture. The essential elements of the meta-model are utilized to formulate the research questions. The meta-model guarantees that the research questions cover all potential publications regarding patterns. The query in the automatic search was built based on the meta-model, so we tried to obtain more relevant studies as much as possible.
Internal validity attempts to verify claims about the cause-effect relationships within the context of a study. In other words, it determines whether the study is sound or not. In order to ensure that the paper selection process was unbiased as far as possible, the quasi-gold standard (QGS) [67,72] was adopted. The QGS systematically integrates manual and automated search strategies and suggests a relatively accurate search performance evaluation in terms of sensitivity and precision. Although we searched six online digital libraries, they are believed to cover the majority of the high-quality publications in software architecture. To capture as many publications as possible, however, we also employed the snowballing as the complementary search to diminish the possibility of missing relevant publications. The journals and conference proceedings in the manual search and the primary studies in the automatic search were reviewed by four researchers, including a principal investigator, a junior researcher, and two research assistants. Moreover, the practitioner evaluation sections reflect the usefulness and effectiveness of the SLR findings from real-world software architects' perspectives. External validity defines the domain to which the research findings can be generalized to realworld applications. External validity is sometimes employed interchangeably with generalizability (feasibility of applying the results to other research settings). In this study, we selected publications that include a discussion about patterns from 1990 to 2019. The excluded studies and inaccessible studies may affect the generalizability of the SLR. However, as less than 3% was not accessible to us, we do not expect that data was missed that would significantly influence our results. The reusable extracted knowledge available through this study can help both academics and practitioners develop new theories and methods for future challenges. Conclusion validity verifies whether the methods of a study such as the data collection method can be reproduced, with similar results. We captured knowledge from the selected publications regarding Patterns, Quality Attributes, Impacts, Application domains, Combinations, and Trends. The accuracy of the extracted knowledge was guaranteed through the protocol that was developed to define the knowledge extraction strategy and format. The review protocol was proposed and reviewed by the authors. We defined a data extraction form to obtain consistent extraction of relevant knowledge and checked whether the acquired knowledge would address the research questions. Both the first and second authors determined quality assessment criteria independently. Moreover, the crosscheck was necessary among the reviewers, and again we had at least two researchers extracting data independently.

Patterns
Patterns offer universal and reusable solutions to commonly occurring problems in software architecture design [5]. Finding the most common set of patterns helps software architects to have a better understanding of design decision problems and potential solutions to solve such problems. Figure 3 provides an overview of the number of studies that considered each pattern as one of their design decisions or pattern alternatives. The primary studies that discuss the patterns are spread across the early years of the emergence of software architecture (1990) [73] to the present (2019). Figure 3 shows the distribution of theses primary studies over the 29 years. To prevent potential biases, we only considered the patterns mentioned in at least three primary studies. Each selected publication was at least relevant to a particular pattern and discussed its characteristics (such as liabilities, strengths, components, connections, and typologies) and domains (see Section 3.7.4). Consequently, 29 patterns 4 satisfied the constraints and were included in this study.
The number of primary studies from the year 2005 has increased significantly. Furthermore, more than 20 percent of the primary studies were published in the years 2010 and 2011. As the academic literature is merely a reflection of the multitude of patterns that are being used in the industry, we must note that occurrence in academic literature does not necessarily mean occurrence in the industry. Figure 3 shows that Client-Server, Layers, Pipes and Filters, Service-Oriented Architecture (SOA), and Model-View-Controller (MVC) are the top 5 architectural patterns that were investigated in the primary studies.

Quality Attributes
One of the fundamental concepts in software architecture specification is identifying required levels of measurement of software quality attributes or system qualities such as performance, security, available, and reusability. In the literature, patterns are described according to the functionality they deliver, and their strengths or liabilities are shown concerning several quality attributes [8]. Strengths and liabilities assess the importance of the impact of patterns on quality attributes [50]. Therefore, patterns and quality attributes are not independent and have significant explicit/implicit interactions [7]. Such interactions can be represented as reusable knowledge elements [36]. For instance, selecting the Layers pattern involves a trade-off between efficiency and maintainability, where the second quality attribute is better fit [50].
We tried to identify the most widespread quality concerns that were considered in the literature. Figure 4 indicates the quality attributes that were explicitly mentioned in at least three primary studies. We encountered 40 relevant quality attributes. According to the results of the analysis (see Figure 4), Reusability, Flexibility, Performance efficiency, Scalability, and Maintainability are the top five software quality attributes that were investigated and reported on in more than 30 primary studies. Figure 4 shows that Characteristics of the ISO/IEC 25010 standard (such as Reliability, Performance efficiency, Usability, and Maintainability) were considered as quality concerns in the primary studies. However, Subcharacteristics of the ISO/IEC 25010 standard (such as Operability and Accountability) were less discussed in the primary studies. Note, the quality attributes printed in black are based on the ISO/IEC 25010 standard [25], and the rest of them (printed in blue) are not mentioned in the ISO standard 5 . Each cell of the matrix contains two rows. The first row is a triple (L-N-H), including the numbers of studies that reported a particular quality attribute as a Liability (L), Neutral (N), and Strength (H) for its corresponding pattern. The decimal numbers in the second rows of the stained cells show the results of the fuzzy calculation for the impacts.

Impacts
Every architecture decision is made with a rationale. A strength or liability is an argument to utilize or to avoid a pattern in a particular situation [8]. Therefore, the degree to which patterns impact quality attributes determines architectural decisions (i.e., adopting or avoiding a pattern for a given design problem).
When architects have to make architecture decisions, an understanding of the impacts of patterns on quality attributes is needed. The solution space from which an architect must select one design is far more extensive than an architect can oversee [74]. Our observation that further illustrates this problem is that it is not uncommon in industry to hire an architect with experience and expertise with a particular pattern. As such, software architects need better decision support tooling, to help them make their decisions with the right knowledge at hand.
Identifying the impacts of patterns on quality attributes requires analysis of a considerable amount of knowledge regarding patterns [7]. Missing the impacts of patterns on quality attributes at architecture design time leads to additional liabilities. Because quality attributes are system-wide capabilities, they generally cannot be evaluated entirely until the whole system can be evaluated [75].
In the knowledge extraction phase of this study, we realized some inconsistencies regarding the observed impacts of patterns on quality attributes. Some studies reported conflicting impacts of a particular pattern on a quality attribute. For instance, [76,9,48] stated that efficiency is a strength of the Pipe and Filter pattern, however, [77] expressed that efficiency is a liability for this pattern. Therefore, efficiency can be considered as both strength and liability of the Pipes and Filters pattern.
Quantifying the impact of a particular pattern on the quality attributes is complicated because quality attributes are system-wide capabilities. Generally, they cannot be evaluated entirely until the whole system can be evaluated. In this study, we applied fuzzy logic as a method to aggregate  Suppose R 1 = (a 1 , b 1 , c 1 , d 1 ) and R 2 = (a 2 , b 2 , c 2 , d 2 ) are two trapezoidal numbers that represent two experts' opinion in fuzzy space, then the similarity S(R 1 , R 2 ) between these R 1 and R 2 is defined as follows [78]: The degree of agreement A(E i ) of expert E i is calculated based on the following equation: The relative degree of agreement RA(E i ) of expert E i is defined as follows: Finally, the aggregation of fuzzy opinion is calculated based on the following equation [78]:  Figure 4 presents the impacts of the patterns on the quality attributes. Note, the impacts have been reported as Liabilities (red cells), Strengths (green cells), Neutrals (yellow cells), or Unknown (white cells). The Unknown impacts mean that we did not find any information about them. Note, the cells with thick borders signify singleton impacts, which means that we found only one study that has been discussed those impacts. The coloring codes are the results of the calculated fuzzy logic (the decimal number in the second row of each colored cell) to gain a consensus among studies. Therefore the color intensity indicates the agreements among studies on particular impacts. In other words, the color intensity can help decision-makers to have a better understanding of existing knowledge in the literature concerning the reported impacts. For instance, we found 20 studies regarding the impact of Layers pattern on Reusability, so that, 17 studies considered Reusability as a key strength, 2 studies mentioned some Reusability challenge, and only one study asserted that Reusability is a key liability for the Layers pattern. Therefore, the dark green color can be interpreted that Reusability is a key liability for the Layers pattern; however, some Reusability challenges reported in the literature regarding this impact.

Application domains
By increasing knowledge about patterns, it is possible to make better-informed decisions, avoid failures, and better satisfy quality attributes and achieve system-wide quality targets [8].
Application-generic and application-specific knowledge are two types of architectural knowledge [2]. Application-generic knowledge refers to knowledge that software architects have implicitly in their heads, from their former experience in working in one or more domains. Moreover, application-specific knowledge involves all the decisions taken during the architecting process of a particular system and the architectural solutions that implemented the decisions. Therefore, application-generic knowledge is used to make decisions for a single application and thus construct application-specific knowledge.
The application domains, in which the observed patterns are used, support software architects in selecting appropriate patterns for their problem domain. Figure 5 shows the application domains of the identified patterns. We categorized the observed application domains based on the suggested software taxonomy by [79].

Combinations
Despite an extensive list of patterns documented in the literature, patterns are infrequently applied in a system design in their original form, and they must be combined with other patterns to address different design decisions of the system [4]. In other words, a particular pattern provides the missing ingredient needed by another pattern or conflicts with another one by providing an alternative solution to a related problem. The goal of combining patterns is to make the resulting design more complete and balanced [80].
In general, not all potential combinations of patterns are useful. However, because each pattern description is self-contained and independent of the others, it is difficult to extract the useful combinations from the individual pattern descriptions [81]. The combinations of patterns are more than aggregates of their elements [82]. Unfortunately, individual patterns descriptions are not always explicit on "how" to combine them with consistent patterns. For instance, the Layers pattern can be combined with the Client-Server pattern, or the C2 and Publish-Subscribe patterns can be used as a paired pattern [82].
Suppose P AT is the set of frequently used patterns bu software architects in the SLR, P 1 and P 2 are two patterns, where P 1 , P 2 ∈ P AT . When building a solution for a particular problem addressed by P 1 , one sub-problem is similar to a problem addressed by P 2 . Consequently, the pattern P 1 utilizes the pattern P 2 in its solution. Note, a typical combination of patterns is the combination of P 1 and P 2 (e.g, a software architect can employ the Microservice pattern besides Rule-based patterns). In contrast to "P 1 employs P 2 ", P 1 does not employ P 2 in its solution. Figure 6 illustrates the combinations of the pattern that we found during the SLR. The observed combinations in Figure 6 are based on the "P 1 employs P 2 " relationships. For example, 17 primary studies stated that the Client-Server pattern employs the Broker pattern. The broker is responsible for receiving all messages, filtering the messages, deciding who is the owner of each message, and sending the message to the correct clients.

Trends
The possibility of existing trends among researchers in selecting patterns has been investigated in this SLR. As aforementioned, the primary studies that discuss the patterns are spread across the early years of the emergence of software architecture (1990) [73] to the present (2019). Although numerous software systems have succeeded by employing patterns consciously, there have also been failures, due in substantial part to common misinterpretations about patterns, i.e., what they are and what they are not, what characteristics and purpose they have, their target audience, and the various strengths and liabilities of applying them [80]. The pattern community has long been interested in understanding the underlying theories, forms, and methodologies of patterns, pattern languages, and associated concepts to codify knowledge about, understanding of, and application domains of patterns. Figure 3 shows the distribution of theses primary studies over the 29 years. To prevent potential Please note that we only identified couples, so the figure should be read as that we encountered the broker pattern combined with the Layers pattern five times in the literature. Moreover, the combinations are not symmetric; for instance, Broker-Layers is not the same as Layers-Broker. Architects can use this figure to decide whether a combination they are planning to make, has been made before. Note, each cell in the last row (compatibility) indicates the percentage of the patterns that can be combined with the corresponding pattern based on the selected primary studies. For instance, the "Client-Server" can be combined with 66% of the other patterns in the list.
biases, we only considered the patterns that were mentioned at the minimum of three primary studies. We observe that SOA, Cloud computing architecture (Spaced-based), and Microservices gained more attention in recent years. Moreover, some patterns such as C2, Presentation-abstractioncontrol (PAC), Remote Procedure Call (RPC) and Batch sequential patterns are not discussed widely in academic literature.

Discussion
This section summarizes the observed answers to the research questions and identifies several lessons learned. We end the discussion with an interesting question: how can creativity be preserved when an architecture decision is simplified to a limited decision model?

Addressing Research Questions
In this subsection, we reflect on each of the proposed research questions based on the SLR.
To answer the first research question (RQ 1 ) that aims at identifying the frequently employed patterns since the emergence of the field (1990), we found 29 patterns (see figure 3.7.6) that discussed at more than three primary studies.
The second research question (RQ 2 ) is the most frequent quality attributes that software architects are mainly concerned about. We found 40 quality attributes (see Figure 3.7.3) that explicitly mentioned in the primary studies as liabilities and strengths of the patterns.
The answer to the third research question (RQ 3 ) reveals the impacts of the patterns on the quality attributes based on the aggregation of liabilities and strengths reported in primary studies (see Figure 4). Such impacts lead to a deeper understanding of the patterns, identify the potential risks of employing a particular pattern, facilitate generating a quality attribute utility tree for a system, improve architecture documentation, and assist software architects with the pattern selection process.
To answer the fourth research question (RQ 4 ) that aims at finding common application domains, we observed 35 application domains and classified them into 11 categories (see Figure 5). With such knowledge regarding the application domains, software architects can determine whether similar patterns have been chosen in their domains.
To answer the fifth research question (RQ 5 ), we collected a set of suitable combinations of patterns observed in the primary studies (see Figure 6). Such combinations can address common sub-problems in patterns, such as solving the communication problem in the Client-Server pattern by the Broker pattern. Note, each paired pattern (e.g., Client-Server-Broker) can have entirely different characteristics from its constituent patterns.
The sixth research question (RQ 6 ) asks whether trends can be observed in pattern selection among software architects. Figure 3 demonstrates the distribution of the observed patterns this SLR from 1990 up to 2019. We realized that some patterns were trending for a period, and other patterns gained more attention after several years. For instance, the C2 was trending before 2010; moreover, the Microservice pattern gained attention in recent years. However, the Client-Server, Layers, Pipe and Filters, Component based patterns were almost always considered as primary alternatives in the pattern selection process.

Lessons learned
Knowledge about software patterns and their impacts on quality attributes is spread throughout decades of scientific reporting on pattern observation in practice. Architects must continuously align quality requirements, patterns, tactics, and application domains. It is non-trivial for both practitioners and academics to answer questions such as "what kind of effect does the introduction of Microservices have on the variability of a system for end-users?". Software architects typically neglect to sufficiently document their design decisions because they do not appreciate the advantages of documentation of such design decisions [7]. This lack of accurate documentation can significantly impact future design decisions. Furthermore, it is problematic for the actual architecture in practice.
We can revert to traditional building architecture for several lessons learned. First, we must accept that we will not find a comprehensive set of patterns: technological innovations will continually introduce more complex and specific patterns. Analog to how the elevator has enabled us to build taller buildings, new innovative patterns such as CQRS enable us to create larger and more scalable systems. This continuous innovation remains a responsibility of the academic community to consolidate and present architecture knowledge to the practitioner community continuously.
It is possible to identify trends in pattern usage. We hypothesize that software architects are biased towards trending patterns in their architecture design decisions. Over time, quality requirements of systems change because of advances in technology that address particular quality concerns of software architects. Software architects need to have a more explicit awareness of software architecture trends and evaluate them in the context of the system requirements. If we look at traditional building architecture again, it does not come as a surprise that architects are sensitive to trends: patterns may introduce new possibilities that provide end-users with more efficient and satisfying structures.
n this research, we only focus on individual patterns that solve particular parts of a design problem. Patterns, however, have several types of relationships with each other. (1) Patterns can be alternatives to each other, for example, Interpreter, Virtual Machine, and Rule-based system.
(2) Patterns can also be complementary and easily combined. For instance, the combination of Client-Server and Broker is valid and mentioned in some studies in the SLR. (3) Patterns may also be incompatible. For instance, we did not find any combinations of Pipes and Filters and Broker.
Besides reporting, academics have a responsibility to define what architects need to make explicit. The majority of the primary studies focus on a limited set of patterns and quality attributes (see Figures 3 and 4), and they were more concerned with generic quality attributes, such as the quality attributes of the ISO/IEC 25010 standard. According to the ISO/IEC 25010 standard description [25], the Characteristics are broken down into Subcharacteristics. The Characteristics are conceptually more generic quality attributes, and conversely, the Subcharacteristics have more concrete definitions. Several studies considered a Characteristics and its Subcharacteristics as two separate quality attributes (For example, Maintainability and Modifiability). Architects and researchers need to be more accurate in defining the patterns, their usage of them, and the quality attributes they measure them by.
Patterns promoting similar quality attributes sometimes have common characteristics. For instance, both Layers and C2 support flexibility and separation of concerns, and there is a significant implementation overlap between them. While the similarity of patterns is a reliable indicator of potentially reusable code, it often has the opposite effect on the compositionality of those patterns. Experience shows that the similar patterns (e.g., C2 and Layers) cannot or are not typically composed together [83]. Our main observation here is that essential relationships with other patterns also characterize patterns. The ability to rapidly compose patterns in this manner opens up new avenues of research to study the compatibility of patterns with one another and to develop new hybrid and domain-specific patterns. One of the most significant threats to this study's validity is that we take the academic reporting of patterns as a representative overview of the industry. In the future, we aim to solve this by also including grey literature in the study. Furthermore, we identify a need for a comprehensive view of patterns, where a curated set of patterns is regularly published as a reference for architects, similar to other industry-specific catalogs.
Software architecture tactics are a sub-class of design decisions and focus on the improvement of particular quality attributes [7]. For instance, Ping/Echo and Heartbeat are two tactics that can be selected to improve Reliability. If selecting and applying sets of patterns without consideration impede some of the quality attributes, these tactics can be employed to improve a system's quality attributes. A future research challenge is to support architects in this fine-tuning of a selected set of patterns using particular tactics.
Our hypothesis remains that an optimal initial set of patterns will require less use of tactics at a later stage in a system's development. We define an optimal set of patterns as the theoretical set of patterns that best addresses the requirements of the software project, including features (e.g., provides an API), quality (e.g., up to current security standards), and project requirements (feasible to implement with allotted resources). We acknowledge that identifying this set perfectly is impossible, for instance, due to the use of tactics, but in software design, we must strive towards such an optimal set. Stifling creativity. A relevant question is whether the data provided in this article stifles the architect's creativity: the article could be used to discourage particular new pattern combinations, for instance. We believe that the benefits of having overviews such as the most common combinations, such as in Table 3.7.5 of this article, can inspire architects to work with a broader set of knowledge than they would have before. Following that hypothesis, the information in this article should broaden the architects' knowledge instead of stifling them into set rules.

Practitioner Evaluation
We followed Myers and Newman guidelines [84] to conduct a series of qualitative semi-structured interviews with twelve senior software architects to explore expert knowledge regarding architectural patterns and evaluate the outcomes of the SLR.
We developed a role description before contacting potential experts in order to ensure the right target group. We contacted 43 architects in the Netherlands through email using the role description and information about our research topic. Overall, twelve senior software architects at different software producing organizations in the Netherlands participated in this research. The experts were pragmatically and conveniently selected according to their expertise and experience that they mentioned on their LinkedIn profile. The experts had, on average, more than ten years of experience with designing architectures. Each of the interviews followed a semi-structured interview protocol and lasted between 60 and 90 minutes.
According to Runeson et al. [85], we discuss the four threats: construct validity, internal validity, external validity, and reliability. We used open questions to elicit as much information as possible from the experts minimizing prior bias. All interviews were done in person and recorded with the interviewees' permission, then coded for further analysis to decrease a threat to construct validity. In order to mitigate a possible threat to internal validity, we consider a set of expert evaluation criteria (including "Years of experience", "Expertise", "Skills", "Education", and "Level of expertise") to select the experts. This study's relatively small number of interviewees highlights the issue of generalization and the external validity of the research results. However, the diversity of the interviewees, who were working at twelve different software development companies, lead to unbiased and generalize results. The interview protocol and coding were reviewed by two authors of this paper to minimize a threat to reliability.
Patterns: The domain experts were familiar with most of the selected patterns in this study. However, some experts asserted that particular patterns, such as C2 and Indirection Layer, are not as well-known as the rest of the patterns. Moreover, two experts mentioned that Master-Slave is not frequently used in software architecture. The last row in Figure 3 shows the number of experts that were familiar with each pattern. Note, all twelve experts were familiar with well-known patterns, such as "Client-Server", "Layers", "SOA", "MVC", "Component-based", and "Microservices".
Quality Attributes: The domain experts were familiar with the reported quality attributes, i.e., the qualities in the ISO standard (see Figure 4). They mentioned that software architects mostly consider a limited set of quality attributes to evaluate real-world software systems. Furthermore, they asserted that some of the quality attributes in our list are semantically close to each other and can be combined. For instance, one of the experts asserted that terms such as "response time", "capacity", "latency, "throughput", and "execution speed" are linked to "Performance"; moreover, quality attributes such as "modifiability" and "stability" are connected to "Maintainability". Based on the IEEE Standard Glossary of Software Engineering Terminology [86,87], the quality of software products is the degree to which a system, component or process meets specified requirements (such as functionality, performance, security, and maintainability) and the extent to which a system, component or process meets the needs or expectations of a user. It is necessary to find quality attributes that are widely recommended by other researchers to measure the characteristics of the system. The result of the SLR confirmed that researchers do not agree upon a set of conventional quality attributes (See Figure 4). Additionally, we realized that their suggested quality attributes were mainly applied to specific domains to address different research questions. Moreover, quality attributes such as "Security" and "Confidentiality", "Availability" and "Fault-tolerance", "Testability" and "Traceability", "Maintainability" and "Manageability", etc. can be considered as synonym terminologies. However, we observed that some authors distinguished and categorized quality attributes conceptually. For instance, Yang et. al [46] stated that "Confidentiality", "Integrity", "Accountability", "Authenticity" are sub characteristics of "Security". Similarly, Bode and Riebisch [47] stated that "Testability" and "Traceability" are sub characteristics of "Evolvability". Consequently, a set of nonexclusive and domain-independent quality attributes is needed to evaluate software products. The ISO/IEC 25010 [25] presents best practice recommendations on the base of a quality assessment model. The quality model defines which quality characteristics should be considered when assessing the qualities of a software product. The key rationale behind using such software quality models is that they are a standardized way of measuring a software product [88]. In figure 4, the quality attributes printed in black are based on the ISO/IEC 25010 standard [25], and the rest of them (printed in blue) are not mentioned in the ISO standard 6 .
Strength and Liabilities: The domain experts asserted that Figure 4 provides an extensive analysis regarding the impacts. They confirmed that such analysis is useful for software architects and can assist them with their decision-making process to select the best fitting set of patterns according to their quality concerns. The experts expressed that in real-world scenarios, software architects employ tactics to improve individual quality concerns. Tactics are mainly implemented in the source code so that their implementation can be easier or more difficult based on the nature of the system they are implemented in.
Application Domains The experts asserted that they had almost similar experiences with selecting and employing patterns in particular domains. One of the experts confirmed that some patterns are well-known candidates in particular domains, such as a combination of CQRS, Microservices, Layers, and Client-Server, which are all commonly used in ERP software. The practitioners stated that knowledge about application domains could be helpful for software architects and support them to identify the initial set of patterns based on the similarity between their application domains and the observed domains based on other architects' experiences. It is interesting to highlight that the knowledge regarding a limited set of patterns can lead to a cognitive bias [89] that forces practitioners an over-reliance on the patterns that they are familiar with. For instance, we noticed that some experts during the interviews had emphasized more on a particular set of patterns that they have mentioned as their expertise and skills in their LinkedIn profiles.
Combinations: The practitioners stated that in real-world architectures, they manipulate and combine patterns with meeting their requirements. Furthermore, they employ combinations of patterns besides software architecture tactics as architecture strategies to achieve particular quality attribute goals (e.g., improving security or performance). The practitioners confirmed that such knowledge about combinations are useful to them and can provide guidelines to select patterns and practical combinations. The practitioners also reconfirmed that pattern combinations can exist in many configurations. This presents a new challenge. For example, if a microservice uses CQRS independently, CQRS does not influence the total microservice architecture. However, if CQRS is used in an event-based architecture, those two patterns need to be developed in lock-step, as they influence each other heavily. For now, we recognize a dichotomy: combinations of patterns can be made that influence each other, while it is also possible to have combinations of patterns that do not influence each other at all. In future work, such relationships should be made explicit and specified in more detail.
Trends: The practitioners asserted that it is a well-known phenomenon that any technology is trend sensitive due to new insights and rapid advancements. Consequently, software architects have to be informed about the advancements in the technology industry and trends that can benefit their business in the future. Software architects sometimes have to select a particular set of patterns because of legacy technology choices. Sometimes vendor lock-in makes a customer dependent on a vendor for products and services, unable to use another vendor without substantial switching costs. An example of a pattern that has been trending in recent years is the Microservices pattern. Microservices advantages can tempt software architects to consider it as a hammer and convert every problem (design decision) into a nail. In other words, software architects tend to consider a set of patterns that are trending. For instance, one of the experts mentioned that software architects prefer to use Publish-Subscribe instead of RPC as a communication mechanism. Furthermore, MVC, as a pattern that facilitates the design of user-interfaces, is more popular than its alternatives, C2 and PAC. In our research, we need to be cognizant of these trends, while not becoming dogmatic. In engineering, new tools have led to some of the greatest advances, and we expect the job of the software architect to remain an engineering job primarily for a long time.

Conclusion
Knowledge about architectural patterns is scattered among studies in the literature. In this study, we capture and aggregate knowledge about architectural patterns and make it available through this paper and a web site as reusable knowledge for architects. The amount of data collected from academic literature surpasses other studies in terms of a number of patterns studied and quality impacts identified. We also identify possible trends and application domains of architectural patterns.
The practitioners who participated in this research confirmed that the provided knowledge in this study could support researchers and practitioners with selecting the best fitting sets of architectural patterns for designing pattern-driven architecture according to their quality concerns and application domains.
The lack of sufficient knowledge regarding patterns and their impacts on quality attributes, plus their application domains in literature, impedes progress in the software architecture field and leads to unreliable decisions by software architects. This research serves several purposes. First, it is an explicit call to action for all architects and researchers to document their pattern usage, the quality attributes they meet, the tactics used to optimize those quality attributes, and the application domains they best apply. Second, we use this work as a source for designing more extensive decision support system [56] that can support architects in finding the right combination of patterns for any software system. We plan to evaluate the decision support system in expert sessions with seasoned software architects. As the knowledge base of the decision support system also functions as a knowledge-sharing platform, it may become the first up to date and maintained pattern catalog.