Self-admitted technical debt in modular open-source Ruby on Rails ecosystems: a multi-project empirical study
Abstract
Background: Self-Admitted Technical Debt (SATD) — intentional shortcuts documented by developers in source code comments — has been extensively studied in Java and Python, but the Ruby on Rails ecosystem remains unexamined despite its scale in civic tech, e-commerce, and social networking.
Aim: This study investigates the prevalence, distribution, and types of SATD in five prominent Ruby on Rails open-source projects, focusing on how modular architectures based on Rails engines shape SATD distribution.
Method: We mined 1.55 million lines of Ruby across Decidim, Discourse, Solidus, Spree, and Mastodon, extracted 907 SATD comments using keyword-based heuristics, analyzed density and module-level correlations, and manually classified a stratified sample of 400 comments.
Results: We report SATD under two scenarios: inclusive (treating rubocop:disable as formalised SATD) and classical (excluding it). The mean density is 0.50 SATD/KLOC in the inclusive scenario and 0.26 SATD/KLOC in the classical scenario — substantially below Java figures under either view. Formalised SATD — predominantly inline linter-suppression markers and dependency workarounds — accounts for 55.1% of validated instances, a category absent from Java-focused taxonomies. Module size predicts SATD count (ρ = 0.684, p < 0.001) but not density. Manual validation reveals a 9.8% overall false-positive rate, concentrated in the REVIEW and TEMPORARY keywords.
Conclusion: Ruby on Rails projects exhibit a distinct SATD profile in which debt is often expressed through RuboCop interaction rather than free-text comments. SATD taxonomies and detection tools should be extended with a formalised subclass to accommodate dynamically-typed ecosystems with strong linting cultures.
