Small Interfaces
An interface should describe the smallest useful behavior a caller needs.
Go rewards interfaces that are discovered rather than designed in advance. Write the concrete type first, see how callers use it, and then extract only the methods that actually need to vary. A one-method interface is not a sign of weakness; it is often a sign that the boundary is honest.
The same instinct applies at the package level. If an interface exists only to make a mock possible, ask whether a fake implementation of a smaller dependency would be clearer. The best interfaces tend to feel obvious in hindsight and slightly too small when they are introduced.