This post is about getting hired in Europe. Hiring practices in other parts of the world may differ. This post reflects my personal journey and is by no means a definitive guide to getting hired.
Around eight months ago I started feeling like I'm stagnating at work. My commute was also seriously wearing me down. And because I was already enjoying 2 days of homeoffice per week I decided to try switching to a fully remote position.
At that moment I had already received and declined a couple of offers from local companies and as a result felt pretty confident in my skills.
I was wrong.
When applying to remote positions you are essentially competing with hundreds of different candidates from around the world. Some of them will have more experience. Some of them will have impressive open-source contributions. Some of them will have serious background in design. And some of them will have much lower salary expectations because of their location.
Suddenly what was considered impressive in your local job market becomes average at scale.
I never struggled with being hired in my life so the barrage of constant rejections was totally new to me. I became really discouraged by these rejections and even thought about giving up on this idea altogether. I thought maybe I don't have it.
Job-hunting requires a completely different mindset though, let's call it "dungeon grinder". You wander into the dungeon with basic gear, die, lose nothing but gain valuable experience in the process.
The idea is that you apply to roles you may not even want just to score an interview or two, then go on those interviews as a way of getting familiar with the interview process and the kinds of questions you'll need to be able to answer
This quote from swyx sums it up pretty nice.
You can learn so much on the internet for the low price of your ego
You'll have to grow a thick skin though. Prepare to be rejected without feedback via automated email messages. Prepare to be ghosted. Prepare to be ignored after you wrote a perfect cover letter where you describe your favourite science fiction book (yes, it was one of the questions).
I am talking about senior positions here. In fact, junior remote jobs are very rare and I wouldn't recommend it anyway.
- Leetcode/Hackerrank challenges
- Tricky questions about prototypes, events, closures,
- General functional programming questions
- General system design questions
- Practical event loop exercises
- Some OOP design
- Describe a challenge you encountered and how you solved it
- Describe different CSS methodologies and their pros and cons
- Why are ES6 modules better than CommonJS/AMD?
Most of the frontend developer positions required React knowledge, so I was also asked some React-specific questions about immutability and different state management strategies. Many wanted to know how I feel about Redux.
I was also asked how I would approach debugging and fixing a performance problem in a React application.
Most of the interviews also involved 1-4 hour take-homes. These take-homes were usually pretty reasonable, like creating small single-page applications which meet specific requirements. Some of them required a candidate to not use any frameworks. Some required usage of Redux and redux-saga. Once I was asked to use styled-components and React Hooks.
One of the most popular questions I got after completing a take-home was "How would you scale this?" or "What would you change if you had more time?".
Overall I felt like the whole process was not as "broken" as we often read online, although I did encounter some questionable stuff along the way. For example one company invited me to their slack workspace with 100 other candidates and an #introductions channel. And everyone was sitting there writing stories about how great they are compared to others.
Another company only wanted candidates with "25+ stars github repo".
My main problem though was the following: I just wasn't as good as I imagined.
You will get bonus points if you have another field of expertise. Here are some of the combinations I've encountered:
- UI/UX + JS
- Ruby + JS
- PHP + JS
- AWS stuff + JS 🤔
So typically experience in some backend technology (Node, Ruby, Python, PHP) or having an "eye for design" will open up a lot more options for you.
Framework knowledge is almost always mentioned and React is dominating this space. I don't have the exact numbers, but you can go to weworkremotely and compare search results for different frameworks.
After accomplishing nothing for several months I decided to take a look at my resume from outsiders perspective. It wasn't that impressive after all. I had one large challenging project available online, but that's it. Others were mostly intranet apps and I didn't mention them in my resume, which in hindsight was wrong.
I also didn't have any significant online presence and notable side-projects. All in all I didn't really stand out from the crowd.
After reading this great blogpost I decided to adopt a different mindset and created a very unoriginal plan.
- Revamp my resume
- Fill my github profile with some notable projects
- Create personal website with a blog
- Prepare and record a meetup talk and publish it on youtube
- Send a conference talk proposal
I basically removed all the unnecessary junk and tried to squeeze out the most value out of the projects I participated in.
- Recorded screencasts of projects that weren't freely accessible
- Described in more details what I accomplished and which technologies I used in these projects
- Removed any mentions of my nonexistent CS degree
- Completely removed the "skills" section
- Removed any mentions of bullshit jobs I did at the start of my programming career
In the end I reduced my resume to a single page.
We as programmers often neglect the power of networking. What the hell is networking anyway?
the action or process of interacting with others to exchange information and develop professional or social contacts
The first thing I did was I found this incredible Reactiflux Discord community. There I sought advice about my resume and career in general. I also asked questions about functional programming, React internals, Redux, TypeScript and a bunch of other things. From time to time I also managed to be helpful to others.
Cole Turner suggested me to create a Twitter account, which I though was stupid at first, but in the end turned out to be a great advice. I started using it as a technical notebook where I express my thoughts about things I learn and build.
Around this time React Hooks were announced and I became completely fascinated by them. I began experimenting. It will probably sound funny, but for me the announcement of Hooks was the catalyst for becoming a better developer. I acquired tremendous amount of knowledge in the process of learning how they work and how they can be used and also experimented with a bunch of different technologies.
When I noticed that komoot was looking for a remote React developer, I became kinda sad. I've been a regular user of this app for several years because of my cycling addiction and always admired how it was built. Working at such a company would be a dream coming true, but I just wasn't sure I was good enough.
So to test myself I decided to build a small app where I'd replicate some of komoot functionality. Instead of trying to design the whole system at once I split it into multiple smaller subtasks and focused on a single thing at a time. That's how this project was born.
Companies love it when you create projects specifically tailored to getting their attention. You also have more chances if you have someone "on the inside".
I am starting in May.
Being good at tech is not enough for remote work, you also have to be a good communicator. You'll need to show your potential employer that you are responsible and have great self-discipline. Your employer is essentially trusting you to do a good job.
I preferred fully-remote companies when applying, because they are usually better at this whole asynchronous communication thing. Being one of the few remote developers at a company without remote culture can be challenging.