This question already has an answer here:
I am struggling with applying the "programming to an interface" guideline because I can't seem to decide in which situations it is necessary and in which ones it's overkill (or even counter productive).
I would like to know of any heuristics or rules that you use in your projects to decide if you need to create a new interface and use it instead of an specific class.
Just to clarify, note that the question is not about the benefits of this guideline or the importance of following it. It's about some basic rules you use to know when to use it and when not to.