What formal education should have taught me but did not
I’ve been working as a software developer for about a decade now. If I had a time machine and had to give my younger self one piece of career advice, it would be this:
Soft skills are as important, if not more important, than technical skills
When I was just starting out, I was completely convinced that technical skills are what makes or breaks a software developer’s career. I had the naive impression that developers who are great at building software would be the ones that get ahead faster. And wow, was I wrong.
As a work newbie, I quickly observed that developers who have passable technical competence but excellent soft skills were outperforming technical virtuosos in terms of career advancement and financial compensation.
I used to be on the same team with a developer who was ultra intelligent. He knew the intricacies Java Enterprise ecosystem like the back of his hand. He was one of the most competent coders I knew at that time. He could run simulations of complex multithreading scenarios in his head with little effort.
Unfortunately, his career progress was sluggish. It was hampered by the fact that it was not easy for others to work with him due to his difficult personality and meager soft skills.
Since formal education did not teach me much about these skills, I began to take notes about what successful software developers were doing. I did that in order to emulate them.
Skill #1: Marketing your work
In an ideal world, your work would speak for itself. Unfortunately, we do not live in an ideal world.
Great work goes unnoticed all the time. We have to take an active part to make sure that our contributions get communicated in order for them to be seen and acknowledged.
In most cases, management does not directly judge the quality of your technical work. It is not the job of your manager to review every line of your code to evaluate your performance.
The impression that managers have on us is based on their observations. They piece together an image of your performance based on contact points like:
- your direct communication with them (1-on-1 meetings, working together on projects)
- meetings they attend where you are present
- demos and presentations that you give
- your communication with others where they are passively involved. For example, email CC.
- what others are saying about you behind your back (yes, people do talk behind your back)
If we want to take responsibility for our career trajectory, we have to manage how we market our work.
There are many varying opinions of what “marketing our work” means. To me, it means communicating the vital information to management in order for them to paint an accurate picture of your good work.
We have to tailor our marketing strategies based on our unique situation. Your situation depends on factors like your personality, your manager’s personality, your colleagues, your company culture and the nature of your work.
For me personally, I have found the following actions to be effective:
- communicate clearly which part I have personally played in a project. Effective places to communicate this would be in 1-on-1 meetings or team meetings.
- make sure management knows about any extra tasks that I do on my own initiative
- don’t be an asshole to my colleagues. Obviously, we shouldn’t be assholes to anyone anyway. Being an asshole to work colleagues will cause them to talk about us in negative light behind our backs.
- for performance review meetings, I ask for appraisals from the colleagues I directly work with. If you have done your job correctly, they will say good things about you. It is better for others to sing praises about you rather than tooting your own horn.
Never communicate wrong or fake information to management in order to get ahead. You might get away in the short run. One fine day the issue will come back and bite you in the “backend”. I have seen this happen first hand to some colleagues.
Skill #2: Time management
As software developers, we have the luxury of being afforded a lot of freedom. Much more freedom than many other professions. Part of this freedom is the opportunity to manage our time to a certain degree.
Managing our time means we should be able to prioritize our tasks. It is very tempting to work on exciting tasks first and ignore the more important but less interesting ones.
We all have seen instances were developers get carried away in their rabbit hole of tech, only to discover too near to the deadline that the important bits of the project have been forgotten.
Time management also means keeping procrastination in check. As a software developer, you can practically get away with reading memes and watching cat videos for days on end. Procrastination causes panic near deadlines. Panic causes distress and bad quality of work.
Another aspect of time management is punctuality. Because meetings in tech are seldom life and death meetings, some developers make it a habit of coming in late to meetings. Coming in late to meetings on a regular basis has the following negative consequences:
- It is annoying to other team members
- It wastes time because they have to repeat you have missed
- It hints to them that you are unreliable
Time management also means knowing when NOT to work. It is OK to stay back late once in a while to meet important deadlines. But pulling all-nighters on a regular basis will have detrimental effects on our health and social life.
We have to know when to log off and head home for the day. When we are not at work, for example on weekends or on vacations, we have to have the discipline of staying away from work. This means no email reading or coding that “one more line”.
In our bubble, it is too easy to feel peer pressured into burning the midnight oil or feeling guilty that we are not checking emails on vacation. We have to remind ourselves that taking time off actually improves our productivity, not reduce it.
Skill #3: Networking
I had the opportunity of getting the job I currently have because of networking. A couple of years back in a company-internal tech conference, I attended a very fascinating talk. I got in touch with the speaker. One thing led to another and I ended up working on the same team as the speaker.
Knowing the “right” people both inside and outside your company has a huge impact on your career. Some obvious benefits are:
- getting better job opportunities
- having more contacts for your projects (for collaborations, as clients etc.)
- getting help from people who are not formally obligated to help you
- increased chance of skipping certain bullshit corporate red tape procedures
- they can introduce you to other people
One way to get to know someone new is to approach them when you come across their work. If you have attended an interesting talk or read an article, you can shoot the colleague a mail to thank them and express your honest thoughts on the topic.
If the conversation takes an interesting turn, you can meet them personally to ask what they are working on or go for lunch.
When I am faced with an issue I cannot solve by myself or with the help of those I know, I sometimes rummage the company intranet to see if anyone else has worked on a similar problem. I would send them a “cold” email to ask for help.
Most of the time, colleagues would reply and be more than happy to offer assistance. Even if they cannot help directly, they could point you to a person who can.
Another way to widen your circle is to ask for an introduction. If you know someone that knows a person you would like to know, you could just ask to be introduced.
You can also gain corporate contacts from leisure activities. Many companies, especially bigger ones, have groups that come together for after-work activities. I have met many interesting work contacts by going to dinners and participating in sports games.
It is vital to nurture the relationships that you have. If you just contact people when you need them, they will have the impression that you are merely using them. And they are right.
I do enjoy keeping in touch with people to nurture relationships. Some ways that I usually do this are:
- go to lunch or coffee with them
- send them an email if you come across their name. For example, if you read about them in a company blog or a press release
- forward them stuff you come across that you think could be relevant to them
I also enjoy “cross-pollinating” my contacts by introducing them to each other when I see the opportunity. I found out by experience that it is a good idea to ask both parties if they are interested before I introduced them to each other. I have had a couple of bad experiences where one side was not interested in talking at all and it reflected badly on me.
Skill #4: Open-mindedness
In tech, open-mindedness is key. Open-mindedness ensures that we are able to adapt ourselves to the dynamic nature of our jobs.
One aspect of open-mindedness is being able to listen to the opinions and ideas of others. If we properly listen and understand what others are saying, we have the chance to:
- learn something new
- build new ideas based on the ideas of others
- more effectively drive the task at hand forward
- cut down on unnecessary discussions in meetings
Close-minded developers go into discussions with the aim of pushing their ideas onto others. When others talk, they do not listen, they merely wait for their turn to talk again. Some do this because of ego, some because of stubbornness and others because of pure habit.
Open-mindedness does not mean we have to accept everything that is crammed down our throats. It does not mean we become pushovers and have to say “yes” all the time.
Being open-minded means we are able to defer our opinions and judgment. At times, it is all too easy to be overly skeptical of a new idea or a new way of doing something just because we are not familiar with it. This could relate to a new project management method, a software tool or an organizational change.
Just like with technical skills, there is no end to improving our soft-skills. As software developers, we are technically inclined. After all, that is the reason why we chose this path in the first place.
We have to remember that neglecting soft skills like driving a performance car on cheap wheels. It would be impossible to achieve the maximum potential no matter how awesome the engine is.