Communication is like compilation. You take raw brain thoughts, and you select a toolchain that targets the specific context, subcontext (optional), and method of communication that is appropriate. Then, you go ahead and compile them to that 'target triplet', that 'platform'. Under this hypothetical system, I've selected the bay12-random_thoughts-text toolchain.
I have many toolchains that I switch between. There's bay12-text, discord_[REDACTED]-voice, real_life-unfamiliar-voice...
The purpose of doing this is because each context, subcontext, and method of communication describes a different set of features that are enabled.
It would be ridiculous to say "poggers" within its native context on Bay12, but it's entirely fine in [REDACTED]. In real life, you talk to people you're familiar with differently from those you're not. In-jokes are a feature that are present with those you know. You cannot express tone well in text, so you need to indicate tone with punctuation, formatting (if available), and tone indicators (if/as acceptable).
Each thing you change can drastically affect the generated output because each feature that's present or absent needs you to change what's being said in order to communicate effectively. The objective, in my eyes, is to compile sentences with as little loss to the raw brain thoughts as possible so that you're communicating effectively, while still complying with the feature-set as to fit in. This is a balancing act.
I don't think any person can correctly claim to be good, let alone perfect at this. I operate on guesses. You operate on guesses. We all operate on guesses. Sometimes we make mistakes because they were wrong, and that is entirely fine. Embrace the errors we make. After all, to err is human.