“Program to an interface, not an implementation” is a well-known mantra from the GoF book. Take this guidance to an extreme, though, and you generate POO instead of OOP. How do know if you crossed the line? I think it’s useful to take a step back and think about the word “interface” in a general sense. There are interfaces everywhere in software. There are interfaces between layers, between tiers, between applications, between objects, and between callers and their callees. Just about anything and everything in software, no matter how trivial, has an interface. The real question with interfaces...