Technical Debt Friction for Maintenance Prioritization: An Industrial Multi-Case Study


Abstract

Software-intensive organizations need effective ways to identify where maintenance and refactoring efforts will yield the greatest practical benefit. Although software analytics such as code health, hotspots, and coupling provide valuable signals, they do not always capture the experienced burden of change that slows software evolution in practice. This paper presents a multi-case industrial study of technical debt friction as a prioritization-oriented concept for identifying where technical debt most strongly affects maintenance and evolution. We investigate how practitioners interpret the concept, whether friction-related analysis aligns with perceived maintenance pain points and refactoring needs, and what broader maintenance and evolution insights friction can provide beyond individual refactoring candidates. To this end, we conducted structured walkthrough sessions with practitioners across multiple industrial cases using analysis artifacts including code health, hotspots, coupling, refactoring targets, and socio-technical views. Our findings show that practitioners generally considered technical debt friction useful for reasoning about maintenance burden, especially when interpreted together with complementary technical and socio-technical views. At the file level, friction often aligned with known problematic areas and, in several cases, with files that later received maintenance attention, although its practical relevance depended strongly on context. In addition, our exploratory project-level analysis suggests that friction distributions may reveal broader maintenance and evolution patterns. These results indicate that technical debt friction is promising as a decision-support concept, but most effective when used with contextual knowledge and supporting evidence.

1 Introduction↩︎

Software-intensive organizations continuously face the challenge of evolving complex systems under limited time and resource constraints [1]. In such settings, maintenance and evolution decisions are rarely driven by the goal of improving all problematic code equally; instead, teams must decide where intervention is most worthwhile and which parts of a system most urgently deserve refactoring or restructuring [2], [3]. Existing software analytics provide useful signals for this purpose, including code health indicators, hotspots, change coupling, and ownership-related metrics [3][6]. However, in practice, teams need a more direct way to reason about the experienced burden of change: not only whether code appears problematic in isolation, but whether it slows down development, complicates maintenance, increases coordination effort, or raises the cost of future evolution [5], [7].

This practical concern motivates the notion of technical debt friction. In this paper, we use the term technical debt friction to denote the practical resistance that problematic parts of a system impose on ongoing maintenance and evolution [8]. To the best of our knowledge, technical debt friction is not a standard term in the technical debt literature; rather, it appears to have emerged as a practice-oriented operationalization of how technical debt affects development productivity and change effort [8], [9]. Rather than focusing narrowly on structural quality defects, technical debt friction aims to capture the resistance that parts of a system create during ongoing change and maintenance. Such resistance may arise from poor code quality, but also from broader factors such as recurring change concentration, unstable dependencies, refactoring difficulty, fragmented ownership, or knowledge bottlenecks [1], [2], [4], [5], [7], [10]. For industrial teams, this perspective is attractive because it speaks directly to day-to-day engineering concerns: which parts of the system are most difficult to work with, which areas consume disproportionate effort, and where improvement work is most likely to pay off.

Despite this promise, the usefulness of technical debt friction cannot be assumed. A concept intended for industrial decision making must be understandable to practitioners, aligned with their experience, and sufficiently actionable to support prioritization. Otherwise, it risks becoming yet another abstract software quality label with limited practical value. This creates an important problem for both researchers and tool builders: while many software analytics concepts are technically plausible, far fewer have been examined in terms of how practitioners actually interpret them, whether they trust them, and how they use them when reasoning about real maintenance pain points. In particular, it remains unclear whether technical debt friction provides added value beyond more established views such as code health, hotspots, or coupling analyses, or whether practitioners instead see it as a relabeling of existing quality concerns.

To address this problem, we conducted a multi-case industrial study to investigate the practical usefulness of technical debt friction in software maintenance and evolution. Our study examines how practitioners interpret the concept when applied to their own systems, whether friction-related signals align with their perceptions of maintenance pain points and refactoring needs, and what benefits and limitations emerge when the concept is discussed in real industrial contexts. The study addresses the following research questions (RQs):

  • RQ1: How do practitioners interpret technical debt friction when applied to real industrial software systems?

  • RQ2: To what extent does technical debt friction align with practitioners’ perceptions of maintenance pain points and refactoring needs?

  • RQ3: Can project-level friction distributions provide broader maintenance and evolution insights beyond individual refactoring candidates?

The study covers multiple industrial cases and involves practitioners with direct knowledge of the analyzed systems. Using structured walkthrough sessions centered on CodeScene [11] analysis artifacts, including code health, hotspots, coupling, refactoring targets, and socio-technical views, we collected evidence on the interpretability, credibility, and actionability of the friction concept across cases.

Our findings show that practitioners generally regarded technical debt friction as a meaningful and useful concept for reasoning about maintenance burden, but not as a standalone signal. Across the studied products, friction was most useful when discussed together with complementary views such as code health, hotspots, coupling, and socio-technical information, and when interpreted in relation to product context, architectural centrality, and ongoing development activity. At file level, friction often aligned with areas that practitioners already considered problematic and, in several cases, with files that later received maintenance or refactoring attention. At the same time, the study also showed that high friction does not uniformly imply high practical importance: isolated files, test code, and temporary activity spikes required more careful interpretation. Beyond individual candidates, our exploratory project-level analysis further suggests that friction distributions may provide broader insights into how maintenance effort is distributed across a system. These findings indicate that technical debt friction is promising as a maintenance-oriented decision-support concept, but that its practical value depends on contextual interpretation and supporting evidence.

The paper is structured as follows. Section 2 presents the background. In Sections 3 and 4, we present our research design and the results, respectively. In Section 5, we discuss cross-case findings. Section 6 summarizes the threats to the validity of our study. Section 7 discusses the related work. We conclude the paper in Section 8.

2 Background and Conceptual Framing↩︎

2.1 Technical Debt and Maintenance Prioritization↩︎

Software maintenance and evolution require continuous prioritization [1]. Since teams cannot address all quality issues at once, they must focus limited effort where it yields the greatest practical benefit [2]. Although technical debt captures how suboptimal decisions increase future maintenance costs, it remains a broad concept. In practice, teams need support not only to identify technical weaknesses, but also to determine which ones most strongly hinder ongoing development [2]. Software analytics provide useful signals, including code quality indicators, hotspots, and ownership-related views [3][5]. These can reveal technically problematic, change-prone, or organizationally risky parts of a system [3], [7]. However, such signals often remain fragmented, leaving teams without an integrated view of which parts impose the greatest practical burden on maintenance and evolution.

2.2 CodeScene CodeHealth and Hotspots↩︎

CodeHealth™ (CH) is a quality metric in the CodeScene SE intelligence platform [11] intended to capture how cognitively difficult source code is for developers to understand. It combines the number and severity of detected code smells into a file-level score from 1 to 10, where lower scores indicate higher cognitive load and maintenance effort. CodeScene also reports LoC-weighted CH averages at the project level, for architectural components, and for user-selected file sets. Prior work has validated CH through its association with file-level defect density and development time [12], [13], as well as in a comparative study on a public benchmark [14]. CodeScene uses hotspots to identify the code with the highest development activity. In active projects, file revisions typically follow a highly skewed distribution, where a small subset of files accounts for a large share of changes. CodeScene identifies this subset through knee-point analysis of the change-frequency distribution, separating frequently modified files from the long tail of rarely changed ones. The average CH of the flagged hotspot files is referred to as the Hotspot CH (HS_CH).

