From senior to junior in one day - looking back at my first days as a professional developer
Tags: career, sideprojects, beginners, codenewbie
Published: 2019-10-03 04:35:15

The beginning of October marks my 3rd anniversary in Pipedrive, the company I work at. Because of that, I've found myself thinking about my junior-days.

{%youtube Qe-BhypNKCE %}

Between 2009 and 2016, with some exceptions, I was quite active in freelancing as a designer and a developer. It was a great way to make money in both high-school and university, providing me with an opportunity to communicate with people and solve their problems. During that period, I created more than 50 (mostly Wordpress) websites.

During my army service(which is mandatory in Estonia), I started to understand that freelancing gets me only so far. The websites created were usually not very complex technically and designing things didn't give me the chills it used to. Because of that, I made a decision that after the army service, I'll get a full-time job as a developer(I had tried working as a designer in 2014, but found I like development more).

Applying for jobs was fun. My CV was titled "Senior front-end-developer", although I could've also named it "Senior full-stack developer", as I was an expert in HTML, CSS, Javascript, PHP, MySQL, MongoDB. Also, there was an extensive porfolio to prove my skills. 

I approached various agencies who offered me a great salary for developing simple Wordpress sites. As I wanted to improve myself as a developer, I also applied to companies that dealt with more advanced technical problems. After completing a test-job for one of them, I got feedback saying I'm a junior at best. Finding it hard to believe as the aforementioned agencies saw me as a mid or senior, I also applied to Pipedrive, who was(and still is) a dream employer in Estonia.

The first interview went great. That was followed by homework in Backbone. As I had never written Backbone before, I just grabbed a book on the subject, learned the ABC and used the acquired knowledge to deliver the solution. Going back to the second, technical interview, I was confident. We reviewed my test-job and well...It wasn't as perfect as I thought. It worked well but interviewers brought out different edge-cases where things broke. Also, the code structure was lacking. Nevertheless, after some extra interviews, I was offered a job as a junior front-end developer.

There was a tough decision to be made - accept a great salary and continue working on creating simple Wordpress websites for agencies as mid or take a junior role in Pipedrive. In the end, I thought there must be a reason why some places see me as a junior and I acceped Pipedrive's offer.

> My first thought was '...task for adding a query param? I can do it in 2 minutes'. A couple of days later - the task was still in progress.

After a couple of weeks of on-boarding, I got to work. The first task was something about checking the existence of a query parameter in our monolith. My first thought was "...task for adding a query param? I can do it in 2 minutes". A couple of days later - the task was still in progress. I had never heard of or used things like unit testing, Git, continuous integration, code reviews etc. Also, setting up the whole development environment took some time. There was just so much information coming in. In the end, I got the task live and damn it felt good. For others, it was some trivial one-liner, but to me, after going through all the hassle of testing, getting code reviews etc, it was a true accomplishment.

> I finally understood that my previous experiences as a freelancer may give me tons of technical knowledge but not all of them are applicable to my job. And those which are must be polished and developed further.

During the first 4 months, I got to develop lots of front-end. Both smaller bugs and new features. I remember constantly having a feeling of "give me bigger tasks, I can deliver". For example, a task where I had to implement a header that becomes fixed when scrolling past its position using Javascript and CSS. I gave an estimation of a couple of hours for the task. Easy. The reality was that after giving the code to review, comments about code structure, variable names, using repository-based standards instead of my own logic started to pour in. Also, during the testing phase, we discovered different edge cases that didn't work. I remember one of the developers saying "It's not enough to make things work. They must work flawlessly". I guess that's when it hit me that working in a team while developing a product is not about coming up with quick solutions. It's about creating solutions that are maintainable, structured, follow standards set by the team(or company) and most importantly- they work. After that experience, I finally understood that my previous experiences as a freelancer may give me tons of technical knowledge but not all of them are applicable to my job. And those which are must be polished and developed further.

My manager recommended me to read different books, work on hobby projects and use each task as an opportunity to learn. And so I did. Books like Clean Code, Code Complete, Eloquent Javascript, Javascript the Good Parts(as we use Javascript mainly), Javascript Patterns, Building Microservices etc gave me lots of theoretical knowledge. And this knowledge I applied in my freelance works, hobby projects but also daily tasks.

> ...just step away from your computer, clear your head and continue working the next day

I also started to put in more extra hours - I didn't leave work before I had reached a milestone, even if I was tired or completely stuck. Yes, it was good as I got more time to explore different solutions to problems, but looking back, I'd recommend not do that - it's much more effective to just step away from your computer, clear your head and continue working the next day.

> Also, going to unfamiliar people with unfamiliar problems was truly frightening. Nevertheless, the more I did those things, the more comfortable I felt

As time passed, I became more confident and started working more on backend solutions which required more communication with other teams. I noticed that my ability to describe technical problems and ask questions needed improving. Also, going to unfamiliar people with unfamiliar problems was truly frightening. Nevertheless, the more I did those things, the more comfortable I felt(I still suck in describing technical problems though).

After being a junior for almost a year, my manager recommended me to take on more responsibility. As I felt quite comfortable in our NodeJS and Redis app, I decided to take on a small task related to the routing system, during which I completely refactored it. In the code review, one of my team mates asked me "Wait! You're still a junior? Junior's don't write code like that". That phrase was the best thing that had ever happened to my development career. A month later, I was promoted.

My junior-days experience taught me that there's a huge difference between working on projects on your own and working in a team. It's easy to call yourself a senior developer when all you do is building things on your own. It's a completely different story when working on something that requires collaboration, includes testing and reviews and has an impact on real-time users.

> Being a junior is a rollercoaster - you are afraid, you must learn a lot, you experience failures and successes multiple times a day.

Being a junior is a rollercoaster - you are afraid, you must learn a lot, you experience failures and successes multiple times a day(even when you're an experiences developer). The environment you're in is full of unknowns, but with the help of people around you and hard work, you'll survive! Just make sure you'll do your best!

I've been in Pipedrive three years now and I feel I'm a strong mid-level developer. Nevertheless, I always try to improve myself - read books, articles, documentations etc. Never get lazy, never stop learning! Ask questions, make sure you understand stuff. Find your weaknesses, improve them. Find your strengths, improve them even further!