What is the most underrated skill software engineers should learn?
Also curious about highest value skill for least duration
Writing.
It helps to clarify your thinking. At your job, it will help you explain concepts to others and multiply your efforts.
Externally, it can help make great friends and boost your career if you blog & share things you've learned.
Soft skills -
Speaking, Team Building, Listening patiently, Able to translate technical details to non-technical audience, Ability to help/volunteer the team during the crisis mode.
This helps a lot in shaping the career and boost self confidence.
Proper math. It's also easier than you think, even a year of (casual but) serious study will open up your vision and make you feel extremely more confident with your work.
How about: learning to type fast, with all ten fingers, without looking at the keyboard.
Sales, and selling.
You're selling yourself and your skills on an individual level.
You're selling your team and your pieces of the codebase on a manager level.
You're selling your product or your vertical on the executive level.
This isn't Wolf of Wallstreet or "Coffee is for Closers", but if you're not able to sell yourself a little then you'll be struggling against an equally good coder who knows how to put a little spin and polish on what they're doing.
If you want a purely technical skill, being fluent in SQL, including DDL, joins, etc... would be a pretty good candidate.
Testing. I've never known any great developer with at least good testing skills. I've met many awful developers who don't know how to test.
Setting expectations and communicating them clearly and continuously.
Speaking, writing, listening, thinking ( which includes debugging, designing, how things fit together, how people use their stuff, how you use other peoples stuff).
Communication seems to be the main thing I see missing, and caring whether what is produced is fit for purpose (not just your bit). As I move towards being an architect/less coding, this is something I'm thinking about more.
If you want to make lots of money, soft skills. You can be a decent engineer and a good presenter and make $$$
Writing,know the reason behind developing this product or code. many times we end up just developing what asked to do without knowing its purpose, usage, impact etc. Sometimes these factor influence your work to feel belong to something
Dealing with bugs in other APIs. This is such a sad truth of today's software - you are dependent on other libraries, and as you use them, you encounter bugs - and quite a few, I may add.
And even sadder, Microsoft ('s APIs) is not the exception, Microsoft is pretty much the norm.
Fixing a lot of small issues to make the codebase ready for production without getting bored. Unfortunately, only small portion of software engineering is sexy and cool.
Effective Problem Identification and then Requirements Capture.
Few do it well, a poor start almost guarantees a poor outcome regardless of the quality of the team.
Presentation skills, speaking in general. Learning how to read a room, drove consensus, and tease apart what someone is really after
Relational data normalization at least to 3NF.
is to understand that you can NOT get away with poor coding skill by developing only underrated skill ;)
The only thing that matters is data structures and algorithms. If you cant master those, you wont get far/your pay is forever capped and should move into management or another career entirely.