2.3 Technical Debt Friction↩︎

Technical debt friction denotes the practical resistance parts of a system impose on ongoing maintenance and change [8]. This resistance may stem from structural weaknesses, frequent changes, unstable dependencies, refactoring difficulty, or socio-technical factors such as fragmented ownership and knowledge bottlenecks [2], [4], [5], [7], [15]. The concept shifts attention from isolated quality deficiencies to their concrete impact on day-to-day software work. Since maintenance difficulties typically arise from the interplay of technical and organizational conditions rather than a single cause [5], [7], technical debt friction aims to capture this broader burden and support more effective maintenance prioritization [8].

We calculate friction at two levels. At the project level, friction is used for characterizing and comparing projects, resulting in a score on a bounded 0–99 scale as follows:

\[\text{Fric}_{\text{proj}} = (10 - \text{HS\_CH}) + \left(100 - 10 \cdot \frac{\sum_{f \in F} CH_f \cdot Rev_f}{\sum_{f \in F} Rev_f} \right)\]

where \(f \in F\) denotes the individual files in the project, \(CH_f\) is the CodeHealth of file \(f\), and \(Rev_f\) is the number of revisions to file \(f\). We refer to the first term as the start friction and the second term as the dynamic friction. Note that the activity-weighted term includes only files with at least one revision during the analysis period (default value: 1 year). If no file has been revised, project-level friction is undefined. We discuss project-level friction scores in Section 4.3.

At the file-level, friction is calculated for localization and visualization in the interactive user interface. This score also combines relative revision activity and CH, while reserving part of the visual scale to emphasize leading hotspots. In Section 4.2 we discuss file-level friction scores.

2.4 Relation to Adjacent Concepts↩︎

Technical debt friction is related to, but distinct from, several established concepts. It goes beyond code health by emphasizing the practical burden of evolving code [8]. It also differs from hotspots, which in CodeScene identify files with high development activity regardless of code quality. Earlier platform versions combined hotspots with low-code health to flag a small, actionable subset of files, whereas technical debt friction provides a more fine-grained signal of how development activity interacts with maintainability concerns across the codebase. Likewise, change coupling may reveal one source of maintenance difficulty, but does not itself capture the broader resistance experienced in practice [4]. Nor is high friction equivalent to a refactoring decision, which also depends on strategic importance, business constraints, and implementation cost [2]. Finally, technical debt friction also has a socio-technical dimension: maintenance burden depends not only on code structure, but also on how knowledge, ownership, and coordination are distributed across the team [5], [7]. We therefore view technical debt friction as an integrative concept for reasoning about maintenance burden through the combined lens of change activity and maintainability.

2.5 Study Focus↩︎

Our goal is not to position technical debt friction as a replacement for concepts such as technical debt, code health, or hotspots. Instead, we treat it as a practice-oriented concept whose value depends on whether practitioners find it understandable, credible, and useful in real development contexts. Accordingly, we examine whether practitioners interpret friction meaningfully, whether friction-related analyses align with perceived development pain points, and whether the concept supports actionable maintenance prioritization. In this sense, debt friction serves as a decision-support lens for identifying where a system most strongly resists change and where improvement efforts may yield the greatest practical benefit.

3 Research Design↩︎

We conducted a multi-case exploratory case study [16] with practitioner-based concept validation. While RQ1 and RQ2 are grounded in the practitioner interviews and walkthrough sessions, RQ3 complements this design with an exploratory project-level analysis of friction distributions.

3.1 Analyzed Projects↩︎

This study analyzed three industrial software products with CodeScene, with Products A and C each represented by two versions (Table 1). The cases span modern IoT and data-integration platforms as well as a large legacy monolith, and vary substantially in size (117K–2.8M LOC) and architectural complexity (19–76 components). Product C is the largest, a 2.8M-LOC monolithic system, whereas Products A and B are more modern codebases. Product A is a UI-intensive application connected to a backend IoT system, and Product B is a modern .NET system with some JavaScript and Python. Despite their smaller size, Products A and B contain more architectural components than Product C, indicating greater modularity. The products include minor Python integrations.

Table 1: Summary of industrial projects used in the study.
Product Short description Programming languages #Arch Components LOC Tool(s) used # Interviewees
A v1 A modern software platform for an IoT system TypeScript, JavaScript, Python 21 210K CodeScene 4
A v2 A modern software platform for an IoT system TypeScript, JavaScript, Python 21 235K CodeScene 4
B A modern software supporting data integration C# .Net 8, JavaScript, Python 76 117K CodeScene 3
C v1 A big monolith with a lot of legacy code C#, C++, Python 19 2.8M CodeScene 3
C v2 A big monolith with a lot of legacy code C#, C++, Python 19 910k CodeScene 3

3.2 Data Collection - Tools↩︎

We used CodeScene [11] as the main analysis tool because it provides an integrated set of code, evolutionary, and socio-technical views relevant to our study, including Code Health, Hotspots, and Technical Debt Friction. A key reason for this choice is that CodeScene directly provides Technical Debt Friction as an analysis view. This was important because our goal was not to construct a new friction metric, but to investigate whether this tool-supported notion is meaningful and useful in industrial practice. We therefore used CodeScene as an analysis and discussion aid to ground practitioner discussions about maintenance pain points, refactoring needs, and the practical burden of change.

Figure 1: Example technical debt friction view in CodeScene. It highlights parts of the codebase where low code health overlaps with development activity.

Figure 1 shows an example Technical Debt Friction view in CodeScene. It highlights parts of the codebase where current code health and recent development activity combine to create likely maintenance burden. Circle size reflects the LOC of individual files, while larger gray directory circles indicate directories with more files. Color encodes Technical Debt Friction, combining present code health with commit activity over the last 12 months, with warmer colors indicating higher friction. The view thus helps identify locations where technical debt is most likely to affect day-to-day development work and improvement efforts may have the greatest practical payoff.

3.3 Data Collection - Survey with Practitioners↩︎

To analyze each software product, we deployed the dockerized CodeScene tool on company-provided Linux virtual machines (VMs). Product owners cloned their codebases onto these VMs, and researchers were given restricted access to run the tool. We documented the results and conducted online seminars with developers, architects, and managers; CodeScene worked successfully across all products (Table 1). The interviews were conducted as part of a case study on how practitioners perceive and use socio-technical analysis results in daily work. Using a semi-structured protocol, the researcher shared their screen, navigated the CodeScene reports for the participant’s project, and prompted discussion.

Across all interviews, we followed the same sequence: (i) introduction and overview of CodeScene results, (ii) code health, (iii) hotspots, (iv) friction and change coupling, and (v) evaluation of friction and overall usefulness.

Table 2: Number of participants in our study.
Team Developer Architect Manager
Product Team A 2 1 1
Product Team B 1 1 1
Product Team C 1 1 1
Total Individual Count 4 3 3

