Advice to a junior software engineer
About six months ago a new junior engineer started in my work. As I’d already been there for a while he came to me and said “You seem to know what you’re doing, what advice would you give to a new engineer starting out?”. I hesitated, having never actually considered this before, and answered that I had no idea…
That question has stuck with me, and since then I have been thinking what would I say if he asked me again, or what will I say when another new starter asks the same question? I began to look at the habits of my colleagues at all levels, as well as what made other new joiners accelerate and achieve beyond their peers. In doing so I learnt quite a bit and felt it would be good to share my thoughts and although this is in the context of advice to a new starting engineer, really you can all continually learn from applying any of these principles.
Always ask ‘why?’
The best engineers I have worked with, and the new engineers who learn the fastest, are those who continually ask and seek out the answer to ‘why?’. Why do we do it this way? Why do we use this tool? Why is our team structured like this? Why are we working on this story?
All of these questions, even when at times it seems obvious to others or you have a vague idea of the answer yourself, benefit the whole team. It’s surprising how many people in all walks of life will sit through a conversation with no idea what someone is talking about without asking them to explain the concept just to save face.
If you are more worried about being perceived as all knowing than you are about learning and gaining greater understanding, then you will miss out on a prime benefit of working in a team. Asking ‘why?’ when discussing tools and processes can also help lead the way to finding a better solution when a novel viewpoint is raised, challenging the status quo, or can help share knowledge amongst the team. Frequently in tech something becomes part of the furniture and we forget to check if there is an improvement available, until someone thinks to ask ‘why?’. This principle is applicable in all aspects of the role, whether technical or business related. As an engineer you should seek to understand the domain and context you are working in so that you are certain your solutions will solve the real world problem.
Try and solve it yourself, but ask for help when you need it
We can all learn a lot from solving a problem by ourselves. you gain a better understanding of the code you are working within or the tools you are using, and the next time you see something similar you can resolve it much faster. Stabbing in the dark, finding the right google search and trial and error does take time though and sometimes if someone else can explain and show you how to resolve it, it cuts that time down exponentially while still providing you with the desired knowledge.
Engineers work as a team and the time a team mate spends explaining how to resolve the problem will likely be more efficient than if you spend multiple times as long going in circles, or the wrong direction. Try and resolve it yourself, see if you can and where you get to, but think if someone else may already know the answer and if so don’t be afraid to ask and get the task done more efficiently. When they have shown you how to resolve it go back to the original state and work through it by yourself. This reinforces what you have just been shown and ensures you fully understand it, solidified it in your mind. It’s also useful to keep a log/diary of challenges you encounter and the solutions you find. The next time you encounter something similar, or if a colleague does, you can return to the project in your diary and find your notes on resolving it.
Help others when you can
This is a general principle of being a nice person, but this mentality will also greatly improve your career. We can split the benefits of helping others into soft and hard skills.
Soft skill wise, if you help other people this generally involves communicating your advice effectively, a key skill for anyone working with others. If you continually do this, perhaps you will gain confidence in your knowledge base and realise that a lot of people come to you for help. This confidence boost can then help you to take risks and further your career. If you also look at this from a team perspective, we tend to collectively gravitate towards certain people for certain things. If you are the go-to-person for help in your team and because of this develop great relationships you may be viewed as the glue that binds the team together. This will result in you becoming a vital member of the team and you will be seen as a leader. This opens doors for you to grow into a technical expert or a team leader. As you proceed to more senior positions it becomes an essential skill to be able to explain complex technical tools and reasoning to non-technical colleagues. Developing this skill early on will set you up for success.
Hard skill wise, helping others solidifies what you already know. Explaining a concept to someone else and answering their questions reinforces your own knowledge of a topic and can raise questions you hadn’t thought of, growing your own knowledge while helping others do the same.
Try a lot of different things to find what you like
As a millenial it seems like the view of my generation is to always be working, and to always love every aspect of your job. In the Instagram age it seems people are expected to always love every aspect of their job and never complain about it, or else why are you doing it? The quote to the left in my eyes promotes an unrealistic goal. No job worth its salt will be without days where you’ll be very challenged, perhaps so frustrated or tired that you’re body and brain will most certainly let you know you’ve done a days work.
If you do work on something that you enjoy it is definitely true however that you’ll get much more fulfillment than just your pay packet. On the other hand if you don’t enjoy your job, if you get no satisfaction from it and it is making your life miserable then why are you doing it? Find something that you enjoy and are passionate about and you’ll get the satisfaction of achieving your goals, plus you’ll be stimulated by the challenges and look forward to getting stuck into the next one.
If you’re really lucky you may already know exactly what you love doing on the first day of your first job, and you’ll stick with expanding your knowledge on that exact topic and grow your career from there. For many of us though we get satisfaction in varying degrees from various parts of our job, and finding those you enjoy the most can help you steer your career towards them. Many tasks you don’t particularly enjoy when you reflect may be because you find them difficult. With perseverance and repetition you can develop your skill set so that eventually these tasks become routine, making it hard to remember why you found them so difficult in the first place. With these tasks rather than trying to avoid them and steer purely towards those you enjoy invest time and effort to understand them. Build your knowledge base and you may find you actually enjoy this aspect of your job, and you will ensure you are well rounded.
If your role is quite broad you’ll have the chance to try a lot of different things. You may get to use a variety of languages, technologies, paradigms and work on some infrastructure, and you will get involved at different points of the software development lifecycle, from idea through design and implementation to support. If this is the case then try to get experience on as many aspects as possible, get a feel for them and see what you are drawn to and enjoy working on. At a junior stage of your career you have much more flexibility to try bits of various things as you likely aren’t the expert on anything yet and needed to focus on it. This experience can help you decide whether you want to specialise in a specific paradigm, tool or development aspect and become an expert, or keep a very broad skill base.
There are a lot of junior roles which, unfortunately, don’t include much variety. Your company may view juniors as the lowest rank in a strict hierarchy and you’ll only be involved in certain parts of the software development lifecycle, or perhaps your organisation is so large that you have a very narrow role and don’t get to experience anything outside of it. In this instance if you enjoy your job then you can continue to grow and become a specialist in this area, or seek to move around, within the company or elsewhere, to experience other aspects while still at an early career stage. Whether you enjoy a task or not it is a good principle to always maintain high quality. This builds your reputation. The world of tech is surprisingly small and you never know when an old colleague could provide a new career opportunity based on an impression you made when working together.
You have the option in either case to take on external projects for growth. Creating an app or website (even if it makes you zero money) and deploying it to the cloud, while having to make all of the architectural and design decisions either on your own or in a very small group, teaches you a broad range of applicable skills that you can use in your career. You may even love doing this so much that you decide to go it alone and do it full time, or it may take off and become a money maker!
Raise your profile and take risks
By implementing the above habits of asking ‘why?’, asking for help, offering help and trying new things you will quickly become a skilled engineer and a vital member of your team. You may decide to write a blog with your knowledge base to help people outside of your company, or deliver a talk to your colleagues or at a conference to share your thoughts. If you do this you can be seen as both a great communicator and a well known and respected person in the field, both of which could help you land your next role. This develops your “profile”, or how others perceive you. Certain parts (e.g. being a vital team member, volunteering to lead or giving a talk to your team) apply internally amongst your manager and colleagues and others externally (e.g. speaking at conferences or networking at industry events) among the industry in general. Raising your internal profile raises awareness of your expertise and could lead to promotion, or to you being given more significant and interesting pieces of work, and raising your profile externally opens avenues to new roles and in the future contracting or consulting.
If you want to raise your profile you’ll need to take risks. By taking risks I don’t mean gambling your company’s money in a casino, or telling your boss to promote you or you’ll walk out the door. I mean you will need to put yourself out there in some way and challenge yourself.
Perhaps you don’t enjoy public speaking but you take the risk of pushing yourself to give a talk. Maybe you don’t feel you’re confident at speaking about technical topics or the most knowledgeable person about a topic, but you take the risk of helping teach the new person. You might have never led a team, but when your boss asks for a volunteer to lead a project you put yourself forward, even though it’s out of your comfort zone. All of these risks help develop your skill set, as well as finding what you like and where your talents lie. It could be a complete car crash, or it could reveal a hidden talent you didn’t know you had, but no one ever gets very far by always playing things extremely safe. From personal experience, and from viewing how others in my company have taken risks, when you are seeking growth your company and colleagues will be very supportive to help you do so. In my workplace the head of tech, team leads and architects are more than happy to set aside time to listen to a presentation a team member is preparing, or to provide ideas and support to those seeking growth.
Find, and take, leadership
This is a two way street. Starting out in your career you don’t know it all, obviously, but you also never will. It’s good to soak up knowledge from everyone around you. Find what they do that works, and do it too. Some people in your company will likely have a lot of varied experience, use them as a leader to guide you. Don’t rely on the word of one person but speak to a lot of others, ask them how they learnt the things you’re impressed by, perhaps ask them about things that went wrong and learn from their mistakes. You may find a mentor outside your company who you can develop a friendship with and get advice from, in London we have the meet a mentor group. This guidance is invaluable and can help steer you in the right direction. In the not too distant future you won’t be the new guy and others will be asking for your advice, so you’ll have plenty of opportunities to pay it forward!
Taking leadership yourself does mean doing all of the things I’ve mentioned around leading a team, helping others and sharing your knowledge, but also taking ownership and leading your own career in the direction you want. Things sometimes do fall into your lap unexpectedly and just fit together, but more often you need to actively seek what you want. Even when the pieces all fit together, if you aren’t prepared and don’t put in the effort you won’t find how to put them together and and things likely won’t work out or you’ll miss your opportunity.
Now do it!
Starting your first engineering job, or deciding to push your career forward can seem like a daunting task; however, if you incorporate the steps above into your mindset, take ownership of your own development, and put in the effort you will build a solid foundation. It’s often said it’s easier to form a habit than to break one, so start with your best foot forward and reap the rewards during your career!
Brilliant article Jamie, well done