Why is communication so hard for software engineers?
I am a senior engineer working in one of the FAANG companies. My colleagues are pretty competitive, they are smart, they work hard. But I keep noticing one thing — a lot of smart engineers claim they are not good at communication, some non-native speakers claim this is due to the language barriers, some claim this is due to the introvert personality. I am not convinced at all.
Communication is hard and you need to put down a lot of efforts. Most of the engineers don’t realize it. Unfortunately, a lot of them believe communication is nice to have, it is a side job, they want to finish the job of “communication” as quickly as possible so that they can go back to coding — which is perceived as the most innovative and most interesting and most impactful work. If this is the attitude towards communication, no wonder you will find communication is hard. Communication is not harder than coding, it is just you don’t treat it very seriously. You don’t believe me? Let’s treat communication as one of your coding projects.
OK, what do you do when you start a project? You need to understand what features you want to build and why, right? Same for communication. You need to understand who are the audience and what they are looking for.
What do you do next in a coding project? You design! Same for communication. You need to design how to layout your message. No matter if it is a document or a presentation or just a causal chat, you need to design how to communicate the message. Don’t get me wrong, it doesn’t need to be as fancy as some of the useless design patterns you read from textbooks :). An effective communication should be easy to follow. You are not trying to sell your idea, rather, you are trying to explain your rationale. The idea itself is not very valuable, it is the rationale that can help people. When you design a system, you must design data flow, right? Same for communication, design your logic flow. Starting from a common ground with your audience, and step by step, lead the audience through your logic flow.
How long does it usually take to finish a project? Weeks? Months? Or even years? OK, how long do you expect to take to change someone else’s perspective, how long do you expect to convince someone else? Please don’t expect your message can be delivered just in one meeting… It is impossible. Just like any software projects, communication takes phases to happen. Be patient. Don’t try to throw a lot of information to your audience. You want to initiate a new effort? Try to socialize the idea with a few close colleagues to get early feedback first, then try to schedule meetings with managers and senior engineers to describe the problems you try to solve. Don’t directly sell your idea, explain the problems. This will naturally lead to your solution.
When you write code, you are very precise, right? The name of the variables and functions are all precise. Why is that? Because you care about your code, you appreciate the readability of your code. Same for communication! Use the right word, try to avoid grammar errors, be precise about what you write, read it twice before sharing.
You must be proud of the code you write, right? Same for communication. Be proud of successful communication. It is not as concrete as a piece of code that you can read in your code repository; but very often, successful communication has a bigger impact than a piece of code.
If you are smart enough to code some complex algorithms, if you are smart enough to design a complex systems, if you are perseverant enough to finish a big project, you can do communication well too! As long as you treat communication the same as one of your coding projects!