Technical skills are essential if you are a software developer.
Still, no matter how good you are in the technical domain if you don’t possess good soft skills, you will have a hard time at work.
You can think about soft skills as tires and technical skills as wheels. It is possible to drive but it will be bumpy and uncomfortable. Also, you can end outside the road at any moment.
On the other hand, if you are a decent developer in technical aspects or work, but have great soft skills you can compensate for that.
Here is a list of the top 10 skills I think every software developer needs to work on:
In your day-to-day work, a non-technical coworker will struggle to understand your work without your assistance.
Good communication skills are required to foster teamwork as you must be able to communicate with your team members and project managers.
Sharing ideas and providing feedback is a natural element of cooperation, but in order to flourish in this area, you must be able to clearly communicate your views and respect your coworkers.
Successful communication requires that everyone is on the same page in terms of timelines, project requirements, tasks, expectations, and many other things.
Also, remember that communication is a two-way street.
You must also be a good listener.
Listening to your coworkers or users will make or break your project.
When you listen, you have an advantage over people who talk. You will discover new things, broaden your horizons, and learn something new.
Communication also includes a written form, eg. Slack message. Clear and concise writing skills are bonus points for communication.
In short, remember to:
- Speak your ideas and thoughts with clarity and confidence
- Be polite and never interrupt the person speaking
- Listen with focus and be patient
- In written communication be straight to the point, write short messages, use proper grammar and punctuation, and format your message properly
Software development has always been a collaborative effort.
Even if a developer works alone, he must communicate with quality engineers, project managers, users, and others.
Working as a team does not imply agreeing on everything.
In fact, opposing viewpoints might be what propels businesses to success. The concept of teamwork is to achieve a balance and use your technical and soft skills to make the project as pleasurable and successful as possible for each member of the team.
Being a team player means editing, refining, and developing your own ideas in conjunction with your team’s ideas. In certain circumstances, this may imply receiving a lot of constructive criticism or abandoning your idea.
If you are a football fan, you know that teamwork implies doing what is best for the team, to score goals and achieve victory.
It is never good to demand that you are always right, always to be the main man, and don’t accept criticism from his fellow teammates.
Just take an example of what Cristiano Ronaldo did at Manchester United. When the team was clearly playing better without him, and he was no longer the main man but a rotation player, he took it personally and did an interview where he spits on his club and his coach.
Don’t be like Cristiano Ronaldo.
3. Learning Mindset
One of the best soft skills as a software developer you can have is a “student-for-life” mindset.
I remember as a junior, one of the things I did to improve my knowledge was to absorb every programming course available on Udemy or YouTube. I have every course from Maximilian Schwarzmuller on Udemy.
When learning, I would increase the speed of videos to 1.5x and look for fresh ideas for projects. It was really hard from time to time, watching courses instead of playing video games and going out on weekends, but it really helped me grow.
A learning mindset also goes the other way, when you are not junior anymore.
Today, I often see more experienced software developers who are afraid or just don’t want to learn new stuff. They prefer to stick with their current projects and tech stack as they don’t want to go through the process of making mistakes and losing comfort. While the environment of information technology is always evolving, developers must stay in touch with news and trends.
Continuous learning and study are excellent soft skills for a software engineer to have, whether it’s picking up a new language or experimenting with new technology.
Self-learning enables developers to expand their problem-solving horizons and prevents them from hitting a wall and stagnating.
4. Work ethic
Work ethic is basically the willingness and motivation to put in a lot of effort and pursue the best outcomes in your work.
While it displays your desire and eagerness to learn more and contribute in more places, becoming connected with other departments within your organization and other project teams can also reflect a strong work ethic.
I have met a bunch of software developers with poor work ethics.
They usually act like this:
- I am done, I just have to fix this one thing (fixing it for a couple of days)
- I was done with a task, but I discovered a new bug
- I am confused by this requirement, can someone explain this X thing to me (waiting the whole day to ask this on the next standup)
- I had other things to do, meetings and administrative stuff
- This task is really hard, my head hurts so much, and I am not sure how I will finish this (working on a simple template-based task wasting as much time as possible to avoid picking the next task)
Basically, their delivery is usually delayed to the maximum point and they always have some excuses.
This trait is really hard to fix and the whole team can suffer if one person has a poor work ethic.
5. Organization and time management
The ability to organize your day and do proper time management is a critical skill for a software developer.
Knowing how to manage your time is essential when you have a lot on your plate:
- How long are you in meetings?
- How much time do you code?
- How much time do you spend helping others?
- How much time do you spend on utility stuff, emails, messages, collaboration, etc
You can concentrate on what’s most important and complete activities more quickly when you have good time management skills.
Personally, I always like to prepare the night before. I make a plan:
- First thing in the morning I will quickly go through messages and emails, answer ones that are highly important
- As I am most productive during quiet morning hours I focus on completing a task of the highest importance, basically coffee and coding, with no interruptions
- Time for breakfast, a small break
- Meetings, collaboration, and coordination with the team
- Work on tasks, helping colleagues
- More work, meetings,
- Finishing and wrapping up the day
Of course, not every day will go as planned but it is important to have a routine and stick with it.
6. Emotional intelligence/Empathy
Developers with high emotional intelligence usually maintain composure under pressure, whereas those with poor emotional intelligence frequently communicate in a passive or hostile manner.
Also, emotionally intelligent people are better at empathy and listening to constructive criticism.
Those who lack emotional intelligence, on the other hand, struggle to collaborate, dismiss the opinions of others and don’t own up to their mistakes.
The ability to comprehend or experience what another person is going through at any particular time is referred to as empathy.
Developers need to be able to empathize with individuals around them, especially in a high-stakes industry like software development.
Understanding the viewpoint of a non-developer, such as a designer, project manager, or quality assurance engineer, is another application of empathy.
So next time you see your colleague struggling, ask if he/she is ok, and offer help.
People can go through a difficult period of time and sometimes they won’t tell you, their kid can be sick, they can be overloaded by work, have family or relationship problems.
On these days, try to be empathic, and help them. They will be grateful to you.
When software engineer has healthy self-awareness, they are secure in what they know well and humble when given the chance to learn something new.
Because they don’t let their insecurities hold them back, secure software developers have the highest chances of developing their careers.
They are constantly willing to admit where they need to grow and then put in the effort to acquire those talents.
I know a couple of developers which struggle with this skill.
Usually, they have low self-awareness in combination with poor work ethics and the Dunning-Kruger effect, thinking they are much better than the rest of the team and that the company devalues them.
They leave the companies, but the same symptoms repeat.
You can spot low self-awareness in a developer:
- They think highly of themselves without a real reason (eg. thinking they deserve a software architect title after 1-2 years of work)
- They ignore code review comments from colleagues, approve and merge their merge requests
- When someone suggests them a better approach, they defend their opinion at all costs and ignore others
- They heavily argue with others
I was not sure how to correctly name this skill, but I think word approachability fits well.
Every developer has that one go-to person whom he can ask for help or advice when he is stuck.
Because that person is likely to always try to help and give good advice, no matter how busy his/her schedule is.
When something goes wrong, people are less likely to ask you for assistance if they don’t feel comfortable approaching you and asking you a question. That may indicate that a minor issue can quickly become a significant problem.
Others are less inclined to assist you if you need it if you are not approachable or helpful.
People are more likely to work with you and not against you if you can establish a good relationship with them.
Put on headphones while you’re busy, and set status on Slack to let folks know when you don’t have time to talk, or simply explain to the person that you have higher priority stuff to do, but you will come back to them after you finish your tasks.
Approachability is a must-have skill for seniors and mentors so that other colleagues can talk to them and ask for help without hesitation.
Finding errors in code can be really frustrating.
As your early leads fall flat, you can be forced to go line by line through the code to find the issue, which calls for a lot of perseverance and patience.
These kinds of frustrations are experienced by developers every day.
Conditions like these necessitate a level of patience that only a select few software engineers possess.
Usually, when a developer is in a neutral condition, they make the best decisions. Also, remaining composed in the face of disappointments contributes to the best possible outcome at the end of the day.
I have worked with many developers in the team that lack this skill.
Some of them would swear, and some would hit the walls with their fists but most memorable was one colleague who purchased a desk punching bag
He would hit that like 100x daily and it was really funny 😀
Instead of purchasing a punching bag, try to adapt your mind to react calmly and keep your composure in these situations.
Personally, Stoicism helped me a lot in situations like these. I also like to train my mind in daily situations and every time unpleasant situations occur I see them as opportunities:
- when I am stuck in traffic
- when my neighbors are arguing and making noise,
- when I encounter bad drivers,
- when there is a huge waiting line in front of me and I am in a hurry, etc.
If you are too humble or you are suffering from Imposter syndrome, it can hurt your career as a software developer.
So being confident is actually a big deal.
On the other hand, being too confident can backfire as well. Thinking that you know everything and that you are the best can damage your team and make you a narcissistic jerk in the eyes of others.
It takes time to build a solid foundation for confidence.
The number of years of experience you have frequently plays a role in that. The third time you solve a similar problem should be easier and more natural for you than the first.
You ought to feel in control and strong after doing it. Confidence expands when it is fueled by expertise and control.
I often see a lack of confidence in junior developers.
They’re not sure what to do next. They may reach a stage where they are helpless and in need of nurturing surroundings in order to develop confidence. Someone who is ready to assist, instruct, and explain.
One thing that I don’t like is when developers are afraid of tasks, googling solutions and Stack Overflow before even starting to work on the task, so basically being afraid to even start.
This really shows a lack of confidence.
I am ok with making mistakes, learning, and building your confidence step by step. You are an engineer and a problem-solver, and I just want that you give everything and do your best.
No matter how many mistakes you make, how ugly is the code, and how much time you spent on the task.
All of these aspects are easily improvable, but you will notice that you are growing better over time. Your confidence will increase as you score more victories.
This seems like a really long list of skills, but there are more soft skills that are also good to have.
You no longer just need to be good in the technical domain, but also in soft skills, right?
Good thing is that you already possess the majority of these abilities.
Some of them might not be known to you, and some not. This article should assist you in discovering some and developing others.