=Paper=
{{Paper
|id=Vol-2978/jf-paper86
|storemode=property
|title=Summary: Building and Evaluating a Theory of Architectural Technical Debt in Software-Intensive Systems (short paper)
|pdfUrl=https://ceur-ws.org/Vol-2978/jf-paper86.pdf
|volume=Vol-2978
|authors=Roberto Verdecchia,Philippe Kruchten,Patricia Lago,Ivano Malavolta
|dblpUrl=https://dblp.org/rec/conf/ecsa/VerdecchiaKLM21
}}
==Summary: Building and Evaluating a Theory of Architectural Technical Debt in Software-Intensive Systems (short paper)==
Summary: Building and evaluating a theory of architectural technical debt in software-intensive systems* Roberto Verdecchia1 , Philippe Kruchten2 , Patricia Lago1,3 and Ivano Malavolta1 1 Vrije Universiteit Amsterdam, The Netherlands 2 University of British Columbia, Vancouver, Canada 3 Chalmers University of Technology, Gothenburg, Sweden Abstract This paper reports a summary of a study on Architectural Technical Debt (ATD) published in the Jour- nal of Software and Systems [1]. By borrowing from the 16162 definition of technical debt, we can define ATD as a collection of design or implementation constructs, present at the architectural level of software-intensive systems, that are expedient in the short term, but set up a technical context that can make future changes more costly or impossible. In the study we aimed at investigating how soft- ware practitioners conceptualize ATD, and how they deal with it. In order to do so, we conducted a mixed-method empirical study constituted by a Glaserian grounded theory, followed by an evaluation and refinement of the emerging theory via focus groups. The result of our investigation constitutes an encompassing conceptual model of architectural technical debt, identifying and relating concepts such as its symptoms, causes, consequences, management strategies, and communication problems. The emerging theory can support both research and practitioners with structured knowledge about the crucial factors of architectural technical debt experienced in industrial contexts. Keywords Software Engineering, Software Architecture, Technical Debt, Software Evolution, Grounded Theory, Focus Group 1. A Theory of Architectural Technical Debt In this paper, we provide a high-level overview of our theory on Architectural Technical Debt, which is documented in its entirety in the journal publication “Building and evaluating a theory of architectural technical debt in software intensive systems” [1]. The study leveraged a mixed- method empirical study, constituted by a Glaserian grounded theory, followed by an evaluation * Use the original publication when citing this work. R. Verdecchia, P. Kruchten, P. Lago, I. Malavolta, Building and evaluating a theory of architectural technical debt in software-intensive systems, Journal of Systems and Software. 176 (2021). doi: https://doi.org/10.1016/j.jss.2021.110925. ECSA’21: European Conference on Software Architecture, September 12–17, 2021, Virtual " r.verdecchia@vu.nl (R. Verdecchia); pbk@ece.ubc.ca (P. Kruchten); p.lago@vu.nl (P. Lago); i.malavolta@vu.nl (I. Malavolta) ~ https://robertoverdecchia.github.io/ (R. Verdecchia); https://philippe.kruchten.com/ (P. Kruchten); http://patricialago.nl/ (P. Lago); http://www.ivanomalavolta.com/ (I. Malavolta) 0000-0001-9206-6637 (R. Verdecchia); 0000-0003-1359-4867 (P. Kruchten); 0000-0002-2234-0845 (P. Lago); 0000-0001-5773-8346 (I. Malavolta) © 2021 Copyright for this paper by its authors. Use permitted under Creative Commons License Attribution 4.0 International (CC BY 4.0). CEUR Workshop Proceedings http://ceur-ws.org ISSN 1613-0073 CEUR Workshop Proceedings (CEUR-WS.org) * 0..1 Prioritization Person * Symptom strategy 1..* Communication influences guides * * * * ATD 1..* management displays points to influences strategy * 1..* supports addresses 1..* * 1..* Tool ATD * Consequence leads to item affects Artifact * 1..* 1..* 1..* Cause generates ATD possesses System Figure 1: Core categories of the ATD theory and their relations [3] and refinement of the emerging theory via focus groups. In the following, we provide a concise summary of the categories emerging from our study, which constitute the foundation of our grounded theory on architectural technical debt. In addition, we provide some hints on the types and concepts of our theory, which constitute the finer-grained building blocks of the theory presented in our work [1]. The complete study [1] describes in detail each category, type, and concept of our theory, supported by extensive examples on how these manifest themselves in practice as described by industrial practitioners. A high-level overview of our theory on architectural technical debt is depicted in Figure 1. System: The system category represents the system being developed. In our research, we follow the definition of “software-intensive system” as defined in the ISO/IEC Standard 42010, i.e., “any system where software contributes essential influences to the design, construction, deployment, and evolution of the system as a whole” [2]. A system possesses a certain amount of architectural technical debt, that usually accumulates in time, and is managed via different management strategies. Architectural Technical Debt (ATD): The ATD category represent the entirety of the technical debt incurred at the architectural level in a software-intensive system. In other words, ATD embodies the “big” design decisions (e.g., choices regarding structure, frameworks, technologies, languages, etc.) that, while being suitable or even optimal when made, significantly hinder progress in the future. ATD Item: At the core of our theory lies ATD item, i.e., the category that represents the instances of ATD residing in a software-intensive system. ATD items belong in our theory to one of three mutually exclusive types, namely framework ATD items, process ATD items, and implementation ATD items. Framework ATD items are specific to the adoption and adaptation of software frameworks in software projects, and entail for example the use of unfitted, superfluous, or not updated frameworks. Process ATD items instead regard the high-level processes of archi- tecting and managing software-intensive systems, such as neglected architecture maintenance and evolution, or minimum-viable products used as immature architectural foundation for the development of a software-intensive system. Finally, implementation ATD items focus on lower-level implementation details that, due to their widespread impact on the maintenance and evolution of a software-system, become of architectural relevance. Examples of implementation ATD include segments of code affected by technical debt, or ill-designed components created via iterative trial-and-error development activities. Cause: At the root of each ATD item lies one or more cause. Each cause can generate one or more ATD items. Causes belong in our theory to two different types, namely internal and external causes. Internal causes embody factors inherent to the development and maintenance of the system, while external causes regard the influence of the context of software-intensive systems on their ATD. Prominent examples of internal causes are the lack of architectural knowledge, unsuitable architectural decisions, lack of anticipation, and human factors. Notable external causes are instead the simple passing of time, time pressure, business pressure, and the misalignment of an architecture with its context. Consequences: As causes can generate one or more ATD items, so ATD items can lead to one or more consequences. From our investigation, three different types of consequences emerged, namely business-related consequences, functionality-related consequences, and product- development-related consequences. Business-related consequences regard financial aspects of software development, such as a carrying cost spent for maintenance and evolution of a system, the loss of business opportunities, or a higher risk to incurring in other ATD consequences. Functionality-related consequences instead affect working on functionalities of a software- intensive system, and range from impediments arising when maintaining a functionality, to the impossibility to implement new functionalities due to a completely crystallized architecture. Finally, product-development-related consequences affect development activities, and manifest themselves as difficulties in carrying out parallel work, or even a persistent flakiness that makes the behaviour of a software-intensive system unpredictable. Interestingly, ATD items can also be “dormant”, i.e., the ATD items are present in the system, but do not lead to any immediate consequence. Symptoms: Consequences can display symptoms. Rather than being ATD items per se, similar to the medical domain, symptoms can point to the presence of ATD items in a software- intensive systems, especially if more symptoms co-occur. Symptoms can indicate the presence of one or more ATD items, i.e., observing symptoms displayed by a consequence can lead to the identification of one or more ATD items. In the most recurrent cases, a multitude of symptoms point to a single, widespread, ATD item. In our study we identified four types of symptoms, namely symptoms related to issues, resources, performance, and development practices. ATD symptoms related to issues can emerge as recurrent costumer issues, recurrent patches, a high number of defects, or even security breaches. Resource-related symptoms instead can manifest as growing maintenance activities, the need of senior or specialized staff, or growing monetary resources needed to keep a software-intensive system running. Regarding issues related to performance, these can appear either as scalability issues, or performance stalls that cannot be resolved without a major architectural refactoring. Finally, development-related symptoms emerged in our study as the instinctual refrain of software developers to modify a certain component where ATD resides, or as functionalities implemented in the wrong component, or as the appearance of multiple yet inconsistent instances of the same data throughout a software-intensive system. Interestingly, ATD items can also not display any symptom, either because the ATD items are “dormant”, or because the observed symptoms are not sufficiently distinct to establish the relation. ATD Management Strategies: ATD items can be addressed via one or more ATD manage- ment strategies. Similarly, it is possible to address multiple ATD items with a single management strategy (typically via rewrites). In our work, we identified three types of management strategies, namely active, reactive, and passive management strategies. Active strategies are based on the acknowledgment of the presence of ATD, and the development of a plan to actively manage it. Active management strategies include the application of the “boy scout rule”, systematically dedicating time to address ATD, and building up technical credit to mitigate the impact of the ATD that could emerge in the future. Reactive management strategies entail the postponement of refactoring activities until the repayment becomes unavoidable, and range from superficial opportunistic patches, to major refactoring activities, and even the rewrite from scratch of entire software-intensive systems due to “technical debt bankruptcy”. Tools: ATD management strategies can be supported by tools, e.g., static analyzers and linters, such as Clang Tidy1 and SonarQube2 . In our investigation, the adoption of tools to explicitly identify and manage ATD did not emerge as an established industrial practice, possibly due to the perceived immaturity or usefulness of existing ATD-centric tools. Artifacts: ATD items can affect and reside in one or more artifacts, e.g., architectural compo- nents, test suites, and documentation. In addition, ATD can also occur in the relation established between two or more of these artifacts. Commonly, given the widespread nature of ATD items, numerous artifacts are simultaneously affected by a single ATD item. While architectural compo- nents are the ever-present artifacts in which ATD items manifests themselves, test suites result also to be often affected by ATD items residing in architectural components. Similarly, ATD items can be reflected in a partial, absent, or even erroneous documentation of the architecture of a software intensive-system. Prioritization strategy: ATD management strategies can be guided by a prioritization strategy, i.e., a strategy with which ATD management tasks are prioritized along with other development tasks, such as bug fixes, and implementation of new functionality [4]. ATD prioritization strategies can leverage one or more management strategies, depending on the specific context considered and the ATD item(s) regarded. Due to difficulties with quantifying the impact of ATD, practitioners do not adopt systematic prioritization approaches for ATD; rather, they use informal ones, such as a personal “gut feeling”, to balance the refactoring of their ATD with other development activities. Person: An emerging category which is directly related to the ATD item category is person. The relation between person and ATD items is of a multifaceted nature. People can highly influence ATD items, from the establishment of ATD items to their resolution. Similarly, also ATD items can influence people, as the encompassing and complex nature of ATD can affect development activities over a prolonged period of time, leading to severe consequences on the morale of developers. Awareness of people also plays a role in ATD, as to be able to manage ATD, one must first be aware of its presence. Personal drive, seniority, and skill set of people are also related to ATD, as these can lead to the championing of refactoring ATD items, or the lingering of an ATD item in a software-intensive system for a long time. In addition, the intuition of people can lead to the identification, prioritization and management of ATD, while 1 https://clang.llvm.org/extra/clang-tidy 2 https://www.sonarqube.org numerous cognitive biases can instead lead to the inadvertent introduction new ATD items. Communication: ATD can lead to the communication of concepts related to it among people working on a software-intensive system where the ATD resides. More specifically, people can explain ATD, i.e., rise awareness among developers, managers, and the like, of the presence of ATD items. Rising awareness results to be an important aspect steering ATD management and prioritization strategies. ATD can also lead to communication impediments, as rising awareness on the severeness of the ATD present in a software-intensive system is not always an easy task. In the most problematic cases, ATD can lead to friction among people working on a software-intensive system, resulting in blaming people who potentially incurred in ATD items, or did not manage them properly. Finally, in our theory emerged difficulties in communicating the presence of ATD to the stakeholders of software intensive-systems. In fact, as stakeholders might not possess the same technical insights as developers, as the ATD in a software-system grows, so do the difficulties in explaining why time needs to be allocated to refactoring activities instead of implementing new functionalities. References [1] R. Verdecchia, P. Kruchten, P. Lago, I. Malavolta, Building and evaluating a theory of architectural technical debt in software-intensive systems, Journal of Systems and Software 176 (2021). doi:https://doi.org/10.1016/j.jss.2021.110925. [2] ISO/IEC/IEEE, Systems and software engineering – architecture description, ISO/IEC/IEEE 42010:2011(E) (Revision of ISO/IEC 42010:2007 and IEEE Std 1471-2000) (2011) 1–46. doi:10. 1109/IEEESTD.2011.6129467. [3] R. Verdecchia, P. Kruchten, P. Lago, Architectural Technical Debt: A Grounded Theory, in: European Conference on Software Architecture, Springer, 2020, pp. 202–219. doi:10.1007/ 978-3-030-58923-3\_14. [4] P. Kruchten, What Colour Is Your Backlog?, 2008. Available Online: https://tinyurl.com/ y6f7vhpx (Accessed 10th May 2020).