In my previous article, I explained my motivation for leaving Engineering to become a web developer. In this article, I focus on how I went about achieving that goal. I describe the challenges I faced, particularly as an immigrant in the UK. I hope this helps readers looking to make a similar career transition.
Towards the end of 2016, I was nearing the end of the graduate scheme at a leading Aerospace Engineering company. I was looking for a three-month attachment where I’d have an opportunity to code and luckily found a data parsing task for the Aeroacoustics team. I hurriedly taught myself Python and after a couple of failed iterations, had a working prototype ready. I learnt a ton! This experience inspired me, more than a year later, to write about parsing text with Python and getting started with Python.
I then joined the Aeroacoustics team as a work-stream lead. I spent about half my time doing project management - not something that excited me. However, I also had fun, analysing noise data using Python. For a whole year, I focused on developing my Python and data analysis skills. I created my own Python package to make my work easier. The package grew to thousands of lines of code. 😱 I made lots of rookie mistakes such as ignoring the single-responsibility principle and not writing any tests. Pain was had, and lessons were learnt.
Towards the end of 2017, I attended PyCon UK and boy, was it an eye-opener! I had barely scratched the surface, and there was so much more to learn. The conference got me interested in blogging about tech. I created a new blog with a first entry about PyCon UK 2017.
The conference also inspired me to get involved with the developer community at my workplace. I created a Yammer group at work for Python developers. I also started a monthly Python lecture series at work. I invited developers at my company to prepare talks. I handled all the advertisement, send out meeting invites and handled the recording/publishing. I even delivered a few talks myself. I met a lot of inspiring programmers via that Yammer group. By the time I left, the group had grown to some 600 members.
I got interested in web development, having been inspired to check out React by one of my colleagues. My learning approach for new technologies is to watch courses, e.g., on Udemy, and then find a personal project to experiment with the technology and deepen my understanding. As one of my first projects, I made a website for the Python lecture series. It was just a simple table of previous lectures with links to slides and recordings. Following that, I made another app with a navigation bar and videos to explain a certain workflow to employees.
All this while, switching careers is not something I planned to do. I loved (and still do) love Engineering. However, I was preparing for that eventual transition by learning software development fundamentals. The experiences I described above became useful material for my CV and interviews as well.
This was a year and a half after I first started learning Python.
LinkedIn jobs was the only job listings site I
used. I could see that the big tech companies were advertising on LinkedIn, and
I also liked LinkedIn’s clean UI. I set up an email alert for new jobs that
matched keywords like
Front-end etc. so that I could apply
for jobs as soon as they were posted.
At first, I didn’t advertise the fact that I needed a visa to recruiters. I waited until they asked me about it because I was keen to get some interview experience. However, nearly every company was rejecting me solely because of this one factor. Therefore, I stopped applying to small companies. Most of them are either not on the register of sponsors or unlikely to sponsor visas due to the financial and bureaucratic burden. To be completely transparent, I added the following statement on my CV:
I require sponsorship to apply for a Tier 2 (General) visa to work in the UK.
Once I decided to apply externally, I thought it’d be nice to have something to show on my GitHub profile. I stopped investing my own time into side projects at work. I spent more and more time doing courses on web development and working on personal coding projects. I also made some sacrifices. I dropped nearly all my hobbies, side-projects and volunteering. I became even more of a social recluse. I spent most evenings and weekends studying and coding. In a typical week, I would spend about 40 hours at work, and then another 10-20 hours learning/coding/applying for jobs at home. 😫
I made two apps: renting vs. buying a house and ssh-key-manager. I also wrote on my blog. In particular, I wrote about the standard error of the mean and the statistical t-test used to compare sample means. These were interactive articles, made possible via Observable.
There are generally two parts to an interview.
I put the values one first because it’s hard to teach adults good values. It’s a lot easier to teach technical skills. For example: putting the customer first, treating colleagues respectfully, being open to feedback, treating work as fun. Good companies know their core values, and they make a conscious effort to hire people who have a similar set of values. Employees reinforce these values in each other on a day-to-day basis as well. Check out the values for the following companies:
I usually prepare for a values interview by studying the values of the company. Luckily for me, most big tech companies have values that I easily identify with. I prepare answers to questions around those core values, drawing on my experiences. I use the STAR technique to tell the story properly.
I write down my answers in a git repo which allows me to refine them over time and reuse content for interviews with other companies. Unfortunately, this is a private repo, but here’s an example.
Amazon Principle 10 - Learn and Be Curious. Leaders are never done learning and always seek to improve themselves. They are curious about new possibilities and act to explore them.
For the bigger companies, I looked at blogs or YouTube videos to help prepare for their interviews. For example, interviewgenie is an amazing resource to help prepare for Amazon interviews. I also practised my answers with friends. It not only helps with flow and confidence, but good friends will also tell you when your answer falls flat. 👎
I want to stress that preparing for the values interview isn’t just about the one or two weeks of preparation. I was drawing from four years of work experience for my answers.
For me, the values interview feels like the easy part. I wouldn’t apply to a company whose values didn’t appeal to me anyway. I care about values so much that I even have my own list of values.
# https://www.hackerrank.com/challenges/fizzbuzz/problem # The fizzbuzz problem is used to filter out the majority of applicants. # It tends to be used within online assessments prior to the interview. for fizzbuzz in range(51): if fizzbuzz % 3 == 0 and fizzbuzz % 5 == 0: print("fizzbuzz") continue elif fizzbuzz % 3 == 0: print("fizz") continue elif fizzbuzz % 5 == 0: print("buzz") continue print(fizzbuzz)
I have mixed feelings regarding the coding interview. On the one hand, problems I face day-to-day as a software developer have little relation with typical coding interview problems. Yet, it is still a useful tool to understand the problem-solving ability of a person.
I also learnt that I had to prepare for it specifically. Learning React, for example, will not help you pass a coding interview. I do all of my coding interview preparation in bluprince13/coding-interview-prep. In the README, I also provide some guidance on preparing for it.
In Feb 2019, I had my first on-site with Spotify, a
company that I adored. They have five core values, and one of them is
We’re playful: We don’t take ourselves too seriously. How cool is that? 🤘
The on-site consisted of the following:
Here are some self-reflective notes I made following the on-site:
I was heartbroken when Spotify rejected me. 😭 I did get some feedback from the recruiter. My interviewers thought that I was a great fit with the company’s culture. However, they felt that my lack of experience within a software development team was too much of a risk. My recruiter recommended me to get a few months of experience elsewhere and try again with Spotify.
The feedback was fair. However, I also knew it’d be impossible for me to find a
practice job at a smaller company as an immigrant. I was in a catch-22. Big
companies wanted someone with experience. Small companies couldn’t sponsor my
Rejection after rejection, I sank into depression for a few months. Around the same time, I also had to deal with sciatica - searing pain in my lower back and right leg. I couldn’t walk nor sleep well. Work was also stressful. Mental health-wise, I felt like I was near breaking point. I leaned on my friends and family for support. Encouraged by a friend, I signed up for a few counselling sessions which thankfully gave me some relief.
By October 2019, nearly eight months after my first on-site with Spotify, I was beginning to think that maybe it was time to give up. I had probably had some 150 rejections by then. It might be better to wait for my UK residency a year later before carrying on with the job search. Then, like a miracle, I got a chance to interview with Amazon Prime Video. Amazon is one of my favourite companies. As a consumer, I don’t trust any other company half as much as I trust Amazon. I was excited about potentially working for them, but worried about my chances.
I had four interviews in one day, each with a single interviewer. Each interviewer tested me on both coding and values.
I was a lot better prepared for this interview. I had learnt from my failures with Spotify and telephone/video interviews with other companies. On 9th October 2019, my recruiter called me and informed me that I had passed. It was, without a doubt, the happiest day of my life.
One of the things I got right was to start applying from the get-go. I didn’t wait to feel like I was ready like I see some of my friends do. I developed my skills alongside actively applying for jobs. Whilst it was painful to get rejected, I learnt a lot from each failed interview, such as what skills to improve/develop. For example, seeing so many full-stack jobs out there, I started doing courses on backend development, databases, and cloud infrastructure. Even though I was initially only looking for a front-end developer role, I ended up becoming a full-stack developer instead.
I feel so much anger for the way that immigrants are treated. Immigration policies are legally mandated racism. Not that I’m ungrateful. I feel privileged to have had such unique opportunities as an immigrant in the UK. However, limiting immigrants’ freedom to change jobs and trapping them in a position feels inhumane. Something needs to change.
I had a horrible experience with independent recruiters that match jobs with candidates. I was just a product for them, not the customer. I had much better results in applying to companies directly.
I had very little to show on my GitHub profile. I wish I had spent more time doing projects than just passively learning.
Looking back, I wish I had worked a lot harder. I wasted so much time being depressed and feeling sorry for myself. However, as much as I’d like to be one, I know that I’m not a machine. As a human, sometimes it’s okay not to be okay. 👌
Phew! I know this was long but, hopefully, this gives you a comprehensive enough view. If you have any questions, please comment below, and I will happily answer them. Good luck with your job search! I hope you find something that makes you happy. 😃