# Soft Skills Demystified

Source: https://www.yegor256.com/2018/08/29/soft-skills.html

There are tech skills and there are soft skills. Every programmer knows that.
Tech skills are about algorithms, operators, classes, objects, and everything
else they teach us in tech schools. Soft skills are about something else.
What exactly? Difficult to say. Let's try to clear the air.


{% jb_picture_body %}

Here is a non-exhaustive list of soft skills I managed to find
on the Net<sup>[1](https://hackernoon.com/10-soft-skills-every-developer-needs-66f0cdcfd3f7),
[2](https://jaxenter.com/6-most-useful-soft-skills-for-software-developers-125286.html),
[3](https://blog.scottlogic.com/2018/01/13/soft-skills-for-software-developers.html),
[4](https://amzn.to/2wbSuZa),
[5](https://medium.freecodecamp.org/what-soft-skills-do-successful-developer-have-in-their-backpacks-e4b71e90329a),
[6](https://www.netguru.co/blog/9-soft-skills-every-web-developer-should-master)</sup>:
empathy, open-mindedness, a willingness to learn, effective communication,
teamwork, approachability, helpfulness, listening, patience, responsibility,
critical thinking, problem solving, mentoring, attunement, clarity, curiosity,
strategizing, lifelong learning, business mindedness, work ethic, judgment,
ego management, commitment,
accountability, creativity, adaptability, big-picture thinking. Phew!

Do you really understand exactly what these words mean? I don't.

I would actually suggest we replace them all with the "do the right thing"
mantra and call it a day.

{% quote Smiling in the office and not cursing at a stupid boss helps, but this is not what soft skills are about %}

I have my own list of soft skills though. I also
[strongly believe]({% pst 2018/jan/2018-01-23-sociotech-skills %}) that tech skills
are just a small part of what makes a good programmer,
but being empathical and ready to learn is not what the other part consists of.
Of course, smiling in the office and not cursing at a stupid boss---helps.
But this is not what soft skills are about.

They are about our ability to _exchange_ deliverables. Tech skills produce
deliverables, soft skills turn them into a final product, which is working
software. Here is a short list, in no particular order:

**Drawing**.
Talking works great when you're discussing your next vacation with your partner.
In a software team your ability to explain your thoughts with a diagram
seriously increases your usefulness.

**Writing**.
Again, talking is great, when your chaotic team is being managed by
an hysterical boss who just read a book about unconditional love. In a more
disciplined environment your ability to put your thoughts in writing
do make a difference for mutual success.

**Reporting**.
A good programmer knows not only how to fix a bug but, more importantly, how
to report it [the right way]({% pst 2018/apr/2018-04-24-right-way-to-report-bugs %}),
so that the project benefits. An ability
to describe a technical problem in simple words is a crucial soft skill.

**Volunteering**.
Open source is an important part of any software project. You have to know
how to work with an open source community, by giving them something back
for the software they provide. Sometimes you will have to report problems
to them, sometimes even submit pull requests, and maybe even create
your own open source products. You will need a lot of non-tech skills to do that.

**Charging**.
Programmers make money by writing code. Very often projects fail because
important people quit due to a money conflict. They don't know how to resolve that,
how to manage their financial objectives, how to ask for a raise, or how to change
the paying schedule. I blame programmers for that. We, technical people,
have to know how to manage our financial relationship with our projects.

**Relaxing**.
Many projects fail because its programmers burn out. This happens, very often,
because they don't know how to manage their time right: when to work and
when to relax. Again, I blame programmers. We have to know how to manage our
own peace of mind.

**Asking**.
Not your friends, but Stack Overflow and other public sources. The software
development world is getting global and the knowledge your project team
possess is just a tiny fraction of what the world knows about the problem
you are solving. You have to know how to ask the world. This is the soft skill
you need to have to be a good developer.

**Tweeting**.
Here comes your ability to share your thoughts and achievements in social
networks. If you stay mute and net-social-phobic, you are not really helping your
project. This is the skill you won't learn in a few days. I would suggest
you take a look at my [256 Bloghacks](/256-bloghacks.html) book.

**Testing**.
Here I mean not only writing automated tests, which is a tech skill, but
an ability to communicate with testers, to make sure their feedback
improves the quality of the software under development. There is a
[well known](https://www.sciencedirect.com/science/article/abs/pii/S0378720613000967)
developer-tester conflict, which good programmers know how to deal with.

{% quote Still working in a single master branch? Still an amateur %}

**Branching**.
Still working in a single `master` branch? Still an amateur. You have to
learn how to use multiple branches, how to resolve conflicts between them,
and what is the difference between merge and rebase. This is a soft skill,
since it doesn't have anything to do with the quality of your code but it
seriously affects your professionalism as a software developer.

**Failing**.
Most projects fail, one way or another. Technical failures are not
the primary source of our troubles. We fail due to management incompetence
most frequently. Good programmers know how to deal with failures,
by provoking (aka Fail Fast), predicting (aka Risk Management), and
embracing them.

**Delivering**.
Continuous integration, delivery pipeline, build automation, staging,
green/blue deployments, etc.---if you think that all these things concern
the DevOps department only, you are wrong. You have to understand how your lines
of code reach your users. The bigger the product, the longer the pipeline,
the more people it involves, and the more soft skills it requires to be
smooth.

**Intriguing**.
Any project is a part of a bigger political game, one way or the other.
If you isolate yourself from intrigue, claiming that your job is to
write code---you are not a good programmer. A good programmer understands
where the money is coming from, who the primary shareholders are,
and which ass to kiss and when.

Did I forget anything important?

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">What do you think is the biggest obstacle to your <a href="https://twitter.com/hashtag/career?src=hash&amp;ref_src=twsrc%5Etfw">#career</a> growth? Lack of...</p>&mdash; Yegor Bugayenko (@yegor256) <a href="https://twitter.com/yegor256/status/1320275937162891265?ref_src=twsrc%5Etfw">October 25, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
