Editor’s note: Good news: you can reduce the odds of technical debt appearing in the future right at the start of your software project. Below, Boris shares our practices on this. And if you’re already in the middle of the project with growing tech debt, you can consider our software engineering consulting services to put it back on track.
Based on ScienceSoft’s 30-year practice in software development, I can distinguish three cornerstones of coping with technical debt:
- Implementing a strategy for technical debt management.
- Measuring key technical debt metrics.
- Tuning the development process to reduce technical debt.
While the first two activities help handle existing tech debt, the latter aims at minimizing its amount in the first place. And in this article, I’ll share how exactly ScienceSoft’s project managers optimize the development process to achieve this result in our projects.
I always stress the importance of the right architecture design. Today, development is all about software evolution. And architecture that requires refactoring and isn’t sustainable enough to accommodate changes will become a costly type of technical debt to repay.
Considering that, we at ScienceSoft employ easily scalable architectures, such as a microservices/container-based architecture, to extend them without a hustle at the beginning of an agile iteration for new features planned for a release, as we did in the backend development of an innovative hotel self-service app.
From what I’ve observed in different development teams, code review set as a routine process substantially enhances code quality and, consequently, reduces technical debt. All thanks to the valuable feedback from the fresh eye of other developers. However, code review works only if this process is convenient enough not to become a burden for developers.
I have a few recommendations from ScienceSoft’s approach to code review:
- Manageable pull requests. Our developers always say that complex pull requests with many code changes introduced are hard to trudge through for a reviewer. So, encourage a team to break such requests down into smaller ones and add a self-explanatory title and a brief description to each of them.
- A coding style guide. By documenting the preferred coding practices, you’ll get cleaner code and allow developers to focus on a review itself instead of debating on code formatting.
At ScienceSoft, we use test automation as a valuable tool to reduce technical debt for long-term projects. While it takes efforts to establish and maintain as well, automated testing helps uncover issues far more precisely in comparison with manual testing only (and cuts down the time needed for testing).
We automate unit tests to see if individual parts of the system work correctly and UI tests, paying special attention to automated regression testing to ensure code changes didn’t affect related parts of the system. For more details, you can explore the article prepared by my colleague Yan Syrakvash on our strategy on regression test automation.
What helps us solve any issues promptly is keeping an ongoing record of changes in a repository shared by a team. In such a way, if a problem occurs, we can easily trace its source. I consider this an especially important practice while migrating software to a new environment or modernizing legacy software, where changes should be introduced very carefully not to impact other parts of the system.
Don’t leave tech debt a chance
The practices I’ve listed work best if implemented in a project at the early stages when a team is setting up its processes. And if your ongoing project is experiencing technical debt, I recommend starting with analyzing sources of tech debt and building a plan on gradually eliminating it in the next iterations. You can do it either in-house or request our consulting services to get access to external expertise and save time resources.
Need to deal with a challenge in software planning, development or maintenance? Leverage the qualified assistance of our specialists to get the results you aspire to.