3.3.1 Introduction and Overview of CodeScene Results↩︎

Each interview began with a short explanation of the study purpose. The interviewer then opened the project’s CodeScene dashboard and briefly introduced the main views, including overall status, code health, hotspots, and friction.

3.3.2 Exploration of Code Health↩︎

The interviewer focused on the Code Health view and selected a file with low code health in the interface. CodeScene’s warnings and violations (e.g., many conditionals, complex methods, cyclomatic complexity and its evolution) were discussed, and the corresponding source code was shown when needed. Participants were asked whether these indicators matched their assessment of the code.

3.3.3 Hotspot Analysis↩︎

The interviewer then used the Hotspots view, showing commits over the last 12 months, and highlighted files with high change frequency. Participants reflected on whether these hotspots matched their expectations and experience of frequently modified parts of the system.

3.3.4 Friction↩︎

The interviewer introduced friction as high development activity in low-quality code. Using CodeScene’s friction view, one highly flagged file was selected (multiple flagged files were selected for each product), and participants were asked whether they recognized it as a source of friction, whether it had caused problems in practice, and whether they had refactored or would consider refactoring it.

3.3.5 Friction and Change Coupling↩︎

The interviewer also showed dependencies and change-coupling information for the same file, asking how well these patterns reflected the actual architecture and coordination needs and whether such information would be useful for planning refactorings.

3.3.6 Evaluation of Friction and Overall Usefulness↩︎

In the final part, participants assessed the usefulness of the friction view and the CodeScene reports overall. They commented on which views and metrics they found most or least useful, how they might use such analyses to prioritize refactoring and maintenance, and whether these visualizations could help communicate technical debt and quality concerns to others.

3.3.7 Data Collection and Analysis↩︎

Interviews were conducted remotely via video conferencing, with audio and screen sharing recorded subject to consent. The interviewer took notes in each session, and recordings were transcribed verbatim. We applied thematic coding [17], focusing on (i) how practitioners interpret automated quality indicators, (ii) how they relate hotspots and friction to their lived experience of the codebase, and (iii) under what conditions they consider such metrics actionable. The shared protocol and tool sequence ensured comparability across interviews while allowing open-ended, in-depth discussion. Table 2 presents the study participants.

4 Results↩︎

4.1 RQ1: Practitioner Interpretation of Technical Debt Friction↩︎

To address RQ1, we analyzed how practitioners discussed and assessed Technical Debt Friction across the three products, focusing on whether they found it meaningful in practice, which files and maintenance situations they associated with it, and which contextual factors shaped their interpretation.

Across the products, participants generally found Technical Debt Friction useful when the flagged files corresponded to maintenance-relevant parts of the codebase. At the same time, they did not treat friction as a standalone signal, but interpreted it through knowledge of the codebase, file role, architecture, and current development context. We identified four findings.

4.1.0.1 Friction often aligned with existing practitioner knowledge

High-friction files frequently overlapped with files that participants already considered problematic. In Product C, one flagged file was recognized as a likely source of friction because of deep nesting, brain class characteristics, and low cohesion. In Product A, highly flagged files were similarly associated with bumpiness and nested complexity, and one was later refactored, reducing friction and improving code health. This overlap suggests that friction often resonated with lived experience rather than surfacing only implausible candidates.

4.1.0.2 Friction could also surface less expected candidates, but these required contextual interpretation

The sessions also highlighted files that practitioners had not initially expected, though these still required validation. In Product C, one flagged file showed low cohesion, bumpiness, and nested complexity, and participants confirmed that it was functionally overloaded, making it a plausible refactoring candidate despite not having been highlighted beforehand. At the same time, not all unexpected files were equally important. In Product B, where the standout files showed lower overall friction than in the other products, one flagged file was still recognized as complex and frequently changed, but the participants considered its issues less severe in context due to its role. These cases show that participants did not interpret friction mechanically, but used it as a prompt for further inspection and validation.

4.1.0.3 Practitioners did not treat friction as an automatic refactoring signal

They interpreted friction as an indicator of burden, but not necessarily as a direct trigger for action. In Product C, one high-friction file was treated as lower priority because it was isolated and had no change coupling to the rest of the codebase; participants noted that the same score in a more central component would likely have been judged differently. Likewise, in Product B, some highly flagged files were test files. Although the underlying issues were acknowledged, participants considered them less relevant and therefore lower priority than production files with similar scores. These examples show that friction was treated as a useful warning signal, but one that still required contextual prioritization.

4.1.0.4 Product context strongly shaped the meaning of friction

Participants consistently interpreted friction through the broader product and development context. Two factors were especially salient. First, because friction is partly driven by recent change frequency, it may miss files that are rarely modified but still difficult and time-consuming to change. Second, active refactoring can itself inflate friction, since files under cleanup may still have poor code health while receiving many commits. This was particularly visible in Product C and suggests that friction must be interpreted together with knowledge of ongoing work. More generally, participants emphasized that the practical relevance of friction depends on file role, whether it belongs to production or test code, its coupling to other parts of the codebase, and whether recent activity reflects routine maintenance or temporary restructuring.

Table 3: Summary of files examined for RQ2 and their observed alignment with maintenance relevance.
Product Flagged file Why highlighted Practitioner assessment Observed later outcome Alignment Friction
A v1 File 1 Low code health, high friction; structural issues Matched known problem areas; considered maintenance-relevant Later refactored; friction decreased and code health improved Strong 43%
A v1 File 2 High commits/year, high friction, low code health Recognized as problematic and architecturally important Refactoring deferred due to importance, but still considered relevant Strong 22%
A v1 File 3 / 4 / 5 High friction with varying structural quality Seen as relevant, but importance differed by file role and context Some remained relevant; others reflected more temporary activity Partial 16–19% / 6%
A v2 Previously flagged File 1 Reflected from earlier snapshot Still considered relevant Refactored by follow-up; friction reduced and code health improved Strong 4%
A v2 Previously flagged File 2 / 3 / 4 Reflected from earlier snapshot Relevance depended on whether changes reflected restructuring or persistent design issues Some improved; some remained under active development Partial 8% / 4% / 4%
B File 1 Complex logic, frequent changes, high friction Recognized as relevant, though participants argue for necessary friction in this file Remained a plausible improvement candidate Moderate 23%
B File 2 High friction and quality concerns Issues acknowledged, but lower priority because it was test code Would be refactored only if needed in practice Weak / context-dependent 17%
B File 3 / 4 / 5 Flagged due to friction Considered less relevant than production code; some likely influenced by recent activity Limited practical importance for prioritization Weak 19% /6%
C v1 File 1 Very high friction, deep nesting, brain class, low cohesion Strongly matched practitioner expectations; considered difficult and burdensome Reasonable refactoring candidate Strong 45%
C v1 File 2 Similar issues, but more isolated in architecture Acknowledged as problematic, but lower priority due to weaker coupling and local impact No immediate action planned Partial 33%
C v1 File 3 High friction during active rework Developers believed refactoring was ongoing Friction decreased, but remained influenced by high change activity Partial 33%
C v2 Previously flagged files from v1 Revisited in follow-up snapshot Some remained relevant, but interpretation depended on whether activity reflected ongoing maintenance or completed rework Mixed: some improved, others stayed similar Partial 38%/ 9%/ 14%

