I'm not a big advocate of the hard/soft classification of skills. Lately, we hear this everywhere: hard skills vs. soft skills, five reasons why soft skills are more critical, yadda yadda yadda. Both terms are somewhat confusing because the naming implies a false dichotomy between the two sets of skills and difficulty obtaining them.
Categorizing skills without a specific application context misses the point. Every company has its own set of requirements, defined by many factors such as market, culture, people, product, etc. Software engineering roles are no exception.
We should stop prioritizing one set of skills over the other. Clear communication is as essential as being excellent in algorithms. Shipping robust code to end-users is as vital as managing people and projects. These are just the core skills of a software engineer.
Here is my list of not-so-soft skills that every software engineer can learn to advance in their careers:
- Business. A generic understanding of how companies work in the tech industry never hurts. Proficiency in a specific niche, such as finance or education, is even more valuable. These skills guide you on whys and hows, giving a high-level picture.
- Shaping. Software engineers know the internals of their code very well. Leveraging this knowledge allows them to propose great solutions to business needs.
- Design and UX. A sense of what is a quality product helps to make better engineering decisions. After all, everything we do, we do for people.
- Communication. The importance of understanding colleagues, presenting ideas, sharing knowledge, negotiating, and mentoring is hard to overstate.