Non Technical Skills That Make Great Software Engineers
Technical skills are oftentimes looked at more closely than non technical skills, either during hiring or gauging how effective a developer is at doing their job. I see this as a huge mistake as non technical skills can make or break a developers ability to do their job at the peak level. Below are some non technical skills that I believe are extremely important, and the reasons why they are sometimes more important than technical knowledge.
These points are in no particular order.
Communication
We hear the importance of communication throughout all team related jobs. This is because the ability to convey information, in a group setting, can quickly set up others to do their jobs quicker and more accurately.
Taking a look at technical lead positions, you may notice that the leads that can communicate clearly to their team will usually see their team have less code issues and higher productivity. The team spends less time discussing the problems and more time building out the solutions. Not to mention, with great communication, there will be less confusion and members of a team will be able to work with confidence.
When a team is working at peak performance, you get the added benefit of trust. Building strong bonds often contribute to a healthy working environment and happier people.
Ways to Improve communication
If you're active within the developer community, you'd notice there are tons of conferences where software engineers are giving amazing talks. Not only does giving presentations help the community learn and evolve, it gives you the opportunity to hone your skills in delivering that knowledge.
I'm not saying you have to talk in front of a large crowd of people to gain the same benefits. But if you actively find ways to relay important information to your coworkers on a daily basis, you will notice that your communication skills will gradually get better over time. This can be anything from a large presentation, technical writeup, blog post, or even a small demo.
Ability to Learn and Learning as a Priority
Learning is something we, as humans, basically do every day. But the ability to learn quickly is something that is a great benefit to a software engineer. In today's industry, developers are expected to be able to churn out bug free code within 2 week time periods. And more times than not, you'll be assigned a problem that you're not quite sure how to solve just yet. Of course, you may rely on your teammates to help out a little, but they themselves are often assigned tasks that they are responsible for. This means they will likely not be able to help out extensively. This is where the ability to learn is a great skill to have.
Developer jobs are often joked about as professional Googlers and or experts at Stack Overflow. This joke doesn't stray too far from the truth though. Software Engineers are touted as expert problem solvers because of the fact that quick learning is almost necessary to do a good job. The ability to find information you're looking for and to understand it quickly will often determine your timeliness in deliveries as well as delivering bug free code.
How To Get Good At Learning
The best way to increase your ability to learn is to solve problems that you don't know how to solve on your own. This will force you to get good at finding the information that you need. After a while, you'll notice that you get better at navigating technical documentation. The quicker you get at finding information and absorbing knowledge to solve a problem, the more you'll grow as a software engineer.
Rapidly Evolving Technology
Often overlooked, is the innate laziness of most people. Unless you're always an overachiever, you've likely at times not wanted to learn new things. It's in our nature to want to stay within our comfort zone, but unfortunately, technology evolves at a rapid pace. This means developers will often have to learn new things frequently to further their careers or even keep their current job. This is why learning as a priority is also a key trait that makes a great engineer.
Fighting Risk Aversion
Being risk averse, is a term, often used in investing, where the investor prefers lower returns for known risks rather than higher returns with unknown risks. In more simpler terms, this means someone that is reluctant to take risks. But, as you have read above, the best way to grow as a software engineer is solving problems that you don't know how to solve yet. I believe taking risks is a very important skill for a developer for this very reason.
Growth as a developer will ultimately be determined by how many problems you are able to solve. To increase knowledge in this area, one has to actively seek to be uncomfortable in their job and take on problems that they don't know how to solve yet. In a way, this point encompasses a lot of the previous points. Taking the risk of owning a project you're not 100% confident in, will help your ability to learn, as well as give you the opportunity to grow the rest of your team's knowledge when paired with great communication.
Conclusion
While technical skills are the most visible metric of software engineers, there are many non technical skills that are just as important, if not more. Soft skills such as, clear communication, quick learning, and actively seeking hard tasks, are sometimes way more important than technical skills in that they are the skills that facilitate learning technical skills in the first place.