How to Excel in your First Job as a Software Engineer
Effective communication, building relationships, taking initiative
Doing well in Software Development is not just about writing the most code in the least amount of time. Working in an engineering team is quite different from what most students are used to in their university maybe working alone, or working in small teams of 2-3. This post is aimed mostly at students who are in their final/pre-final year of university and will soon be entering their first job as a Software Engineer or an intern.
When I started working as an intern, I had the luxury of meeting people physically, going on team lunches etc. I could just walk over to someone if I had a question. These things really helped me build very good working relationships with my teammates, manager etc. However, with most offices still closed and most job opportunities becoming remote, it becomes all the more important to reach out and seek help/feedback and make personal connections with your colleagues.
This article is based on my experience over the past 3 years, most things on here are just my opinion and it's totally okay if you don't agree.
When transitioning away from academics one needs to understand the paradigm shift. Some things which were important in university are not very important anymore, while some other things like the readability of code are the most important thing. Because of this, a lot of students struggle to transition from academia to industry. In my experience, the best students don't always make the best engineers. Students are typically used to working alone and are not used to taking feedback. In most universities, the projects are delivered at once and students are not used to working on massive projects and making incremental progress.
8 Ways to become a better engineer
Don't be afraid of taking initiative. Volunteer for new projects, volunteer if anyone needs some help. This will open up new opportunities for learning. It is okay if you don't know how to do something, you can always learn.
Participate in technical discussions
I have seen most interns/junior engineers don't participate in technical discussions. I believe the reason for this is that they believe that they are not good enough and don't want to sound stupid. But you need to not worry about sounding stupid and if you have a question or a suggestion, you should almost always speak up.
NO ONE will judge you for not knowing something. However please don't ask something just for the sake of asking, that is just annoying.
Taking ownership means that you will complete your assigned task from start to finish. You will ensure that you communicate with your team and the respective stakeholders in case there is any blocker or to keep everyone up to date on the status of the work, so that you reduce the risk of not getting your task done in time. This is something that junior engineers actively need to work on.
I have seen so many juniors who when given some task, just vanish and go into a cocoon for several weeks and come back after a few weeks having completed the work, or to tell that they are stuck with a problem. Taking ownership means that you need to show incremental progress and seek feedback periodically. This will also help you develop trust with other team members as people will know what you are actively working on.
I cannot remember where I had read "If your manager cannot trust you, it doesn't matter how smart you are". This makes complete sense, you need to build trust with your co-workers. You need to ensure that people don't have to follow up with you again and again.
If you need something say it. If you need technical guidance, speak up. If there is something in your personal life that is taking up your time, it might make sense to share relevant information with your manager so that expectations can be set accordingly. If you have concerns regarding your promotion or your compensation, you should be able to talk to your manager about these things. Clear communication is very important.
A lot of junior engineers that I talk to, say things like "I'm not good at front-end" or "I don't know about XYZ". Well, that might be true for the moment, but you can always learn whatever you don't know. Most people don't know most things. It is more important to be open to learning. Learning new things itself is a skill. This brings me to my next point.
Learn to learn
The best engineers I know are open to learning. They are often faster at learning than "others". This is not because they are smarter, but this is because they have developed this skill of learning new things over the years. Everyone has a different way of learning, figure out what works for you.
Usually, you'll have to go outside your comfort zone for this. But the more new things you learn, the more you exercise your "learning muscle". Be open to suggestions and new ideas. These can be in the form of code reviews or during stand-up meetings. Just general discussions between other team members are a great learning opportunity. Listen carefully to what others are saying, if senior engineers a doing something a particular way there is almost always a reason they do it that way.
If you don't know something, ask. No one will look down on you for not knowing something. And if they do, it is a reflection on them and not on you. It is better to ask a senior engineer who can explain something to you in 5 mins rather than spending 3 days trying to figure it out. However, please make a genuine effort to understand something before you go out and ask. You need to respect people's time. I see far too many junior developers who seek help at the first sight of inconvenience. This ties together with my previous point, if you don't struggle, you will not learn anything new.
Separate work from personal life
Learn to switch off. This is something even I struggle with. You don't need to be online 24/7. If you receive an email at 11 PM you don't need to reply instantly. You don't need to work weekends. A lot of new engineers want to "prove themselves", which is fine. But you need to create a sustainable work-life balance for yourself, it is not fun to feel burnt out in a couple of years.
Having said that the other extreme is bad too. I've seen people not joining important meetings which are beyond 5 PM because they are "off work", try to find the right balance that works for you.
Create meaningful relationships
Human beings are social creatures. A good relationship with our co-workers will make our jobs enjoyable. Be empathetic towards your teammates, and try to help wherever you can. Having a strong professional circle will also help you develop your career, opening up opportunities that otherwise might pass by you.
Most of these things need to be done within reason, for example too much "asking" will come across as an inability to learn or by taking up too many tasks you can stretch yourself too thin.
These were some of the things that I did as a junior engineer which helped me grow as an engineer. I still try to actively do these things. If you feel that I missed out on something or if there is something that you would do differently, please let me know in the comments.