The "who" of communication cannot be effectively disentangled from the "what."
I will talk to programmers in a very different way than artists about
some things, such as algorithm design. I will use the exact same words and assisting devices for other things (like animation or shaders). And the best kind of communication is the kind you don't have to do: I won't generally have a reason to talk to either about audio production.
So there are three things you want to identify here:
- Who are you talking to?
- What are you telling them?
- What do you not have to tell them?
This will usually form a shape that answers the
real question, "what do you need to say?" Fill in that shape in the most contextually appropriate manner you can. You will be learning tools and tricks for this for the rest of your career (if you do it right).
Building a good project document is an exercise in applied minimalism: you record the things you need to record, and no more. Expect this document to be "living" - you never just write it and then give it to the team to go implement. These are closely related points, because the more communication you do in your design doc, the more you will have to rewrite every three days when it constantly changes out from under you.
Also keep in mind that GDDs are really kind of a failed methodology. It's far more effective to build tools that let you ask questions about the game
as it currently exists than to try and specify every detail and force reality to conform to your documentation. Don't fall into the temptation to write pages describing The Great Orc Warchief and his 15,037 HP and four spells. Build that stuff as
content for your game, and add tools (like document generators) that can turn the game data into character spec sheets.
This saves you a ton of time updating your always-invalid GDD, and still gives you tools for things like QA passes (here, make sure this dude dies after 15,037 damage, based on his spec sheet that I just generated from the actual game data).