Keep Interfaces Small
Don't force classes, modules, or components to depend on (or even know about) methods they don't need. For example, tests should not have to call other functions, connect to database or web servers, or go through login screens just to validate a business rule.
Keep your abstractions private. Using small, specific interfaces will help minimize dependencies — supporting a flexible, stable, and testable architecture.