RQ1 Conclusion. Practitioners interpreted Technical Debt Friction as a meaningful but context-dependent indicator of maintenance burden. High-friction files were often aligned with existing practitioner knowledge of problematic code, and in some cases the metric also surfaced less expected but plausible candidates for further inspection. However, practitioners did not treat friction as a standalone refactoring signal. Instead, they interpreted it through architectural centrality, file type, ongoing development activity, and their broader understanding of the product. These findings indicate that friction is most useful when combined with practitioner knowledge rather than used in isolation.

4.2 RQ2: Alignment with Maintenance-Relevant Areas↩︎

To address RQ2, we examined whether files highlighted by Technical Debt Friction corresponded to areas that later proved maintenance-relevant in practice. We compared the initial CodeScene snapshot with subsequent changes in code health and friction, participants’ assessments during the interviews, and later refactoring or maintenance activity. Table 3 summarizes the main files examined, their practitioner assessment, and their observed later alignment with maintenance relevance. It reports representative friction values for selected files to provide a quantitative indication of signal strength while focusing on alignment rather than thresholds. To classify alignment between Technical Debt Friction and maintenance relevance, we used a qualitative, evidence-based scheme. Alignment was strong when practitioner recognition, technical indicators, and observed maintenance activity converged; moderate when recognition and indicators aligned but improvement evidence was limited; partial when only some evidence supported relevance; and weak or context-dependent when flagged files were judged lower priority (e.g., test code, peripheral components, or temporary spikes).

4.2.0.1 Friction often aligned with files that later received maintenance attention

Several files highlighted by friction were later refactored, improved, or remained under active maintenance. In Product A-v1, one highly flagged file (43% friction) was later refactored, reducing friction and improving code health, while another file (22% friction) was also recognized as problematic but deferred because of its low importance. In Product A-v2, one previously flagged file had been successfully refactored by the follow-up, again leading to improved code health and lower friction (e.g., from 22% to 8%). In Product C-v1, one flagged file (33% friction) had already been refactored during the observation period, reducing friction even though change activity remained high. These examples indicate that friction frequently identifies files that later become targets for improvement or remain central to ongoing maintenance work.

4.2.0.2 Alignment was strongest for central production code with persistent structural problems

Alignment was clearest when flagged files combined structural issues with architectural or functional importance. In Product A-v1, files with low code health and moderate-to-high friction (e.g., 16–19%) were considered meaningful because they were central to the product and showed bumpiness, nested complexity, and low cohesion. In Product B, a highly flagged production file (23% friction) with complex logic and frequent changes was seen as important, even if some issues were considered less severe than the metric suggested. In Product C-v1, one flagged file (45% friction) was recognized as difficult due to its size and nested conditionals and was seen as a reasonable refactoring candidate. These suggest that friction aligned most clearly with maintenance relevance when a file was both structurally problematic and central to everyday development work.

4.2.0.3 Alignment was weaker for isolated files, test files, and temporary activity spikes

High friction did not always imply high practical importance. In Product B, some flagged files were test files (e.g., 17–19% friction); although developers acknowledged their quality issues, they considered them less relevant than production files with similar scores. In Product C, one high-friction file (33% friction) was treated as lower priority because it was relatively isolated and weakly coupled to the rest of the codebase; developers noted that the same friction level in a more central component would likely have been judged differently. The sessions showed that some files were flagged because of recent bursts of activity rather than persistent maintenance bottlenecks. Thus, friction aligned less well with maintenance relevance when the flagged file was peripheral, belonged to test code, or reflected a temporary development spike. We do not interpret the lower priority given to test files as evidence that friction is less meaningful there; rather, it reflects a short-term prioritization choice, since poorly maintainable test code may still increase long-term maintenance cost by slowing validation, reducing confidence in change, and making refactoring harder to perform safely [18].

4.2.0.4 Version comparisons suggest that friction is sensitive to both refactoring and ongoing work

Comparing versions revealed both the usefulness and the limits of friction as an alignment signal. In several cases, refactoring reduced friction and improved code health (e.g., from 22% to 8% in Product A), showing that the metric can track meaningful maintenance progress. At the same time, friction could remain high, or even increase temporarily, when a file was actively being reworked. This was particularly visible in Product C-v1, where one file (initially around 33% friction) appeared to have been refactored during the observation window: friction decreased, but remained substantial because change activity stayed high. In Product A-v2, some previously flagged files remained in similar condition (e.g., low but stable friction around 3–4%), indicating persistent relevance, while others changed in ways more closely tied to ongoing work than to stable architectural problems. These observations show that friction can reflect genuine maintenance relevance over time, but is also sensitive to the timing of active development.

4.2.0.5 Context determined whether alignment translated into practical importance

Participants consistently interpreted alignment through product context rather than metric values alone. They considered whether a file belonged to production or test code, whether it was central or isolated, whether it was under refactoring, and whether recent commits reflected routine maintenance or temporary restructuring. This was clear in Product C, where the system was largely in maintenance mode and some files showed friction (e.g., 33–45%) mainly because of concentrated work by a small number of contributors. Participants emphasized that such files could still be less urgent than centrally used components with similar scores. These discussions indicate that alignment with friction was not sufficient by itself; its practical significance depended on contextual knowledge of the file’s role and the broader development situation.

RQ2 Conclusion. Our findings show that Technical Debt Friction aligned well with many areas that later proved relevant to maintenance and improvement, particularly central production files with persistent structural issues. However, the alignment was not uniform. It weakened for isolated files, test code, and files affected by temporary activity spikes, and it remained sensitive to ongoing refactoring work. These results suggest that friction is a useful indicator of maintenance-relevant areas, but that its practical value depends on reading it together with architectural role, file type, and current development context.

4.3 RQ3: Broader Maintenance and Evolution Insights Beyond Individual Refactoring Candidates↩︎

To address RQ3, we complemented the file-level analyses from RQ1 and RQ2 with an exploratory project-level analysis of friction distributions. Instead of focusing on individual flagged files, we examined how touches were distributed across all files in the latest available versions of the studied products and related these patterns to code health. Our goal was to investigate whether project-level friction distributions can reveal broader maintenance and evolution characteristics beyond individual refactoring candidates.

Figures 24 show the distributions for Products A-v2, B, and C-v2, respectively. In each plot, files are ordered along the x-axis by decreasing number of touches (revisions) during the analysis period, while the y-axis shows the corresponding number of touches, revealing the distribution of recent development activity across the codebase. Each point represents a file, colored by its CodeHealth score on the 1–10 scale from red (low) to green (high). The plots thus combine the two main constituents of friction: change frequency and maintainability.

The three products exhibit clearly different distribution shapes, suggesting that project-level friction captures more than the presence of problematic files. It also reveals how maintenance and development effort is distributed across the codebase, including differences in activity concentration, spread of touched files, and the extent to which active files remain structurally healthy. At the same time, these observations remain exploratory: the current evidence supports qualitative contrasts across the studied products, while stronger claims about generality or classification require further validation.

4.3.0.1 The distributions reveal different maintenance and evolution profiles

