Nowadays, you don't get to be a successful Software Engineer by locking yourself in a room, eating fast food, and shitting code. Even Microsoft is planning to tear down their famous buildings with separate offices and move all their employees into open spaces. Amazon culture has built around its Leadership Principles. "Masters" and "slaves" have already been kicked out of various open-source projects, Code of Conducts are appearing everywhere, and SJWs are keeping a close eye on what's going on in IT.
The concept of Soft Skills has already made its way into interviews and is often found among other IT buzzwords. There are many classifications of soft skills — everyone understands them differently, and I still haven't seen anyone come to a consensus. For every company and position, they are a little different. But what are Soft Skills? Why are they "soft"? For many introverted geeks, communicating with their peers is not at all a soft skill, but very much a hard skill. In this post, I will give my thoughts on the subject.
Soft skills
The skills that IT professionals use in their work are traditionally divided into two types — hard skills and soft skills.
Hard skills are professional skills that engineers use when solving technical problems. This is, for example, proficiency in Java or knowledge of Big Data. Basically, for us, those all are technologies — systems, programs, clusters, nodes, machines, servers, etc. I think we can assume that they are reliable (given a certain agreement) — you give a command and expect a deterministic result. But what about people? How reliable are they? How reliable do they have to be?
People are unreliable. They never are and they never should be. This is what separates a human from a machine.
A machine is smart and stupid at the same time — it does exactly what it is told to do. It's more complicated with humans — they have a vision, directed by their understanding, experience, and their own desires, about how to work, live, communicate, and interact with other people. You see, people tend to make mistakes. They tend to leave a company, deliver and raise children, change careers, skydive. They retire. They tend to have problems. But via soft skills, we probably still can make things done with humans.
Soft skills are sub-professional skills that are not directly related to a person's job responsibilities but are always present to some extent in any work.
In IT, these are the knowledge and skills that are not directly related to writing code or engineering but are no less necessary for successful work in a team. Soft skills cannot be learned in one-hour training, they are built up and improved over the course of a lifetime.
Why do employers value soft skills?
Let's start with a story.
I once heard about an experiment where scientists tried to breed hens that could frequently lay bigger eggs. The strategy was as follows: select the offspring of only those hens that lay larger eggs on average and create a new population from them. After a number of such cycles, scientists got chickens that laid giant eggs all the time. Despite seeming success, the story doesn't end here. Then scientists (or maybe not quite scientists anymore) decided to build a farm from hens bred this way and found that the overall "value" of the farm was worse than that of the old one.
It turns out that the hens who laid large eggs were very aggressive. Since hatching eggs requires a lot of calcium hens who laid a lot of big eggs need a lot of calcium and they found it in the shells of other hen's eggs... It turns out that although an individual hen may be very efficient than a few quiet average hens. But the total value from the less efficient but social hens is greater.
Of course, it's not quite right to compare, but I see similar patterns among engineers.
Researchers at Harvard, Stanford, and the Carnegie Foundation found that "flexible skills" are 85% of a person's success in a career, hard skills are only 15%.
I am not a Soft Skills trainer and I am far from being considered to have these skills. And of course, you can argue a lot about everything I write here, but everything stated here is my opinion.
I'll go over the Soft Skills as I see them and answer the following questions:
- What's included?
One high-level soft skill is always a big set of skills that people tend to think of. It's my understanding of what's included in each such skill.
- Why you need it?
I'll try to give a clear answer to this question for the average engineer in the company.
- Questions to ask yourself
These are questions for the reader to make some clue of how this soft skill work in your life. They got me thinking, and I hope they got you thinking, too. And please don't use them for interviews.
- How to gain it?
Tips on how you can try to gain it in this or that skill.
Communication
What's included?
- The skill to transfer the information
- The skill of persuasion and argumentation
- The skill of listening and perceiving another position
- The skills of clear and distinctive speech, conveying your ideas to other people.
- The skill of holding meetings.
- The skill of conducting business correspondence and communicating with clients.
Why you need it?
Communications. Well, you can't really do much without them.
If you want to promote something in your company, sooner or later you'll come across the fact that you have to talk with people. Understand what they want you to do. Convince them on something.
Communication skills increase your productivity. They help you extract clear expectations so you can get the job done. They allow you to effectively communicate context and delegate tasks. At the same time, ineffective communication often leads to trouble and can adversely affect a project's timeline, budget, or outcome.
Questions to yourself
- Can you explain to your 95 yo grandma what do you do for a living?
- Do you always understand the purpose of each communication?
- Do you write an agenda for each meeting?
- Do you comprehend and respond appropriately to other people's opinions?
- Are you able to get your point across when replying to emails, or do people usually walk over to your desk and ask you for more context?
- How good are you at breaking technical issues down into simple language that every other department at the company can understand?
How to gain it?
- You have to be able to talk to people. But not just talk but talk in different ways to different people. With a developer in technical language, with a salesman in sales language. To get these skills you just have to do it more often. The best way is probably to take on an appropriate role on the team — lead, manager, scrum master, etc.
- Communicate more with a specific purpose, such as giving client talks, interviews, workshops, presentations, or lectures. Join a debate club or sign up for a negotiation course. Have discussions and business games with friends or colleagues.
- If communication is difficult for you, then start writing documentation and onboarding pages for beginners. This can help sharpen some of the skills.
Teamwork
What's included?
- The skill to cooperate effectively in a group or team
- Understanding your role in the team
- The ability to take responsibility
- The skill of putting the team's priorities above your own
- The skill of accepting your mistakes
- Ability to make compromises to solve problems
- The skill of solving conflicts
- Ability to work with unpleasant people
- Positive attitude
Why you need it?
The success of a company rarely depends on one person doing something on his own. Success is the result of many people working toward a common goal. The combined work of specialists can yield much more value than the results of their work alone. In the end, everyone wins.
The team spirit of an engineer shows his/her professionalism, opens the way to higher positions and more interesting tasks. It helps build internal company relationships with colleagues and opens up growth opportunities for the engineer.
Questions to yourself
- Do you blame your teammates for the mistakes they made?
- How often do you judge a person rather than a job?
- Who do you think is responsible for the project, for the codebase? The team leader or team?
- Do you remain open to resolve conflict situations and don't take a defensive position?
- When you ask me to help you pair through a problem, can you describe the exact part of the codebase you’re having trouble with (line numbers that are throwing exceptions, describing the six approaches you’ve already taken before I waste time repeating the work, sending me relevant stack traces)? Is it already open on your laptop before I walk over to your desk?
- Do you avoid conflict even when something very important to you is at stake?
- Do you watch your tone when talking to team members?
- What does team spirit mean to you and how would you build it?
- Do you often write clear Readme/documentation on a project?
- Do other engineers constantly tap you on the shoulder, and ask you to explain how something works?
How to gain it?
Perhaps the most important thing to pay attention to is empathy.
- Reach out when you see a colleague in need. "Hey, I know you have a lot on your plate. How can I help?". Cover for your colleague while he/she went to the dentist. Understand your team leader who is being pressured by management and try to make his life easier. If you see someone make a mistake, cheer him up, even if the mistake is completely stupid — we've all been there and I'm sure we'll be there many more times.
- Note your emotional reactions to the individual characteristics/problems of other team members. Do not show negative emotions toward them. Determine for yourself how such a person, with such character traits, is useful to the team.
- If a disagreement arises, then clarify your position and interests. Ask questions that clarify what needs are behind his/her position, offer several options for solving the problem, declare your desire to find a mutually beneficial solution.
- Be professional but don't overdo it.
Problem-solving skills
What's included?
- Ability to assess the ways of solving the problem and choose the best one under specific conditions
- Ability to decompose a problem into a sequence of specific steps that are needed to solve it
- Ability to find simple solutions to complex problems
- Ability to verify that the problem is de-facto solved
- Ability to think through unforeseen behavior when making a decision
- Ability to understand risks when making a decision
- Ability to accept your mistakes
Why you need it?
The problem-solving skill helps you deal with challenges at work and in life. When something goes wrong, you can either complain or take action. In our field, absolutely everything can and will go wrong, from suddenly changing API to AWS going down all over the region. So this skill is especially important.
Mistakes. Everyone makes mistakes all the time. Mistakes are important. Experience is what occurs when mistakes are understood. Often the experience is what determines success. Neither technology nor skill can give what experience can. Experience is such a personal part of a person that it cannot be simply "taken and shared". Experience is gained through mistakes. That is why one should not consider mistakes as something to be ashamed of. It is just another stepping stone to the future. You just have to understand it and learn.
Questions to yourself
- How good are you at putting out production fires? Do you panic and freeze up whenever shit really hits the fan?
- Can you think rationally when your code on the production crash the payment system and your company is losing money?
- When a bug occurs, do you think about the problem or the one responsible?
- What page on Google do you get to before you ask a senior engineer for help?
- When you have a technical problem on a new project, do you go to documentation or write in a chat first?
- Do you realize that you need help but instead you bang your head against the wall until somebody reaches for you?
- Do you know solutions to similar problems in other domains? Can they be generalized and applied to your problem?
How to gain it?
It's simple — the problems will find you. When a problem arises, sit down and think about how you're going to solve it before you start doing something or bring it to the attention of your boss. In the end, do some retrospective — think about how the problem could have been solved better and whether it should have been solved in the first place.
You can take a more proactive approach in gaining the skill. Identify a few major problems in your life and come up with 20-30 solutions for each. Set a deadline and try to implement each of them during that time. If you can't solve the problem, think of new ways to deal with it.
Information handling and decision making skills
What's included?
- Ability to consider and evaluate situations, problems, risks, and solutions from different positions and levels of perception
- Ability to filter and prioritize the information
- Ability to evaluate the received information
- Critical thinking
- Ability to make decisions on the basis of the data and facts, not on emotions
- Ability to form a cause-and-effect relationship
- Ability to analyze the consequences of decisions
- Ability to take responsibility for made decisions
Why you need it?
We are in a constant flow of information. It is easy to get lost in it, lose focus, made emotional decisions, or become a victim of manipulation. The skill helps to filter, verify information, look for relationships between facts, think rationally, prioritize, structure information, and make timely and optimal decisions based on the analytical work we have done.
Decision-making — the ability to consciously choose the best solution among the possible options. It helps you achieve your goals quickly and with maximum benefit.
Questions to yourself
- Are you seeking information to answer a question? How?
- How do you know you have enough information to answer a question or make a decision?
- How do you make the decision to incorporate technology X into the project? Is it an objective decision or resume/hype-driven?
- When you copy and paste something do you leave a source of information, a StackOverflow thread?
- Do you have an undiminished pile of links to things you wanted to read?
- What do you do when your project manager asks you something you don't know, but probably should?
- Do you refactor every tiny coding style issue you find? It can be painful to say "this piece of code is annoying, but it works, and my time is probably better spent building out this other feature that tons of customers are begging for."
How to gain it?
- Try to identify the behavioral patterns of your colleagues at work. Observe how they respond to incoming information. By observing how people respond to the flow of information, you can better understand critical aspects of improving processes, when and how to approach the colleague.
- Learn to ask questions. Especially the silly ones — they provide the maximum amount of information. As an example, many people make the same mistakes in interviews — they make assumptions about the interviewer's questions. That makes sense, but you need to say them out loud as a question to make the assumption official.
- To develop decision-making skills, you need to learn to see as many options as possible, to prioritize correctly in each situation, and to choose the best of the possible. If difficulties arise at work, approach your boss with a solution, not a problem.
Self Management skills
- Ability to manage emotions
- Ability to manage time
- Ability to plan and set clear goals
- Ability to adapt to changing conditions
- Ability to focus your attention
- Self-reflection
Why you need it?
Analysis of one's own actions and behavior. It helps to evaluate your behavior, realize your actions, and decide what to do next. For example, if you can't get along with your colleagues, self-reflection will help you find mistakes in communication on your part. This skill develops awareness — you will make better decisions if you know yourself and are aware of your needs.
Prioritizing tasks according to their importance and urgency, focusing on what's most important helps you reach your goals. This applies to both work and life.
Questions to yourself
- Do you have a career plan of some kind? What do you want to do in N years?
- Can you hold back when you are told a sass?
- Do you get everything done that you have planned?
- Do you become resentful of feedback from your colleagues?
- Have you ever noticed that you a part of a cargo cult? For example, if your code isn't 100% covered by tests, you believe that it's bad code?
- Do you respect the time of all the other team members and especially the customer's time?
- Do you send an agenda in the meeting invitation with the purpose of the meeting in advance?
- What’s true about you today that would make your 8-year-old self cry?
- What makes you forget to eat and poop?
How to gain it?
- Watch yourself. Notice the details of your behavior and your actions. Notice why you made a particular decision. Do you think you did the right thing?
- The ability to adapt is a key soft skill in my opinion. There will always be a time when you need to step out of your comfort zone, your usual responsibilities, and do something you haven't done before. You can try to do it now — start doing something you haven't done before or were afraid to do (within reason, of course).
- Think about what competencies you need to improve and how to do it more effectively. Make a learning plan for the year. Follow it, document the results. When you learn how to manage your self-study, offer your colleagues or friends to be their mentor. This way you will practice the skill and help others.
Leadership skills
- Ability to create a productive environment for the team
- Ability to motivate
- Ability to define tasks for the employees
- Ability to manage the execution of tasks
- Ability to plan in uncertainty
- Ability to mentoring and coaching
- Ability to give feedback
- Ability to manage and control changes
- Delegating skills
Why you need it?
Few things can make a person act the way you want them to act. One of those magical things is a dream. Few people are willing to do anything for anyone. But many will gladly step up if they realize that your goals also their goals. From this perspective, leadership is the ability to manage people's aspirations, their motivation. The ability to give everyone a personal dream for which they are ready to get up and do their best.
Having confidence and a clear vision can help influence your colleagues and get them on board with your ideas now and in the future. Demonstrating such leadership skills can help you implement your ideas, shape your company processes, change your company products, and gain visibility in the organization, which can lead to increased opportunities for promotion or salary bumps.
In addition to leadership, I've included business understanding. Understanding the business is an important quality that helps you see the big picture. Especially if you're proactive. Because there's nothing worse than a proactive dickhead. You have to be proactive and creative, so it's important to understand what's best for the business.
Questions to yourself
- Do you understand how business works?
- Are you able to push back on the CEO/CTO when the upcoming quarterly goals they’re considering sound a little bit too optimistic?
- Why is the customer willing to pay your company $50,000/yr for some super basic web forms?
- Do you know how to give your manager feedback on team performance?
- When you want to see a process change implemented, are you capable of explaining the benefits to all of the parties involved?
- If the team is self-organized do they need a team leader?
- Do you understand the goals of your colleagues? What is their motivation?
- Can you make sure the new process in the team actually sticks?
- Can you grow a developer to at least your level?
How to gain it?
- Even if you are not a team leader, create an environment that encourages differences between people and welcomes healthy competition to ensure the best results for the team.
- Be proactive — ask your manager or team leader how to make his or her job easier. Push yourself to be an early adopter of change.
- Take on the role of team organizer — structure group work, make sure rules are followed, activate inactive colleagues. Hold the leadership role until the task is completed or use the role that is most comfortable for you and perform it thoughtfully.
- How do you build business understanding skills? Answer the question — how did the task you worked on last week affect business performance? Can't? Then go and talk to a product owner or salesperson. And talk to them more often, they know more about business.
Conclusion
Now the IT sphere is becoming more and more business-oriented. And it has come to almost every industry, not leaving out even the most traditional ones. And, just like in business, flexibility plays an important role in the work of IT professionals. Flexibility in dealing with people, in making decisions, in changing environments. Engineers need to somehow develop this hard skill of mastering soft skills.
Sooner or later you're going to want to grow — get a promotion or a new salary. At least that's what happens to most engineers. And here's where you need to realize that with each new step in your career, "soft skills" come more and more to the forefront. In higher positions (team leader, manager) you cannot do without leadership skills, communication skills, conflict management skills, etc. The more you practice, the better the skills develop. The main thing is to get feedback and analyze the lived experience, otherwise, you will remain standing still.
Unlike hard skills, "soft skills" are very difficult to measure. There is still no universal scale for assessing emotional intelligence or, say, levels of stress tolerance. How do you know if you have enough "soft skills" or not enough? Sometimes it's obvious when engineers create a nasty and unproductive but super intellectual atmosphere, and it's just not worth the epic project architecture they will do based on their deepest knowledge.
And lastly, I will say that for any error you can say the cause of the error is between the monitor and the chair — and it's true, but it doesn't help fix the error in any way.
Additional materials
- Delegation and Supervision by Brian Tracy
- How to Talk to Anyone, Anytime, Anywhere by Larry King and Bill Gilbert
- The Deadline
- The Five Dysfunctions of a Team by Patrick Lencioni
- The Ideal Team Player by Patrick Lencioni