If mistakes happen, then the subject has not
been effectively communicated. No matter what opinion the communicator may have about their communication.
This is very frequently a problem for programmers and other technical types. The way I put it is that, Programmers tend to communicate precisely and ineffectively. Meaning that programmers tend to make sure that their communication says exactly what they mean, but then run into trouble because the person they are talking to is simply not ready for a precision where every nuance matters. Therefore, even though you've correctly said everything that needs to be said, you haven't actually communicated anything.
I think this happens because the mindset that you need to be in to do technical work is extremely precise, and it is hard to switch in/out of that mindset when talking to others, but very few people are normally in that kind of mindset.
However it doesn't really matter why it happens. What is important is to realize that it does happen, and to try to compensate for that. (A very common and useful method of compensating is to have a person between the technical person and the end user who is good at "translating".)