The overall distribution shapes differ markedly across the studied products. In Figure 2, Product A-v2 shows a moderately concentrated distribution, with a small set of highly active files and a long tail of rarely touched ones. Most points are green, indicating generally healthy active code, though a few lower-CodeHealth files appear among the more frequently touched files. In Figure 3, Product B has an even broader spread of touched files, with most points remaining green (comparatively healthy code despite substantial activity). By contrast, Figure 4 shows that Product C-v2 has a much more concentrated profile, with most files receiving little or no activity and a smaller subset accounting for the visible maintenance effort. These differences suggest that project-level friction distributions can capture broader maintenance profiles rather than only local refactoring needs.

Figure 2: Project-level friction distribution for Product A-v2. It plots the number of touches per file during the analysis period, with files ordered by touch frequency and colored by Code Health.
Figure 3: Project-level friction distribution for Product B. It shows a broad spread of touched files, with most active files remaining relatively healthy.
Figure 4: Project-level friction distribution for Product C-v2. It shows that most files receive little or no activity, while a smaller subset accounts for the visible maintenance effort.

4.3.0.2 Project-level friction scores complement the visual profiles

The visual contrasts in Figures 24 are also reflected in the aggregate friction scores. Product A-v2 has a Dynamic Friction of 6.39 and a Total Friction of 7.49, compared with 7.69 and 9.49 for Product A-v1. This reduction is consistent with a less severe overall friction profile in the newer version. Product B has values of 7.76 and 9.16, respectively. Figure 3 shows that much of the activity occurs in comparatively healthy files. Product C-v2 has the highest scores by far—14.87 and 19.27 (from 12.71 and 16.41 for Product C-v1)—which aligns with Figure 4, where a smaller subset of files concentrates much of the visible maintenance effort and lower CodeHealth values are more prominent. The friction scores reinforce the qualitative interpretation of the figures by showing clear differences in the magnitude of friction burden across the studied products.

4.3.0.3 The figures suggest different degrees of activity concentration

In Product C-v2 (Figure 4), a long flat region near the x-axis shows that most files are touched rarely, while only a limited subset receives notable attention. This pattern is consistent with a product in a more maintenance-oriented mode, where activity is concentrated in selected parts of the codebase. By contrast, Product B (Figure 3) shows a much broader spread of files with non-trivial activity, suggesting more widely distributed evolution work. Product A-v2 (Figure 2) lies between these two cases, with broader activity than Product C but a more concentrated profile than Product B, while remaining largely healthy overall. These contrasts suggest that project-level friction distributions may help distinguish between concentrated maintenance effort and more broadly distributed development activity.

4.3.0.4 Code Health adds interpretive value beyond activity alone

The distributions become more informative when activity is interpreted together with Code Health. Because the figures encode Code Health through color, they show not only which files are active, but also whether that activity is concentrated in healthier or more problematic parts of the codebase. This is especially useful when comparing Products A-v2 and B: both show broad activity, but Figure 2 suggests a somewhat more concentrated activity profile for A-v2, while Figure 3 is more broadly distributed and remains dominated by green points. This points to two different maintenance situations: one in which activity is more concentrated, though still largely healthy overall, and another in which activity is more broadly distributed while the code remains healthy. Product C-v2 (Figure 4) adds that limited overall activity can still coexist with a smaller set of files that continue to attract maintenance effort. Thus, the project-level view is useful because it combines where activity occurs with an indication of the quality of the files involved.

4.3.0.5 Project-level friction broadens the analytical role of friction

The project-level perspective provides insights beyond individual refactoring candidates. While file-level friction is mainly useful for locating specific inspection or refactoring targets, the distributions in Figures 24 reveal broader properties of the maintenance landscape, such as whether work is concentrated or widespread, whether frequent changes accumulate in healthier or weaker code, and whether the overall profile is more consistent with active evolution or selective maintenance. Project-level friction broadens the role of friction from local prioritization to higher-level characterization of how maintenance effort is distributed across a product.

4.3.0.6 The observed differences are promising, but the claims should remain bounded

Although the contrasts between Figures 24 are clear, the current evidence supports only bounded conclusions. The figures show that the studied products exhibit different friction-distribution shapes that plausibly align with their development contexts. However, stronger claims—such as reliably distinguishing lifecycle stage, maintenance mode, or project class—require additional support through a formal summary measure, systematic comparison across products or versions, and a broader evaluation set.

RQ3 Conclusion. Project-level friction distributions provide broader maintenance and evolution insights beyond individual refactoring candidates. Figures 24 and the corresponding aggregate scores reveal clear differences across products in activity spread, touch concentration, the relation between activity and CodeHealth, and overall friction magnitude. These results suggest that project-level views complement file-level analysis by characterizing broader maintenance profiles. However, the findings remain exploratory; stronger claims about lifecycle characterization or comparative ranking require further quantitative validation.

5 Cross-case Discussion↩︎

Table 4: Cross-case synthesis of how practitioners engaged with Technical Debt Friction across the study products. The table summarizes recurring interpretation patterns observed in the sessions and their implications for understanding friction as a maintenance-oriented concept.
Cross-case pattern Illustrative evidence from sessions Products Analysis level Discussion implication
Friction was grounded in concrete maintenance locations Repeated discussion of named subsystems, flagged files, and concrete code artifacts rather than abstract scores A, B, C Subsystem, file Friction was meaningful to practitioners when tied to real maintenance locations in the codebase
Friction was interpreted through neighboring views Code Health, Hotspots, Friction, Change Coupling, and Refactoring Targets were repeatedly used together A, B, C Cross-view Friction was treated as broader than any single metric and interpreted through the relation between structural quality, activity, and dependencies
Friction remained meaningful across levels of granularity Sessions moved between system maps, file-level examples, and function-oriented inspection A, B Subsystem, file, function Friction supported reasoning across both broader problematic areas and specific code artifacts
Friction included socio-technical concerns Ownership- and knowledge-related categories such as knowledge islands and contributor concentration were part of the discussion A Team, file Practitioners did not treat friction as purely structural, but also as shaped by knowledge distribution and coordination
Friction was treated as cumulative maintenance burden Files were discussed in relation to low code health, frequent change, coupling, complexity, and review-related issues A, B, C File, function Friction was understood as the combined effect of several maintenance-relevant conditions rather than a single defect type
Friction was discussed in a prioritization-oriented way Friction was repeatedly considered in relation to whether files warranted further attention or refactoring discussion A, B, C Cross-view, file Friction supported reasoning about where maintenance effort and improvement attention might be justified
Interpretation depended on explanatory context Friction was consistently discussed together with supporting information such as code health values, hotspot context, coupling, and team-related views A, B, C Cross-view Friction was useful in context, but not treated as self-explanatory in isolation
Friction should be read as a context-sensitive indicator Across products, practitioners qualified flagged files using architectural role, file type, coupling, maintenance mode, and knowledge of ongoing work A, B, C File, product Friction is most useful when interpreted together with product context rather than as a universal signal of importance
Alignment did not eliminate the need for judgment Even when flagged files appeared meaningful, practitioners still differentiated between files worth immediate attention and files better treated as lower priority A, B, C File, cross-case Friction can support prioritization, but does not replace human assessment of practical importance
Temporal interpretation matters Across versions and follow-up discussions, practitioners considered whether friction reflected accumulated burden, recent spikes in activity, or ongoing rework A, C File, version Friction should be interpreted in light of development timing, since high values may reflect either persistent problems or active remediation
Friction is more useful for structured discussion than for automatic ranking Across cases, friction was most effective when used to guide inspection and discussion, not when treated as a definitive ordering of files A, B, C Cross-case The main value of friction lies in supporting maintenance reasoning and communication rather than fully automating prioritization
Project-level friction broadens the analytical role of friction Beyond individual files, the product-level distributions helped characterize how maintenance effort was distributed across the codebase as a whole A, B, C Product, version Friction can support higher-level reasoning about maintenance and evolution, not only local refactoring candidate identification
Distribution shape can reveal different maintenance profiles Across products, the observed distributions differed in how strongly touches were concentrated in a limited subset of files versus spread across a larger part of the codebase A, B, C Product, version Project-level friction may help distinguish between more concentrated maintenance effort and more broadly distributed development activity
Activity alone is insufficient without code health context The project-level plots became more informative when touch distributions were interpreted together with Code Health, revealing whether active parts of the system were predominantly healthy or problematic A, B, C Product, version The broader value of friction lies in combining activity patterns with structural quality rather than inspecting either dimension alone
Project-level friction is promising, but its broader use remains exploratory The product-level analysis revealed meaningful contrasts across the studied products, but stronger claims about lifecycle characterization or comparative ranking would require additional quantitative validation A, B, C Product, version Project-level friction distributions are useful as exploratory maintenance indicators, but should not yet be treated as validated classification or benchmarking measures

