Engineering

How to become Junior Elixir Developer with no Elixir knowledge?

Prolog

Many programmers and programmers-to-be dream of working on exciting projects with use of latest technologies, but reality can often be really disappointing. Either you can't find a job or you find one with the result of landing in code-maintenance of punched cards from 80s. The second option may be really great if you only want to work from 9 to 5, go home (or transfer from desk to bed) and forget about another day of work. But what if you have bigger ambitions and want not only to develop products, but also develop yourself? I guess you wouldn't be really happy in such a situation. In this article we’ll go through a tale of how I landed in my current role - from application to present days.

Application

Before starting my job at Appunite I used to work in two different fields - the first one was backend development with Java and Spring, the second one was Cloud Automation using mainly Python. I would lie if I said it was as bad as mentioned punched cards. But I felt that something was missing. This piece of puzzle was using something new, exciting and interesting for development of a product that I'd also be happy to use. That's when I heard of Elixir! I was astonished by its features and possibilities it gives to programmers. And that's also the moment when I found out about the Elixir Developer job at Appunite. The thing that really got me was NO ELIXIR EXPERIENCE REQUIRED (OTHER LANGUAGES KNOWLEDGE IS OK), or something like this... Instantly, I knew I should apply! I sent my CV and in a blink of an eye I got a phone call from Appunite's People department representative - Paulina. The call was a screening that most of us know well - few words about company, expectations, brief chat in English (since the company is based in Poland and that's the language we mainly communicated in during the screening).

After some time, I got a next call from Paulina informing me that I had qualified into the next stage - technical interview. At the time, I wasn't aware there was a TRAP waiting for me.

Technical Interview

A day before the technical chat, I was asked to install Elixir 1.10, since there would be some task to solve. I had been already trying to solve some things in Elixir, so thought I'd deal with the challenge coming.

The time for the interview came, I've entered an online meeting with Natasza (Team Leader) and Damian (team's Main Backend Developer) and that's when the mentioned trap came to me - I was about to solve a task during live coding. Everything would be easy, but the task regarded developing a simple CRUD app with use of Elixir OTP - it would have to store state, but since Elixir is purely functional, it is not as easy, as modifying some arrays or maps. At the moment, I didn't know anything about GenServer's, Agent's, Supervisor's and other magical OTP stuff. Familiar solutions that came to my mind were obviously DBs and files! But I realized that I would only dig my grave using it during a live interview. Having no idea about state management in Elixir, I only managed to solve maybe 2 basic tasks that involved listing entries.

After the time of live coding part finish came, I felt defeated and had no hope for being a promising candidate. We briefly chatted about soft&hard skills - Agile, SCRUM, database indexes, microservices etc., day-to-day work at Appunite, wished each one a good day and finished the meeting.

I don't like not knowing how to solve things - that's why I decided to read about Elixir OTP and try to solve the tasks again, without time pressure, on my own. It came out that I was able to solve this in something like ~1h. The fact that I've solved it so quickly after the interview, made me even more angry at myself for being so stressed during the big time. There was nothing more I could do - only wait for a response from Appunite.

Offer

A few days after the interview I got an unexpected call from Paulina. I thought I could already figure out what she was about to say: "Thank you for your time and interest in our offer, but we are looking for someone more experienced. Hope we will stay in touch for future openings.". But what she did say was exactly the opposite - "We're happy to invite you to our team.".

YES!!! I'm in. I couldn't believe it. I felt really bad about my live coding performance, but the company still gave me a chance. Couldn't wait to start this new exciting role!

After accepting the offer, I got in touch with Damian, who gave me some directions - what to focus on while digging into Elixir libs, etc.

First days in new role

After getting the computer, mandatory access privileges and being introduced into work environment I was ready to start this new adventure - working as an Elixir Developer!

First tasks were both easy and not-so-easy fixes, since I had to dig into our codebase and get more confident about it. I had a first opportunity to work with teammates accountable for applications that consume our backend API - fantastic way to get acquainted with them while learning codebase and new things. The cooperation was amazing and I couldn't dream of more friendly coworkers - perfect atmosphere to work in.

Submitting solutions to fixes mentioned included creating Merge Requests with description of both problem and solution. After it, the Code Review came into the game and allowed my teammates to point me into the right direction - no better way to learn good practises than having to use them! Of course, at the time I had to consult other #backendboyz on nearly every task, since having poor knowledge about certain parts of our app. But with little steps, the independence was coming.

Now

Writing this article, I've been working for ~3 months and started to develop a new feature fully on my own. I no longer need to ask guys about everything that I'm about to do, but am consulting approaches that might be not so obvious. I also feel like I'm providing a good insight during conducting code reviews of other's code, discussing new features and approaches.

I'm really proud of this short path that I've walked to reach the current quasi-independence and hope that I won't stop progressing in order to someday be able to help Junior Developers starting their adventure at Appunite.

Conclusion

As you can see, you don't have to be fully confident in a technology to start working with it - curiosity and desire to become better play a major role here! Just get your hands on it and have fun, create, play around - it does not bite. Whatever the outcome is, there's always one fantastic result - you've learnt something new! And maybe you'll get a dream job? 😄