Escaping the Technical Debt Cycle
A talk by Michael Feathers: Escaping the Technical Debt Cycle
In the talk, he urges against most numeric metrics. He praises the Open/Closed Principle as one important way to avoid adding unhealthy debt:
In object-oriented programming, the open/closed principle states “software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification”; that is, such an entity can allow its behaviour to be extended without modifying its source code.
Bob Martin defines it more clearly:
You should be able to extend the behavior of a system without having to modify that system.
The rest of SOLID can also be helpful, but Feathers spoke most about Open/Closed.
He recommended refactoring code to make adding the new feature easy, rather than just modifying the code for the new behavior.
Single responsibility principle seems closely related: techniques for solving open/closed can also help with SRP. By providing an extension point, you keep a class or function focused on a single responsibility and allow the other responsibility to be injected in an open manner.
Single responsibility principle is broken in a lot of tech debt laden code. Code that changes together belongs together.
This video about SRP by Uncle Bob is a good explanation of the issues and the way to think about SRP.