The RQ findings show that Technical Debt Friction is best understood not as a standalone metric, but as a maintenance-oriented decision-support concept whose usefulness depends on context, supporting evidence, and practitioner interpretation. Table 4 presents the detailed cross-case patterns observed across the products. In the discussion below, we synthesize these patterns into five higher-level cross-case insights (Sections 5.15.5). Rather than repeating the RQ results, this section discusses what the combined findings imply for how Technical Debt Friction should be interpreted and used in practice across products, contexts, and levels of analysis.

5.1 Friction as an Integrative and Context-Sensitive Concept↩︎

Practitioners engaged with friction as an integrative concept. Across all products, it became meaningful when discussed together with code health, hotspots, change coupling, refactoring-oriented views, and, where available, socio-technical information. Its value therefore lies less in introducing a new signal than in combining several maintenance-relevant signals into a single maintenance-oriented perspective.

At the same time, friction is inherently context-sensitive. Its meaning depends on factors such as file role, architectural centrality, coupling, maintenance mode, and ongoing work. Practitioners did not treat flagged files as important based on friction alone, but interpreted them in context (e.g., production vs. test, central vs. isolated, persistent vs. temporary activity). Thus, friction is most useful when supporting contextual interpretation rather than as a universal signal of importance.

A key example is the distinction between test and application code. Practitioners sometimes treated friction in test files as less urgent, even when problematic. This does not mean the signal is less meaningful; rather, it reflects short-term prioritization where delivery concerns outweigh long-term maintainability. In practice, poorly maintainable test code can still slow validation, complicate regression analysis, reduce confidence in change, and increase future refactoring costs. Discounting test-code friction may therefore indicate hidden maintenance burden rather than a flaw in the signal.

5.2 Friction Bridges Diagnosis and Prioritization↩︎

Friction helps bridge the gap between diagnosis and prioritization. Existing software analytics often provide valuable but fragmented views of structural weaknesses, development activity, coupling, or team-related risks. Across the cases, practitioners used friction to connect these views to the more practical question of where attention might be warranted. This did not replace prioritization judgment: practitioners still distinguished between immediately relevant files, plausible but lower-priority files, and files whose scores reflected temporary or peripheral conditions. However, friction helped focus attention and structure the discussion around whether the improvement effort might be justified. It narrowed the search space of concern rather than automating the final decision.

5.3 The Importance of Time and Ongoing Activity↩︎

Friction must be interpreted in relation to development timing. The version comparisons and follow-up observations showed that friction may reflect both persistent maintenance burden and active remediation. In some cases, refactoring reduced friction and improved code health; in others, friction remained elevated during active cleanup because changes continued while quality improved more slowly. High friction may therefore indicate either accumulated burden or ongoing work intended to reduce it. This temporal sensitivity reinforces that friction should not be read statically or independently of current development activity, but interpreted with knowledge of whether a component is being actively reworked, stabilized, or only occasionally modified.

5.4 Project-Level Characterization↩︎

The project-level analysis suggests that friction can support more than identifying individual refactoring candidates by showing how maintenance effort is distributed across a product. The studied products exhibited different distribution shapes, indicating varying degrees of activity concentration versus spread across the codebase, which may help distinguish between concentrated maintenance effort and more distributed development activity. The plots also show that activity is more informative when interpreted with code health, revealing whether work accumulates in healthier or more problematic parts of the system. At the same time, this broader use remains exploratory: although the contrasts were meaningful and consistent with development contexts, stronger claims about lifecycle characterization or comparative ranking require further quantitative validation. Project-level friction should therefore be seen as a promising exploratory indicator rather than a validated benchmarking measure.

5.5 Usefulness for Discussion, Not Automatic Ranking↩︎

Friction appears more useful for structured maintenance discussion than for automatic ranking. Across products, practitioners used it as a starting point for inspection and reflection, not as a self-sufficient answer to what should be done next. Even when flagged files aligned with known problematic areas, contextual and architectural understanding remained necessary before deciding whether a file truly warranted refactoring or maintenance attention.

5.6 Implications↩︎

These findings suggest three implications. First, Technical Debt Friction should be treated as a context-sensitive concept for reasoning about accumulated maintenance burden, not as a universally interpretable score. Second, its practical value lies in connecting fragmented software analytics to maintenance prioritization and communication. Third, effective use of friction requires supporting evidence and human judgment, especially when flagged files differ in role, centrality, or development timing. Overall, the combined findings indicate that friction is promising as an industrial maintenance concept because it helps practitioners reason not only about where code is problematic, but also about where the system resists change in ways that matter for development work.

6 Threats to Validity↩︎

Construct validity. A key threat is the interpretation of Technical Debt Friction, which combines technical and socio-technical aspects and may be understood differently by practitioners. The study also relies on CodeScene’s operationalization of friction and related views. We mitigated this by grounding discussions in concrete artifacts and interpreting friction with complementary analyses rather than in isolation.

Internal validity. The sessions may have been influenced by interviewer framing, presentation order, or participants’ prior beliefs. As a walkthrough-based study, confirmation bias and selective attention cannot be excluded. We mitigated this through a shared interview protocol, multiple cases, and discussion of both confirming and disconfirming examples.

External validity. The study covers three industrial products (two with multiple versions) and may not generalize to all systems, domains, or organizations. The usefulness of friction may depend on factors such as system size, architecture, maintenance mode, and team structure. We interpret the findings as evidence of practical relevance in the studied settings rather than universally generalizable conclusions.

