So much about communication is being able to agree on the same ideas. It doesn’t even matter if you actually agree on the ideas, what’s important is that you’re agreeing on what the ideas are.
There’s a lot of difference in what ideas are from person to person. What is gun control? What is poverty? What is financial intelligence? What is your birthday?
OK, your birthday is the most objective thing on that list but it’s probably not the exact same birthday as mine.
There are only two hard things in computer science: naming things; cache invalidation; and off-by-one-errors. Because in Computer Science, we count starting from 0 not 1.
Build a Shared Vocabulary
When you’re dealing with clients, it’s critical to reach a mutually understood architecture for ideas to pass through. There is no chance you will build the right software if the entire team doesn’t have a shared understanding of exactly what it is you’re talking about
You need to constantly groom your vocabulary about the subject. Make sure your client has the same definition for common terms and systems. There are a hundred of thousands of words in the language, and that’s just in the dictionary. When you add technology and acronyms and bespoke system designs, it’s not reasonable to expect that everyone involved in the project has an identical understanding of what each thing means. These are technical terms and will have subtle differences in the way they are applied. It doesn’t matter what the language is, it’s about what it means.
On most projects, it will be worth your time to compile a glossary or similar documentation with common terms and their definitions. This will help everyone to be on the same page and will be especially useful when new people are introduced to the project.