I don’t always agree with the way people entitle engineers. All of these specialists aim to achieve the Senior title because this means success and career development for them. However, the way many of them are given this title is often unmotivated.
How can we measure whether an engineer deserves to receive the Senior title? What engineers should do to get to this stage of career development? I have a long experience in this industry, so I know for sure what engineers of different levels must be capable of. I would like to discuss this topic by paying priority attention to the correlation between knowledge and experience.
First of all, we need to take a look at what is called experience and knowledge. Basically, in this industry, both knowledge and experience play a vital role for specialists and for their employers.
The term "knowledge" stands for the understanding of how to do things well. Experience, on the other hand, is the understanding of what shouldn’t be done. Everyone can gain knowledge by attending different educational courses and consuming a lot of information. In order to gain some experience, you should practice, make mistakes, fail, and drive your own lessons from those failures.
As it is said, smart people learn from their mistakes but the real sharp ones learn from the mistakes of others. If you are a software engineer, and you have such a vital skill, you will benefit from it a lot.
You have a certain amount of knowledge even if you haven’t worked one day. You might have gained this knowledge from special courses or university. What you couldn’t have gained there is a real experience. Average Junior Software Engineers have more knowledge than would be appropriate for their experience.
Junior Engineers believe that it’s not a problem but they simply don’t have enough experience to understand that they are wrong. When you have experience, you will always keep in mind your previous failures and will remember that you should avoid them. Junior Engineers who only have knowledge but don’t have experience don’t even notice when they are doing something wrong.
I’m not trying to reproach anybody – everyone was on that stage. I am not an exception. When I was a Junior Engineer, I used to argue with people, trying to convince them that my ideas are right. I was sure that certain features were just must-haves for potential users, and I couldn’t believe the system will work well without those features. Today I realize how insignificant it was.
Luckily, I had Senior Engineers in my team who didn’t try to convince me. They let me do what I intended to do, so I could learn that the features I offered had many pitfalls and were wrong for the project. I didn’t listen to the recommendations of the Senior Engineers but I’m glad that they let me make this mistake.
I understand that my ideas were wrong but today I have a valuable experience. This is what really matters to me now.
The thing is that you should understand the value of experience. After thinking wrong about a certain feature, you shouldn’t consider that this feature is useless. You just need to realize the context of your project to be able to assess the changes you made and the experience you gained. In other words, you cannot be a senior software engineer just because you have a correct opinion, you must know how to teach others from this opinion and their journey.
The beginning software engineers aim to achieve the senior stage because they don’t want to stay on the mid-level for their entire careers. But not many realize what it takes to become a senior engineer. At the stage when you have enough experience that corresponds to your knowledge, you should be considered a Mid Level Engineer. This is an important stage.
Your experience corresponds to your knowledge when you think know the correct opinion but you look up alternate solutions anyway. Unlike juniors, you won’t follow your only opinion, you will listen to the recommendations of others and will try to choose the best option.
You can be considered a Senior Engineer at the stage when your experience exceeds your knowledge. At this stage, it’s easier for specialists to recognize wrong ideas intuitively. Your job is the best teacher for you because neither tutors nor their courses will give you so much needed experience.
At this stage, it’s important to fully realize one important thing. Our industry, the industry of technologies, is a boundless field where you can absorb tons of information and learn the most sophisticated things. Your knowledge and experience are vertical restricted, they don’t apply to the entire industry.
I work as a full-stack web developer and I deal with cloud solutions, API designing, frontend javascript engineering, and other things common in this industry. By working with all this stuff, I gained a lot of knowledge and experience. However, this all appears to be useless if I consider joining an embedded programming team at SpaceX, writing the C code that's loaded into the microprocessor on a servo that controls the pitch of a rocket's arms...
The thing is that I can be a senior engineer on all topics – senior engineers specialize in particular subject matters. If you want to become a true senior engineer, you should realize that at the beginning of your career, you should go deeper in one specific area. Of course, you can become a real full-stack and work deeply with both the front and backend, for instance. However, this will be a very durable and exhausting journey.
For the last few years, I haven’t been changing my mind that a Senior Engineer isn’t the last stage of professional development for a software developer. I made this assumption because I personally know specialists who achieved much higher levels than average Senior Engineers. I can say that I’ve become one of such specialists.
Even though I have a long experience of leading senior engineers and deep knowledge of code, I fully understand that it’s impossible to be 100% right. You will make mistakes at any stage, regardless of your title and responsibilities.
The problem with our industry is that it’s one of the fastest-evolving industries ever seen. Everything we have here today will change in the future, and it’s changing right now at a gradually increasing pace. Everything created by us will change.
In order to realize that changes in our industry are inevitable, you have to get to another level of understanding. If you have experience, you realize that there are many things you cannot control or predict under any circumstances.
An engineer of the highest level must know how to identify unmanageable and unpredictable things. When you know them, you can abstract your system from other external things that might bother quick changes.
You cannot be always right or wrong. Not all circumstances you face during your career have an equal impact on your solutions and the projects you participate in. Something is better, while something can be worse.
Knowledge is important because it helps you to move forward and to express your opinion during arguments. You know facts, you know how to apply the best practices, you know which features to implement, etc. Knowledge is like fuel for you and your confidence.
Experience, on the other hand, tells you when you should stop and reconsider your opinions. Experience includes memories and mistakes, failures, and fears you faced when working with previous solutions. The experience opens your eyes and motivates you to consider alternatives.
When both your knowledge and experience tell that you are on the right side of the argument, don’t stop moving forward and pushing your ideas. Your project can be successful only if the team makes correct decisions on it. Don’t be too confident – consider that sometimes your opinions and thoughts might be wrong. When you realize this, don’t let your knowledge surpass your experience.