Reliability. As in many exploratory industrial studies, the analysis involves researcher interpretation of practitioner discussions. We mitigated this through explicit research questions, a shared interview protocol, and grounding findings in concrete examples and version comparisons. Nevertheless, some subjectivity remains unavoidable.

7 Related Work↩︎

Our work relates to research on technical debt [19][21], maintenance prioritization [22], [23], refactoring support [24], [25], and socio-technical software evolution [26], [27]. Technical debt describes how short-term compromises increase future maintenance cost and complicate evolution [19]. Prior work shows that the challenge is not only to identify debt, but also to understand how it creates development friction and affects productivity [9], and that prioritization depends on developer judgment, context, and organizational tradeoffs rather than a single technical indicator [28][34]. Building on this, we focus on technical debt friction as a practice-oriented lens for identifying where technical debt most strongly impacts ongoing maintenance and evolution.

A second line of work has shown that software analytics can support maintenance and refactoring decisions [35], [36]. Code churn and related evolutionary signals help identify change-prone components [3], [37], while mining version histories reveals change coupling and hidden maintenance dependencies between artifacts [4], [38]. Other work has combined code quality and development activity to identify parts of the system that deserve attention, which is closely related to hotspot-based reasoning [39]. Refactoring studies likewise show that improvement decisions are selective and shaped by expected benefit, available tool support, and practical constraints rather than by structural quality considerations alone [2], [40][45]. Recent work on technical debt prioritization and automation also confirms continuing industrial interest in methods and tools that help rank debt items and guide action, while highlighting that actionability remains a central challenge [28], [29], [46], [47], [47], [48]. In contrast to prior work that studies individual signals or automation mechanisms in isolation, our paper investigates whether practitioners find technical debt friction meaningful and useful as an integrative decision-support concept across real industrial cases.

Maintenance burden is not purely technical; ownership, expertise concentration, and coordination also influence software quality and productivity [5], [7], [49]. This socio-technical perspective matters because many maintenance problems arise from the interplay of technical dependencies and organizational conditions rather than isolated code properties [5], [7], [50]. Our study complements this work by examining whether practitioners recognize technical debt friction as a way to interpret these combined effects when reasoning about maintenance pain points and prioritization.

8 Conclusion↩︎

This paper presented a multi-case industrial study of technical debt friction in real software development contexts. We examined how practitioners interpret the concept, how friction-related analyses align with maintenance-relevant areas, and whether project-level friction distributions can provide broader maintenance and evolution insights.

Our findings show that practitioners generally regarded technical debt friction as a useful indicator of maintenance burden, but not as a standalone signal. At file level, it often aligned with known problematic areas and, in several cases, with files that later received maintenance or refactoring attention, although its relevance depended strongly on context, such as file role, architectural centrality, and ongoing activity. At project level, the exploratory analysis suggests that friction distributions may reveal broader maintenance and evolution patterns, though these require further quantitative validation.

Acknowledgment↩︎

This paper has received funding from the Research Council of Norway’s Innovation Project for the Industrial Sector (IPN) Programme under grant agreement for project No. 340991 (TechDebtOps) and the Competence Centre NextG2Com funded by the VINNOVA program for Advanced Digitalisation with grant number 2023-00541.

References↩︎

