It’s hard to overestimate the importance of communication. What I’d like to focus on here is the fact that communication between developers does not stop where programming begins. Source code is a form of communication, and it can be empowering if done right and crippling if neglected.
The reason why this is so important is easy to understand if we think about the typical development workflow. People - ideally - discuss tasks in some detail, then produce and commit code in relative isolation. Even if a team does pair programming and reviews, a good chunk of developers - existing and future ones - will not participate in writing a particular piece of code.
When work continues on existing code later, it will have to be the ambassador for itself. It might be the only source of information left about the knowledge and reasoning that went into it at the creation phase.
And this is what communication is all about: expressing ideas, passing on concepts and answers.
For this reason, use precise language, structure, grouping, names and interfaces to explain your intentions.
Provide clarity and demand it from others.
When writing software, treat it as a social activity to ensure everyone - including you - will have an easy time continuing the work.