Disclaimer: it's a very opinionated post!
Let's say you have 5 years of experience as a software engineer and you come to an interview for a senior position. To your surprise, you don't get the job because you lack experience as you were told. How come?
Honestly, professional experience has very little to do with the number of years you've been in business. Instead, it's the variety of experience you gain on the way.
I've interviewed over 100 people within just 2 years, and it's easy to spot candidates who planned their careers early on.
So what do successful candidates do differently?
Let's face it, landing your first job is hard. No pressure, but it also plays a significant role in your future career.
Usually, at that point, the main choice is between a small startup (maybe with a fancy title) or a big established company. I don't think that choosing your company by size is right.
Here are 3 signs the company is a good fit:
- They are willing to invest in your professional growth;
- They are a team of smart people who you will interact with daily;
- They hold you accountable for your actions
Let's dig a little deeper into each of the above.
In a nutshell, it means the company has practices in place that contribute to the professional growth of employees. These practices don't have to be formal, such as courses or lectures. Simple things work well too: regular code review, involving junior engineers into design and architecture reviews. All these indicate a good engineering culture that aims to grow engineers and not only ship features or fix bugs.
A good team leader builds a team of engineers of different levels. A balanced team has a spectrum of engineers, e.g. 1 junior, 2 mid, and 2 senior engineers for a team of five.
Why should you care about it?
With experienced colleagues you get to read clean code and understand the logic behind these lines. It's like learning to cook by looking at our meal - you can guess some parts but it doesn't mean you can cook it.
Daily interactions with senior colleagues will teach you to analyze different approaches, reason about them, and make the right technical decisions. It's a skill that usually takes years to develop. Having experienced colleagues around you can significantly shorten this learning time.
We act differently when we know that our ass is on the line. On the one hand, such situations put you under pressure and intuitively we want to avoid them.
On the other hand, such situations allow tremendous growth because they force you to operate outside of your comfort zone. Good companies know that and nurture the culture of accountability (usually also backed up with the safety nets).
Software engineering has many specialties: front-end, back-end, DevOps, databases, and many others. Many companies are hiring a full-stack though - what should you do?
Young engineers face this dilemma quite often - should I know a little front-end, back-end, and one type of database, or focus on just one area, say, front-end?
As you might guess from the title, I believe it's better to be an expert in at least one area than being a surface learner. Every product has a period of weird behavior before the stack is mature enough. For example, NodeJS server fails, say, once every 3 days, your database gets random timeouts on connections, or your modal dialog keeps getting stuck. Fixing inconsistent behavior requires a solid understanding of underlying technology and experience to have a hunch where to look for.
When such moments come, experts are in the limelight and save the day. This is why established companies are interested in hiring more experts rather than generalists.
That feeling when you see customers using the product that you've built is extraordinary. It's also a great responsibility and requires you to be more than just a coder.
To feel this, you need to master the disciplines you’re not necessarily an expert in. These often include understanding product value, task prioritization, engineering, UX, QA, customer support, and feedback, you name it.
"Real artists ship"
Having a proven record of a shipped product demonstrates your ability to get shit done and serves as a strong indicator of your abilities to the hiring manager.
Your true experience comes from the types of problems you solve. You can have 7 years of experience, but it’s not so relevant if you solve the same problem over and over again, e.g. building the same type of application or the same type of website (landing pages). You’ll get exceptional at these, but it will be hard for you to change the job. Most likely your next position will be almost the same but in a different company. Why? Because you have 7 years of experience solving the same type of problem and you are damn good at that.
As an alternative, you can have just 3 years of experience, but these 3 years are a rollercoaster - you get to build an application, set testing infrastructure, improve monitoring, then build a different type of application, and so on. Combining your domain expertise with a handful of problems you solve on the way gives you the true experience.
Being an expert and solving different types of problems makes you experienced
You might notice, I didn't mention the number of years of experience at all. You may meet a person with 2-3 or even 4 years of experience and be amazed by their achievements. Most likely, these 2-3-4 years have been very rich with all sorts of engineering problems, solving which this person grew to be this outstanding professional you want to be.
Stick for a while but leave early if it’s not a good fit.
It all takes time. Understanding the culture, learning architecture, building your reputation - it doesn't happen overnight.
Depending on the size of the company, this time might vary. As a rule of thumb, for the mid-size company, it takes about 3-6 months to onboard an employee and up to a year for a new employee to bring some meaningful results.
Sometimes, a person switches jobs every year or two. If this is you - it’s okay, but be ready to give a good reason why this happened.
Sometimes, it just doesn't feel right. Try to understand what's wrong and try to work it out. Try to be objective and see the full picture. There's a very good chance things will improve.
Sometimes, things don’t work out. And that's okay too. Accept it and move on. No point in staying to collect "the years of experience".
Still have any doubts about career choice? Reach out to me. Seriously, I mean it. We can schedule a call and discuss it further.