Most people want to be promoted to senior level. A fancy title can make you feel good and comes with benefits. Senior developers tend to be confident, and we look up to them as role models when we are just starting out. While it's nice to work towards a fancy title to feel good, I believe that your journey to senior shouldn't be rushed. It's a big promotion, and so we need to be fully prepared for the extra responsibility.
People want to become senior for many reasons:
That being said, not everything is rosy on the other side. Seniors do get paid more, but there are reasons for that. Senior developers have a lot more technical, as well as managerial, responsibilities.
I think that you shouldn't ask for a promotion until you're sure you could handle it. It's much better to make the transition only when you're ready. Contracting is especially stressful because there's no notice period or job security.
In this post, I'll talk about how to accelerate your learning journey from junior to senior. These tips are based on my own experience from becoming a contractor from a junior developer in 2 years.
One of the best things about being a junior is learning quickly. We can learn more by keeping an open mind: coding skills, agile processes and teamwork, to name a few topics that are essential for any software engineer. I recommend making the most of your time as a junior because you'll never be given the freedom to learn so much or ask annoying questions.
I've assumed here that you work in a reasonably good company i.e. no toxic culture, supportive managers, and talented senior developers to learn from. If not, then I'd recommend leaving the company as soon as you can to find a healthy, meritocratic work environment. As a junior software developer, it's important to acclimatise into good habits early, because bad habits can be hard to change down the road.
Only ask for help after you've tried but failed. You don't want to waste your time and other people's time. It's faster to ask for help only if you're stuck for 30 minutes on the same problem.
If you can learn something on your own, then self-learning is the best way usually. Self-learning helps ideas to stick, but ask for help if that's not practical. I prefer learning on my own when there are significant gaps in my knowledge. If I am completely clueless then I need to work through that in my own time.
If you can summarise what you've attempted so far in written form, that can help. There's something about committing ideas to paper or on an app that crystallises my thought process and makes me think clearly. I can also recommend rubber ducking. This hypothetical exercise helps to break down complex concepts and get to the root cause of the issue.
Make notes on general learnings on the job (not code-related). Making notes helps me to remember things if I review them regularly. I can also recommend mind-maps if you need something more visual to remember.
Notes can help to organise your thoughts because there are many things to learn such as XP (Xtreme Programming), TDD (Test-Driven Development), BDD (Behavior-Driven Development), Scrum, Kanban etc. Focus on the key points rather than lots of technicalities, because we can't remember everything. I like practical and high-level insights because I can Google details if I need to.
It's also important to understand the company’s processes, structure and culture. Understanding how a company works can help to get your voice heard and reach the right people. I usually prefer flat structures because the feedback loop is shorter, and we can get to work with management more often.
Create a coding snippets GitHub repository with pre-packaged recipes for common applications. Snippets save time because they capture what works for the next time we write the same thing.
Organise your snippets in folders for each language, platform and framework. I use Markdown notes, but text files work fine as well. We can search through notes via the folder structure, and repository text search.
The repository also helps with information overload. Storing snippets can help you overcome imposter syndrome because you won't be Googling as much.
Senior developers are called senior because they don't need to be managed. Seniors have an intuition of what work needs to be done, and they do it. This kind of intuition only comes with experience.
You will get noticed quickly if you deliver above your weight as a junior. Focus on giving your best effort, and build it up. If you find that you need help to finish a high-priority task, ask early.
Write down what you want to talk about before every meeting. Recognise project issues like low test coverage, legacy code and CI bottlenecks, and suggest actions to resolve these. If you get feedback on your ideas, make notes on what you learn after the meeting.
If something is on my mind that I want addressed I usually raise it early so that people can tackle it early as well. It's better to raise issues early because you may find the whole team benefits as well.
Keep reviewing your learning notes, and gradually you'll get a feel for what to talk about.
I like to do side projects because I enjoy pushing the boundaries of what's possible and there's so many things I could learn.
Side projects are a great way to showcase your technical skills and passion for your job. The lessons you learn from the project could also help with implementing new APIs or techniques at work.
If you want to change companies after a year or two, your side projects stay on your portfolio if you host them on GitHub, the web or on the App Stores. Hard work is never wasted.
Once you try something with a hypothesis in mind, and that hypothesis is validated or disproved, you'll have an experience to remember for next time. Side projects accelerate learning, and I am now trying to keep one project on the side constantly.
Coding is different to other subjects because it's impossible to know everything, and what matters is your practical problem-solving.
I would also suggest not beating yourself up if you Google or use StackOverflow a lot. It's impossible to know everything, so focus on getting the work done with 60-70 % of your time spent learning using documentation and first principles.
As a junior, it’s your manager’s responsibility to mentor you and provide constuctive feedback. Take the help and advice when you need it. If you feel unsupported, that means you should consider moving jobs.
It's important to get support and learn from a good team when you're early in your career. These habits will sustain you when you change companies or get promoted.
Good companies focus on how to improve the code, rather than attack you as a person. If you learn from their feedback, and your team are supportive, then you won't mind the feedback. There's so much to learn that it's important to lose your ego. Good ideas can come from anywhere.
Coding is a team sport. You may be a great developer, skills-wise, but you won't be promoted if you can't work well in a team.
I enjoy teams where everybody recognises good work, and people are friendly to each other. Having fun at work is important and helps bring the best out of everyone.
Good teams share knowledge, talk openly and have a shared mission. I love working in jobs where everybody works well together. You learn so much faster when everyone is on the same page.
An important part of having a good team spirit is the company culture. If you can't change the toxic culture, then I'd recommend leaving the company when you get the chance. Money isn't everything.
Even if you really want to be a great developer, it's not really something you can force to happen. You can keep yourself busy with side projects, be open to learning and make notes, but becoming a senior takes time.
Aiming high is great, but you have to let go of the results at some stage. Work isn't everything, and people often say that the hobbies they have outside of coding help equally as much.
Stop worrying about it and if it eventually happens, it happens. If not, you don’t feel bad about it. Let it go and keep working.
If you love coding and are passionate about self-improvement, then I'm sure you'l get to senior in no time. There's no defined time scale for these things, but we can all try our best to become good software developers.
Titles are not important in this industry. Every person can make a valuable contribution regardless of their department, background or title. In the best companies, the best ideas and content wins over office politics. If you haven't found a company like that yet, keep looking.
Focus on developing the whole package, not just the title.
P.S Maybe I'll see you at WWDC 2022 or I/O 22 🤖. 😄