This code quality is about keeping the relationship between objects intentional and clear. This is often referred to as “loose coupling.”
Code that is loosely coupled indirectly depends on the code it uses so it’s easier to isolate, verify, reuse, and extend. Loose coupling is usually achieved through the use of an indirect call. Instead of calling a service directly the service is called through an intermediary. Replacing the service later will only impact the intermediary, reducing the impact of change on the rest of the system. Loose coupling lets you put seams in your code so you can inject dependencies instead of tightly coupling to them.
Rather than call a service directly you can call through an abstraction ...