Here is a list of DOs and DON’Ts when it comes to communicating with either a client, peer developer or anyone else on the team.
Before asking another person a question, try to answer it yourself. Write the question down so that it is clear what you want to know. Think hard for a few minutes, if you still do not know the answer, then ask.
When asking a question, don’t give information that is not necessary in order to answer the question.
When communicating with the client (or anyone really), don’t provide information that they don’t care about. Only say things that are actually important for the other party to know.
Do not make excuses or give explanation for why there is a bug or why your code is not working! Just promise to fix it and give an estimate of when it will be ready. Clients do not care why the bug happens, they just want it fixed. Making excuses also does not bring any value to you or your client.
Be honest and don’t try to hide problems. If you don’t think that you can finish your work on time, mention it as early as possible, so that preventive measures can be taken or at least client’s expectations are realigned with the reality.
Don’t ever ask for a permission to refactor code. Refactoring is part of your job as a developer and you don’t need a permission to do it. However, make sure that other developers who might be affected by your work are aware of what you’re doing.
(This list is just a starting point and will be augmented as I get more insights)