Instrumenting legacy services
The word legacy has a negative connotation in software development, implying something out of date and not exciting to work on. In this section, we will focus on a different aspect and define a legacy service as something that mostly successfully does its job but no longer evolves. Such services may still receive security updates or fixes for critical issues, but they don’t get new features, refactoring, or optimizations.
Maintaining such a service requires a different set of skills and fewer people than the evolving one, so the context of a specific system can easily get lost, especially after the team that was developing it moved on and now works on something else.
As a result, changing such components is very risky, even when it comes to updating runtime or dependency versions. Any modification might wake up dormant issues, slightly change performance, causing new race conditions or deadlocks. The main problem here is that with limited...