[1]
C. R. De Souza and D. F. Redmiles, “An empirical study of software developers’ management of dependencies and changes,” in Proceedings of the 30th international conference on software engineering, 2008, pp. 241–250.
[2]
M. Kim, T. Zimmermann, and N. Nagappan, “A field study of refactoring challenges and benefits,” in Proceedings of the ACM SIGSOFT 20th international symposium on the foundations of software engineering, 2012, pp. 1–11.
[3]
N. Nagappan and T. Ball, “Use of relative code churn measures to predict system defect density,” in Proceedings of the 27th international conference on software engineering, 2005, pp. 284–292.
[4]
T. Zimmermann, A. Zeller, P. Weissgerber, and S. Diehl, “Mining version histories to guide software changes,” IEEE Transactions on software engineering, vol. 31, no. 6, pp. 429–445, 2005.
[5]
C. Bird, N. Nagappan, B. Murphy, H. Gall, and P. Devanbu, “Don’t touch my code! Examining the effects of ownership on software quality,” in Proceedings of the 19th ACM SIGSOFT symposium and the 13th european conference on foundations of software engineering, 2011, pp. 4–14.
[6]
S. Tverdal et al., “Combining insights from multiple tools to manage technical debt in industrial c# projects,” in 2025 IEEE international conference on software maintenance and evolution (ICSME), 2025, pp. 709–720.
[7]
M. Cataldo, J. D. Herbsleb, and K. M. Carley, “Socio-technical congruence: A framework for assessing the impact of technical and work dependencies on software development productivity,” in Proceedings of the second ACM-IEEE international symposium on empirical software engineering and measurement, 2008, pp. 2–11.
[8]
CodeScene, Accessed: 2026-04-23“Technical debt — CodeScene documentation.” https://codescene.io/docs/guides/technical/hotspots.html, 2026.
[9]
P. Avgeriou, P. Kruchten, R. L. Nord, I. Ozkaya, and C. Seaman, “Reducing friction in software development,” Ieee software, vol. 33, no. 1, pp. 66–73, 2015.
[10]
M. Astekin, A. Goknil, S. Sen, S. Tverdal, and P. Nguyen, “Detecting technical debt in source code changes using large language models,” in International conference on product-focused software process improvement, 2025, pp. 334–352.
[11]
CodeScene, https://codescene.com/, Visited in 2026.
[12]
A. Tornhill and M. Borg, “Code Red: The Business Impact of Code Quality - A Quantitative Study of 39 Proprietary Production Codebases,” in Proc. Of the 5th International Conference on Technical Debt, 2022, pp. 11–20, Accessed: Dec. 02, 2022. [Online].
[13]
M. Borg, I. Pruvost, E. Mones, and A. Tornhill, “Increasing, Not Diminishing: Investigating the Returns of Highly Maintainable Code,” in Proc. Of the 7th International Conference on Technical Debt, 2024, pp. 21–30, Accessed: May 13, 2024. [Online].
[14]
M. Borg, M. Ezzouhri, and A. Tornhill, “Ghost echoes revealed: Benchmarking maintainability metrics and machine learning predictions against human assessments,” in 2024 IEEE international conference on software maintenance and evolution (ICSME), 2024, pp. 678–688.
[15]
D. Wu et al., “iSMELL: Assembling LLMs with expert toolsets for code smell detection and refactoring,” in Proceedings of the 39th IEEE/ACM international conference on automated software engineering, 2024, pp. 1345–1357, doi: 10.1145/3691620.3695508.
[16]
R. YIN, “Case study research: Design and methods (ver. ed.),” Newbury Park, CA: Stage, 1989.
[17]
D. S. Cruzes and T. Dyba, “Recommended steps for thematic synthesis in software engineering,” in 2011 international symposium on empirical software engineering and measurement, 2011, pp. 275–284.
[18]
V. Garousi and B. Küçük, “Smells in software test code: A survey of knowledge in industry and academia,” Journal of Systems and Software, vol. 138, pp. 52–81, Apr. 2018, doi: 10.1016/j.jss.2017.12.013.
[19]
P. Kruchten, R. L. Nord, and I. Ozkaya, “Technical debt: From metaphor to theory and practice,” Ieee software, vol. 29, no. 6, pp. 18–21, 2012.
[20]
Z. Li, P. Avgeriou, and P. Liang, “A systematic mapping study on technical debt and its management,” Journal of Systems and Software, vol. 101, pp. 193–220, 2015.
[21]
E. Allman, “Managing technical debt,” Communications of the ACM, vol. 55, no. 5, pp. 50–55, 2012.
[22]
K. H. Bennett and V. T. Rajlich, “Software maintenance and evolution: A roadmap,” in Proceedings of the conference on the future of software engineering, 2000, pp. 73–87.
[23]
B. P. Lientz and E. B. Swanson, Software maintenance management. Addison-Wesley Longman Publishing Co., Inc., 1980.
[24]
T. Mens and T. Tourwé, “A survey of software refactoring,” IEEE Transactions on software engineering, vol. 30, no. 2, pp. 126–139, 2004.
[25]
A. A. B. Baqais and M. Alshayeb, “Automatic software refactoring: A systematic literature review,” Software Quality Journal, vol. 28, no. 2, pp. 459–502, 2020.
[26]
T. Mens, “An ecosystemic and socio-technical view on software maintenance and evolution,” in 2016 IEEE international conference on software maintenance and evolution (ICSME), 2016, pp. 1–8.
[27]
R. Hoda, “Socio-technical grounded theory for software engineering,” IEEE Transactions on Software Engineering, vol. 48, no. 10, pp. 3808–3832, 2021.
[28]
D. Pina, C. Seaman, and A. Goldman, “Technical debt prioritization: A developer’s perspective,” in Proceedings of the international conference on technical debt, 2022, pp. 46–55.
[29]
S. Fungprasertkul, R. Bahsoon, and R. Kazman, “Technical debt monitoring decision making with skin in the game,” ACM Transactions on Software Engineering and Methodology, vol. 33, no. 7, pp. 1–27, 2024.
[30]
R. Alfayez, W. Alwehaibi, R. Winn, E. Venson, and B. Boehm, “A systematic literature review of technical debt prioritization,” in Proceedings of the 3rd international conference on technical debt, 2020, pp. 1–10.
[31]
V. Lenarduzzi, T. Besker, D. Taibi, A. Martini, and F. A. Fontana, “A systematic literature review on technical debt prioritization: Strategies, processes, factors, and tools,” Journal of Systems and Software, vol. 171, p. 110827, 2021.
[32]
D. Pina, A. Goldman, and G. Tonin, “Technical debt prioritization: Taxonomy, methods results, and practical characteristics,” in 2021 47th euromicro conference on software engineering and advanced applications (SEAA), 2021, pp. 206–213.
[33]
R. R. De Almeida, C. Treude, and U. Kulesza, “Tracy: A business-driven technical debt prioritization framework,” in 2019 IEEE international conference on software maintenance and evolution (ICSME), 2019, pp. 181–185.
[34]
S. Mensah, J. Keung, J. Svajlenko, K. E. Bennin, and Q. Mi, “On the value of a prioritization scheme for resolving self-admitted technical debt,” Journal of Systems and Software, vol. 135, pp. 37–54, 2018.
[35]
S. Noei, H. Li, and Y. Zou, “An empirical study on release-wise refactoring patterns,” Proceedings of the ACM on Software Engineering, vol. 2, no. FSE, pp. 403–424, 2025.
[36]
S. A. Chowdhury, G. Uddin, and R. Holmes, “An empirical study on maintainable method size in java,” in Proceedings of the 19th international conference on mining software repositories, 2022, pp. 252–264.
[37]
S. Chowdhury, “The good, the bad, and the monstrous: Predicting highly change-prone source code methods at their inception,” ACM Transactions on Software Engineering and Methodology, vol. 34, no. 7, pp. 1–29, 2025.
[38]
W. Jin, Y. Cai, R. Kazman, G. Zhang, Q. Zheng, and T. Liu, “Exploring the architectural impact of possible dependencies in python software,” in Proceedings of the 35th IEEE/ACM international conference on automated software engineering, 2020, pp. 758–770.
[39]
J. Bohnet and J. Döllner, “Monitoring code quality and development activity by software maps,” in Proceedings of the 2nd workshop on managing technical debt, 2011, pp. 9–16.
[40]
E. Murphy-Hill and A. P. Black, “Refactoring tools: Fitness for purpose,” IEEE software, vol. 25, no. 5, pp. 38–44, 2008.
[41]
J. Ivers, R. L. Nord, I. Ozkaya, C. Seifried, C. S. Timperley, and M. Kessentini, “Industry’s cry for tools that support large-scale refactoring,” in Proceedings of the 44th international conference on software engineering: Software engineering in practice, 2022, pp. 163–164.
[42]
N. Nikolaidis, N. Mittas, A. Ampatzoglou, D. Feitosa, and A. Chatzigeorgiou, “A metrics-based approach for selecting among various refactoring candidates,” Empirical Software Engineering, vol. 29, no. 1, p. 25, 2024.
[43]
E. Murphy-Hill, C. Parnin, and A. P. Black, “How we refactor, and how we know it,” IEEE Transactions on Software Engineering, vol. 38, no. 1, pp. 5–18, 2011.
[44]
Y. Golubev, Z. Kurbatova, E. A. AlOmar, T. Bryksin, and M. W. Mkaouer, “One thousand and one stories: A large-scale survey of software refactoring,” in Proceedings of the 29th ACM joint meeting on european software engineering conference and symposium on the foundations of software engineering, 2021, pp. 1303–1313.
[45]
E. Tempero, T. Gorschek, and L. Angelis, “Barriers to refactoring,” Communications of the ACM, vol. 60, no. 10, pp. 54–61, 2017.
[46]
T. Detofeno, A. Malucelli, and S. Reinehr, “PriorTD: A method for prioritization technical debt,” in Proceedings of the XXXVI brazilian symposium on software engineering, 2022, pp. 230–240.
[47]
J. P. Biazotto, D. Feitosa, P. Avgeriou, and E. Y. Nakagawa, “Technical debt management automation: State of the art and future perspectives,” Information and Software Technology, vol. 167, p. 107375, 2024.
[48]
D. Tsoukalas, M. Siavvas, D. Kehagias, A. Ampatzoglou, and A. Chatzigeorgiou, “A practical approach for technical debt prioritization based on class-level forecasting,” Journal of Software: Evolution and Process, vol. 36, no. 4, p. e2564, 2024.
[49]
P. Souza, T. Ferreto, and R. Calheiros, “Maintenance operations on cloud, edge, and IoT environments: Taxonomy, survey, and research challenges,” ACM Computing Surveys, vol. 56, no. 10, pp. 1–38, 2024.
[50]
S. Lambiase, “Cultural and socio-technical aspects in software development,” in Proceedings of the 28th international conference on evaluation and assessment in software engineering, 2024, pp. 482–487.