During my time as a software developer I met and worked with many other developers. Some of them just started their apprenticeship, some started their first job after university, some already had multiple years work experience and some even had 10+ years experience working as a software developer.
Early in my career I asked myself what is a "senior" developer and how can I achieve this title? I thought it was related to the years of work experience and that I will automatically receive this title if I have 3+ years of work experience.
Nowadays, after I have worked with many other developers, I have a clear opinion about the title "senior" software developer.
Lets first summarize my distinguishing marks of a senior software developer:
- Have passion for what you are doing
- Be a "problem solver"
- Learn the fundamental basics of your programming language and frameworks
- Be a mentor and have a mentor
- Keep yourself up-to-date
- Leave your comfort zone
- Fight for your opinion
- Be social
- Focus on soft skills as well
Now let's dive deeper into these topics.
Have passion for what you are doing
Most of the other marks will be achieved automatically if you have passion for what you are doing. In my opinion, you can only be a good software developer if you love the stuff that you are doing. This also means that you should choose a technical stack or specialty where you are (or will become) very good at.
Of course, you should also learn other stuff outside your specialty. Your goal should be to become a T-Shaped Software Engineer which knows his main specialty very well.
In this blog post I will mainly focus on web development tech stacks as I have the most experience working with it and have a personal opinion about them.
Be a "problem solver"
You should love to solve challenging problems in an endless amount of time. You should have the power, ambition, skills and passion to solve any possible problem that will occur during your career.
Learn the fundamental basics of your programming language and frameworks
This is really essential for a software developer. It is often not very complicated to learn the basics of a programming language or framework. Most of the time, you can quickly implement features or even smaller projects after a short time. But it gets tricky if you need to debug, adapt the framework or fix bugs.
For example, many people use the Angular CLI but are not familiar with all the steps that happen behind the scenes. Or the use Angular with TypeScript but do not know how to read JavaScript code in the minified bundle code.
Basically you can follow these basic steps to learn the fundamentals:
Read some of the fundamental books about software programming
I would suggest to read some classic books about software development like Clean Code: A Handbook of Agile Software Craftsmanship or The Pragmatic Programer. These books will provide you the basic patterns, guidelines and best practices to write good software.
Deep dive into your programming language
In web development, JavaScript is the language you should master. At the end of the day, your browser will run JavaScript code (even if it was written using frameworks like Angular with a programming language like TypeScript) and you need to be able to understand this code that is executed. This is also important if you need to analyze how a certain functionality is implemented in your framework, so you should be able to read low-level JavaScript source code.
For JavaScript I would recommend you to read JavaScript: The Good Parts.
Master your framework
Same as for the programming language: Deep dive into the advanced mechanics used in your framework. For example, for Angular I can recommend the blog Angular In Depth.
Learn your IDE / editor / command line
Be as efficient as possible by using keyboard shortcuts, plugins and commands for your IDE, text editor and command line. If you are using Visual Code, checkout my article How I Increased My Productivity With Visual Studio Code.
Learn version control
I mainly worked with Git and can recommend you the free online ebook Pro git.
Be a mentor and have a mentor
In my opinion you can only call yourself a "senior" developer if you mentor others and also have a mentor yourself.
You should have someone at your company, in your project or even in the internet which you can learn from and get better. So you can also have a "remote" mentor where you read a certain blog, watch presentations, hear a podcast or read tweets.
Don't be afraid that you are not the best at everything, there is almost always somebody who is better than you. (Read also about the Imposter Syndrome)
How you can mentor others:
- Be patient and do not judge others because of their lack of knowledge
- Let the other person talk and listen actively
- Show the path of success which can be achieved as a senior developer
- Spend enough time and offer help when it is needed
Keep yourself up-to-date
My suggestion is to use these channels to keep yourself up-to-date:
- YouTube
- Podcasts
- Conferences
- Blogs
- Meetups
- (Online) Courses
Leave your comfort zone
Many developers try to avoid leaving their comfort zone and a "senior" developer should not be afraid of leaving his comfort zone. Here are some examples:
- You are afraid of talking about technical stuff for many people? --> Give a talk at a conference or Meetup and get comfortable with it.
- You don't like writing backend code and are only interested in frontend? --> Go ahead and learn backend technologies. You will benefit, if you understand the "other" side.
- You avoid touching your CI/CD pipeline as you do not understand it and some other developers are more experienced with it? --> Take your time and learn the basics so that you can help yourself and you are not dependent of other developers.
Fight for your opinion
In my opinion, a "senior" developer should have a clear opinion and be able to fight for it in front of clients or other developers. For me it is not satisfying if I "dictate" technical decisions to my team, everyone accepts it without saying their meanings and start implementing it.
For both sides it is more interesting, if there is a vivid discussion about the technical proposal. It can help the architect to get new impressions and the team can actively have an impact on decisions.
Be social
Do not hide yourself behind your monitors. Go out there and talk to other developers and you will profit from it. Additionally, use the social platforms mentioned above to get in contact with other developers.
I would also recommend to build up your personal brand and let others be able to follow you:
- Have a website where you present your projects
- Use channels like Twitter, Facebook, YouTube or Instagram and inform your followers about interesting topics
- Start a blog where you start writing technical articles
- Try to hold talks at conferences
Focus on soft skills as well
Writing good code is important but it is also very important to be able to describe technical stuff to "non-techies" like clients. You should be able to draw architectures in an understandable way or describe it in words. Additionally, you should be able to have a working time management where you can prioritize tasks and work on them in the most efficient way.
Conclusion
As you can see the journey of becoming a senior software developer is not very easy and cannot be achieved in a short amount of time. This is the point where years of experience are important but you have to spend your time in these years by focusing on the above mentioned aspects. If you only have many years of work experience but did not grow yourself as a developer you cannot be a "senior" in my opinion.
Of course, this is only my humble opinion so let me know what's your definition of a "senior" developer and what experiences you have made working with them?
Top comments (14)
In my opinion, it's much more simpler than that. A senior developer is just someone who worked a lot and is aware of most pitfalls other junior developers tend to fall, so he/she is able to get work done faster and more reliably so.
Or she! :)
yes definitely, edited the post, thanks for pointing out!
No problem :) That's what I figured you meant.
"Fight for your opinion" this is the most important thing that I find developers lack, no matter how good or bad they are. Every place I've worked that had a bad dev culture or code base had this as the root cause. Doing things blindly because your team lead, CEO, CTO, or whoever told you to leads to bad code, and possibly building the wrong thing. If you disagree, say something, explain why, and then come to an understanding with all stakeholders. You or they may have info needed to get to the best outcome. Similarly, always ask why a feature is being implemented if its not obvious. It will help you do it better than if you don't know. You won't have to go to the card's creator if you have a question of 'should I do A or B for this?' because you will know which makes sense based on the reason for the change. Or it might help you realize they want this feature due to some issue they have with an existing feature that they don't realize can be easily changed. Like a report is missing a few fields and maybe they want an option to include a graph, so they suggest a whole new report system. But for sure, fight for your opinion, never be afraid to argue(not heatedly) to get to the best outcome. If you can't do that with your CTO, or boss, or whoever, consider looking for a better work place if you can.
This.
I definitely want to be teachable and open to having my ideas challenged. However, if I think I know something, I hold it pretty firmly until someone can make a better counterargument to my own. By that test, I find I'm right about as often as I'm wrong, and knowing that really helps limit my imposter syndrome.
This is really informative. Thanks for sharing I think I’ve been able to leave my comfort zone trying to do all the other steps. and Constantly trying to keep up so I’m not left behind.
Couldn’t agree more, the first three described a good developer in general
I agree with a lot of what you write. However, when you use 'their' when you should be using 'there,' you lose a little steam. Just sayin'. You wrote: "...if their is a vivid discussion..."
Out of everything Michael wrote you pull up on that! That's why developers use compilers and linting! 😋
Thanks for the hint. I am not a native speaker so please excuse these mistakes ;-)
Link to JavaScript: The Good Parts is broken. I know I can find via google, but anyways ...
Ops, fixed it. Thanks for the hint!
Great article! Also, the book series of You Don't Know JS is very good resource if you want to master the roots of JavaScript github.com/getify/You-Dont-Know-JS...