Don't settle in your first job


Today I wanted to share my thoughts and experiences about why it is important not to work in one place for too long, especially at the beginning of your career as a software developer.

I have 3 years of commercial work experience and I currently work for my fourth company (including one internship). Even though I might get pigeonholed as a “job hopper” by some, I will tell you why this worked out well for me.

Below are several advantages of changing your job every now and then:

1. Work with different technologies

It is easy to get stuck working with a particular software stack encountered when joining the company. While it might be advantageous to become an expert in a specific language or framework, it might also set you up for failure if the technology happens to be on its way to extinction.

In my view at the beginning of the career it is good to be able to “touch” different areas: frontend, backend, SQL, maybe even some DevOps etc. It helps you understand how software works on all levels.
Also, it allows you to learn which type of programming you like best and what you can possibly later specialize in.
This way you also get out of your comfort zone by being exposed to new challenges, which makes you grow faster as a programmer.

If you can do all that in your job, it’s fine. But in many companies, especially the big ones, there are very clearly defined roles, i.e. “SQL Developer”

  • the guy who deals with the database code only. If that is your case I recommend you switch teams or even change jobs to try your hand at other areas of the software stack.

2. Experience diverse company cultures

If you switch jobs you will learn how different organizations operate and what suits you best.

For instance, I worked in a software corporation, in a big public financial institution, at a small software house and at a startup.
I’ve experienced cubicles, open spaces and small team rooms.
I’ve reported to different types of managers, both technical and not.
I’ve seen a formal chain of command of a corporation and a much flatter structure of a small firm.
I’ve felt the difference between working on a software for a customer and developing your own product.
I’ve worked with contractors hired for a specific project and with employees devoted to their company.

In summary, by deliberately “trying out” different types of companies at the beginning of my career, I’ve been able to quickly define what works for me and what doesn’t. As a result I can now spend the rest of my career working in optimal conditions instead of wondering what it would be like someplace else.

3. See different attitudes to software development

I’ve seen different approaches to programming in general: the tools, the practices (code reviews, pair programming, CI) - or their lack, the methodologies (waterfall, scrum, kanban), the languages, the frameworks.

At my first internship we did not use version control, let alone any continuous integration or other fancy stuff.
When I collaborated on a project with a colleague, we would sit down at the end of the day for 10-15 minutes, sometimes even half an hour, and manually merge changes made by one person to the other person’s code. How did we copy the code? Well, with the mighty USB stick, of course!

Can you imagine what kind of software developer I would have been had I stayed there as an employee? I would probably have learned about Git at some point, but when? And what about other good practices that were not used there?

Thanks to the other jobs I had I’ve been able to learn about various good and bad practices and their effects on the teams and the software they produced.
With that experience I am able to help the teams I work in now by convincing them to adopt the good practices and eradicate the bad ones.

4. Get a big raise

When you negotiate with your current employer your raise will usually be determined in terms of a percentage of your current salary. This makes it very hard to make a big “leap” in compensation, say a 50% raise.

However if you apply for a new job, the company knows nothing about your previous salary. Therefore you start with a sort of a “clean sheet” and the numbers depend only on your experience and performance during the recruitment process. At least that’s the way it works in Europe - I know that in the US the potential employer may ask for your previous salary, which makes it similar to negotiating with your current company.
If you can successfully “sell yourself” and navigate the recruitment process correctly, your future salary usually comes down to your negotiation skills.

I know of people who quit company A for company B and then returned to company A several years later earning 100% more, which would have been impossible had they stayed in company A the whole time.
This is not to say that you should hop jobs just for the sake of earning more, but to show you that staying in one company for a long time can usually be financially disadvantageous.

Summary

These are just some of the benefits to switching jobs often at the beginning of your career. Obvoiusly, there are also downsides, such as having to actually search jobs and going to interviews, but in my opinion the merits outweight them.

Also, at the end of the day it does not matter if some recruiters qualify you as a job hopper. There is strong demand for programmers, IT is a candidate’s market and they will be recruiting you anyway. What matters is all the other gains for you as a result of having experience working in several different places.

Do you agree with my arguments? What are your experiences?
Make sure to let me know in the comments.