This document outlines our team's strategy for managing technical debt (TD) and ensuring code quality throughout the development lifecycle.
Our backend quality strategy is built on comprehensive testing at multiple levels:
- Unit Testing Tasks: Creation of unit tests for individual components and functions to ensure correctness at the lowest level
- Integration Testing Tasks: Development of integration tests to verify correct interaction between different modules and services
- End-to-End Testing Tasks: Implementation of E2E tests to validate complete user workflows and system behavior
- Code Review Tasks: Dedicated tasks for reviewing and refactoring code based on test failures and identified issues
Our frontend approach combines manual and automated testing:
- Manual UI Testing & Code Review Tasks: Manual testing of the user interface to identify visual bugs, usability issues, and inconsistencies, followed by code corrections
- Final E2E Testing Tasks: Comprehensive end-to-end testing with subsequent code adjustments to fix any failing tests
We leverage SonarCloud as our primary automated quality gate:
- Automatic Quality Assessment: SonarCloud automatically analyzes code quality on every merge, providing immediate feedback on code health
- Branch-Level Monitoring: Quality checks run on feature branches to give early warnings (non-blocking at this stage)
- Main Branch Monitoring: Quality gates provide informative feedback when merging into the main branch, serving as a quality indicator to guide improvement efforts
- Quality Metrics: SonarCloud evaluates multiple dimensions:
- Code cleanliness (absence of code smells and duplications)
- Security vulnerabilities
- Code maintainability
Our approach focuses on addressing critical issues identified by SonarCloud when merging to main. We don't maintain a formal priority hierarchy since:
- SonarCloud quality gates clearly identify areas for improvement
- Critical issues are prioritized and addressed when feasible before merge
- Other issues are addressed opportunistically during code review tasks or in subsequent iterations
- Feature branches undergo continuous SonarCloud analysis (non-blocking)
- Developers address quality issues early during code review tasks
- Test tasks ensure feature correctness before proceeding
- After all features are implemented, create a pull request from
devintomain - Review SonarCloud feedback and address critical issues when feasible through dedicated tasks
- Document any remaining issues for future sprints and perform the merge
At the start of Sprint 3, we will allocate dedicated time to address Legacy TD Tasks: tasks specifically addressing technical debt accumulated in Sprints 1 and 2, when quality controls were not yet in place. This is a one-time effort to bring the existing codebase up to our current quality standards.