I often get asked what I think is the most important skill for a software developer.
I think this question has different answers, depending on what is expected of the developer. For this post, I'm going to answer this question in regards to a senior engineer.
As a senior developer, you are almost always expected to mentor developers with less experience. In order to be an effective mentor, you absolutely must be able to communicate effectively.
In order to communicate successfully, a senior developer needs to be able to understand that the junior engineer won't know what knowledge gaps they have; they simply don't know what they don't know.
A good mentor needs to be able to identify these gaps, and then work with the mentee to fill those gaps. Once these technical knowledge gaps are filled, the mentor and mentee can communicate effectively.
Here's an example:
Mentee: Hey [senior developer], I'm having some trouble finishing this feature, can we pair?
Mentor: Sure! Show me what you've done so far.
Mentee: So far I've done...
Mentor: Uh oh, you've actually broken the convention we follow...
Mentee: So what do I do?
Mentor: Well... you'll need to redo the card so it doesn't break with convention
Mentee: Redo the entire feature?!
At this point, communication is absolutely critical. The senior developer has identified an issue which needs to be corrected, but they need to properly communicate why without fracturing their relationship with the junior developer, and leaving that developer feeling upset or frustrated.
The senior developer can do this best by politely explaining why the convention in question needs to be followed. The junior developer has a knowledge gap - they didn't mean to break with convention, they just didn't know that there was a convention. It's up to the senior developer to fill that knowledge gap. They need to explain the convention - what it is and why it exists - that way the junior developer can understand why they need to rework their feature.
During this explanation, the senior developer needs to be patient, and understand that the junior developer may be frustrated, and rightfully so. How many of us like to redo features we thought were complete?
If possible, the senior developer should also pair with the junior developer and help them rewrite their feature. This can help the junior developer understand the convention faster, and at the same time prevent them from accidentally rewriting the feature wrong a second time.