Protocol Errors

Every time you interact with an object by calling methods on it, you are making assumptions about how it will respond to the messages you send.

When the actual system behavior does not match your expectations, things tend to break, often in unpredictable ways.