The Most Important Skill A Software Engineer Can Have
Tags: webdev, skill, productivity
Published: 2021-11-11 16:28:37

Sometimes people believe that Software Engineers are like monks, and they spend their days in silence and coding. Nothing more far from reality. On good days, software engineers will code only 40% of their days, other, maybe 10% or maybe 0%. But, what are they doing the rest of the time?, meditating?, eating food and drinking coffee?, playing Ping-Pong?

No really.

First, let’s remember the main purpose of a software engineer is not coding per se, it is **solving problems**. To achieve that goal, an effective software engineer will need to interact with diverse members of the team throughout the life cycle of a problem until they find an acceptable solution. Within that cycle, code is a critical part, but it is not the most important. Instead, having a clear understanding of the problem and the most efficient solutions is critical before starting to code. This makes it more likely to end with successful results. Remember, **the worst possible scenario for a software engineer is presenting a great piece of code that does not resolve the initial problem.**

Here a list of activities software engineers do that are not coding, but can help do solve problems in their organizations:

* **Writing design docs**: These allow software engineers to share a high level overview of the problem and the potential solutions with key stakeholders.

* **Code reviews**: Reviewing somebody else’s code, giving feedback.
    
* **Whiteboarding sessions**: Talking with peers about potential implementations, systems design, solving scenarios, technologies.
    
* **Peer programming sessions**: When 2 people work together to crack especially hard problems with a brainstorming approach.
    
* **Status meetings**: When you have to give status updates of your project to the team.
    
* **And many more**: Product requirement meeting, Design springs, API design springs, UX design springs, 1:1 with managers or direct reporters, Peer reviews, Self assessment reviews, Respond to emails, Collaboration chats.

>We (humans) can solve problems BECAUSE we are great communicators!

So, if for software engineers, all these activities would represent 60% to 80% of a their day, then you will agree on the importance of an effective communication skill. Moreover, and thanks to COVID-19, where are in remote office era, where written communication has taken special relevance. See this interesting twitter thread about the future of the remote office.

 ![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/1kdlnfma6qd7myjpznc5.png)
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/34uelzds4n7cwhiauzif.png)


>Communication is the most important of your skills and will determine in high degree your ability to solve problems and in the long term, it will shape your career success. 

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/f6orxq7aodcvphwdw6jt.png)

Here are some practices that will make you a better communicator, and will help you to solve problems in your organization (specially for engineers):

* **Be concrete or specific.** E.g. : If you are responding to a long email thread and you want to agree or disagree about something, don’t assume everybody has the same information that you have:, better rewrite the key points and close with a clear position.

* **Empathy**: Connecting with your audience sounds cliche, but is true. Try to understand who the audience is (1 or many) and, what their expectations are. Using this information to adapt your message will make a big difference in the interaction and collaboration.

* **Be a good listener**: Less is more, and effective communication is not about how long the message is, it’s more about the quality. Try not to be the first in talk; instead listen.

* **Prefer facts over emotions**: Trying to detach from a problem when it is very important for you is hard, but the risk from not doing so is high. If we reduce the discussion to how we feel about the solution vs what is important for solving a problem, we take the risk of leading the conversation to a dead (and very personal) end. People can disagree with your idea. So, be prepared to defend your points, but never take it personally.

* **Repetition**: On any interaction, be sure you have a clear idea what part of your message you want to break through: pick one or two words and repeat it regularly.

* **Gestures / Voice**: Most communication, including zoom meetings, are managed by non-verbal body language and gestures. Be aware of your body language and what sign it may transmit to the receiver. Incorrect body language could trigger unconscious biases in your receiver that will hurt the whole conversation. Using some strategic pauses can increase the value of your ideas.


On better writing skill, I recommend this video about the The Craft of Writing Effectively

https://www.youtube.com/watch?v=vtIzMaLkCaM


>Engineering is easy, people are hard. 
-- Google 

initial inspiration from Clement Mihailescu's video about the topic.