This article was first written for Zigi's blog on the subject of developers happiness/noise/career/productivity What qualities should a software engineer have?
The tech industry is a highly sought after career path for a lot of people. Software Engineers continue to be in high demand and during this pandemic work in this sector has increased significantly. As more companies try to become more tech focused and move towards automatisation the industry will continue to grow and Software Engineers will have plenty of work opportunities. The global pandemic has forced a lot of companies to adapt as the old way of working is not as relevant as it used to be. A hybrid model is much more preferable as businesses get used to the scenario where some employees choose to work from home as opposed to being in the office. This pandemic is far from over and many people still don't have access to vaccines so it is likely that this will continue for the foreseeable future.
"I have worked for various companies and during my time there you get to experience different personalities. With time you will understand some of the core traits that separate a good developer from an average one."
I have been working in this industry for quite a few years getting exposure to working on the front-end, back-end as well as on some mobile applications. When working for a large company you will realise that you have a wealth of tools, resources and experience at your disposal. Having access to learning resources that help you to improve your skills as well as more senior developers who pass down wisdom and knowledge can be useful when you are trying to find your feet and do your best work. When you take a look at the whole package it can be quite easy to see how you can grow as both a developer and a person in general.
When it comes to being a Software Engineer I believe that there are many characteristics that someone can have. I have worked for various companies and during my time there you get to experience different personalities. With time you will understand some of the core traits that separate a good developer from an average one. It is possible to break it down into 5 categories which are:
- Proactive and intuitive
- Good communication skills
- A team player
- Great technical ability
- Passionate about career progression
One of the best quality traits that a Software Engineer can have is the ability to be both proactive and intuitive. In one example I was tasked with working on a Greenfield project. The team lead assigned me the project and I was given complete autonomy for the project. This meant having the freedom to choose my own technical stack and going off on my own to do research on how I would go about working on it. Knowing where to look and finding the best resources are good skills that every Software Engineer should have.
Taking it one step further and creating a document that covers these resources which can be shared with other team members is even better, which I have done a couple of times. If you can do something that is going to benefit the team and cut down on idle procrastination and needless research then you are adding value to the team. This is something that I try to do as much as possible. Sharing the knowledge that you have learned over the years and bouncing back and forth between team members helps the group content tree of knowledge to grow even more.
Having good communication skills is an invaluable skill to have at any company. There have been occasions when I have had to explain something to a stakeholder or client who was not versed in tech in any way or form. It is important to explain everything clearly like you are talking to someone who is seeing the product for the first time. You can save all the technical jargon for your other developer friends. It is far more efficient to give a basic overview using a lingo that can easily be interpreted.
This is something that I have tried to hone over the last few years. People definitely respect you more when you put in the extra effort to break something down into layman's terms. There have been quite a few occasions where I have felt like I needed to talk slower and take more time explaining things. The pay off in the end is much better because you don't have to repeat a subject over again if you sell it well the first time round.
There is no "I" in team. If you can't get along with your colleagues then the overall team cohesion will be broken. I can recall more than a few instances when I was pair programming with another developer as we tried to get some code to run properly. They were having some problems so we decided to work together as it’s always good to have another pair of eyes looking at it. Two heads are much better than one and it is also a great opportunity to learn something new. The worst thing you could ever do is let yourself be stuck on a problem for hours without even asking for help.
Unfortunately this is something that I have learned the hard way. Many times in the past I have chosen to take the path of a lone wolf as I tried to solve a difficult problem on my own. My rationale at the time was that I did not want to look bad by asking for help as I believed that it would make me look weak. The feeling of imposter syndrome is very powerful and every developer goes through it in their lifetime, even the most senior ones.
A better solution would have been to ask for help when stuck because if you just stay there struggling until the end before someone comes over to check how you are doing. It just makes you look really bad. You live and you learn. Another good quality of a team player is having the tenacity to make yourself available for helping other developers when deadlines and workloads are heavy. I have helped out my other fellow developers and they have done the same. It decreases the workload and at the end of the day everyone is happy.
Experience comes with time, it does not happen overnight. A Software Engineer is like a battle hardened soldier you have to go through the bootcamp before you are ready for deployment. You learn as you work and pick up better working habits. In the past there have been many occasions where I struggled to build some sort of functionality in an application. It was my first time and I did not really know what I was doing. It is through trial and error that you start to figure out how things work. Like getting JSON data back from an API for example.
The first time you try to do it you are not really sure how it is going to work or look in the browser. Once you have performed the same technique a dozen times the syntax basically writes itself and you no longer need to refer to the documentation as much. This is the kind of experience that I am talking about. Once you have attained this experience from working on real world projects, you will now find yourself in a position where you can now pass this knowledge onto other people.
The ability to learn, teach and document your findings is a highly distinguished skill worth honing. In my experience I have seen my confidence and self-esteem increase considerably and you feel like you know your field well enough to help aspiring developers reach those levels too.
There is a saying that the tech industry moves at a fast pace and that every year a new framework is released. Jokes aside, it is impossible to be a good Software Engineer if you are not willing to grow and learn new things. This is an area that I have been working hard on for many years. I have bought 66 Udemy courses, I'm active on social media and I have built quite a large audience across all of my platforms. Learning and sharing what you know is a fantastic way to stay ahead in the game.
I truly believe that the most successful developers in this area are working on growing their brand, connecting with other people and working on multiple passive income streams alongside their main developer job or day job. I went from being a designer who knew how to code to a Software Engineer, Writer and Content Creator. It is one thing to work in this industry and live it "passively". But if you truly want to reach the next level as a Software Engineer then you should be trying to be 5 - 10 steps ahead of your peers so that you become the person that they aspire to be in the future.