First and foremost, I want to say I am not writing this post to brag in any way. Unemployment is on the rise and many people are suffering as a result of current events. My goal is to provide hope to current job seekers by being transparent about my journey to becoming employed.
Before I jump into my journey, I want to outline the techniques I used to get a job. If you want to know more after reading through my techniques, you can look over my journey.
- Decide your focus. There are many types of development jobs out there. Front-end web development, back-end web development, embedded systems, machine learning, etc. Chose one and it will guide you through the whole job-hunting journey from what you put on your resume, the types of projects you build, and the interview questions you study.
- Build a small portfolio of projects. Not only are they great material for talking about during an interview, but they also work as a tangible demonstration of what you are capable of. If you are into front-end web dev, check out Frontend Mentor. Be sure to check out the Resources page!
- Create a killer resume. This is usually how you create your first impression, so might as well make it a good one. I found this article to be very helpful. Also, you can check out my resume here.
Create great online profiles
- LinkedIn is a good place to start. Thousands of recruiters use LinkedIn to find or learn more about promising candidates. It is also a great place to add professional information about yourself that may not have fit on your resume.
- AnglelList is another good one. This job board is great for finding small companies to work for. If you have industry experience, I highly recommend joining their A-list program. That is how I landed my current job.
- Reach out to friends about open positions at their company or a referral. They could be previous colleagues, classmates, or people from your boot-camp cohort.
- Attend meetups or conferences. In-person gatherings are not cool right now, however, people are adapting by creating virtual conferences and meetups. Find one that strikes your fancy. As an example, I plan on attending OpenJS World in June which is free:)
Prepare for interviews
- Solving technical coding questions. Sites like LeetCode and AlgoExpert are great for this.
- Go through behavioral questions. Passing the technical interview is not good enough. Some recruiters will ask behavioral questions on the initial phone screen. Here are some great tips on how to answer tell me about a time questions and here is one on why you need a story toolbox.
- Research each company once you have an interview scheduled. Look over the company's websites, read up on their company culture, and be sure to thoroughly read over the job posting. Having this knowledge will allow you to come across as eager to work there, plus you will have better questions to ask.
- Speaking of questions, have some ready for each person during the interview process. Software engineering interviews usually happen over multiple rounds. Be sure to have a few good questions to ask at each stage. I loved using the site KeyValues and this video to create such questions.
- Take notes during the phone screening. If you are interviewing with multiple companies, and asking questions at every stage(you should be), write the answers down. This helps you develop follow-up questions and prevents you from repeating yourself. I liked to keep track of all my notes in Notion
- Take notes after technical interviews. Each interview will be different. When you start this journey, don't expect to hit home runs every time. Take notes on what went well, what didn't, and what questions were asked. This will help you improve your interviewing skills and eventually land the job you want.
- Keep track of what stage each job application is in, as well as when you should expect to hear back from someone. Tracking the application stage helps you identify companies that are dragging their feet and whether or not you should reach out. Having a date for when you should hear back lets you know when to send a follow-up email.
Keep up with trends
- Take courses, read blogs, or books to stay current. This is a bigger time commitment, but keeping up with current tech will make you more employable. I love taking courses from Udemy.
- Follow thought leaders in your industry. They usually have a good pulse on what is trending and write blog posts on in-demand skills. Some ways you can do this is through Twitter, blogs, YouTube, or podcasts. For example, I love reading blog posts from Kent C. Dodds, Josh Comeau, listening to Syntax.fm, and reading tweets from some of these people and more.
My Job Hunt Begins
OK. Now that you know the techniques I used to get a job, I'm going to tell you how they helped me in getting one.
My decision to get back into the professional software development world started in June of 2019. By then I had spent the last six months traveling through Asia and working on some random e-commerce websites. I missed programming and working with other people towards a common goal. However, I wasn't sure if I wanted to do back-end or front-end web development. On top of that, all of my professional coding experience was in an older tech stack which no one was going to hire me for. It was time to learn some new tech.
For my first project, I decided to build a browser-based version of the Lost Cities board game. I am a big believer in speeding up the learning process by taking courses, so I built out the game by following the Test-Driven Development with Python, Flask, and Docker and Authentication with Flask, React, and Docker courses. The project took about 4 months to build(I was still traveling in Asia), but I did it! This was the largest project I had ever built and it was across the full stack. I learned so much building it like Docker, PostgreSQL, JWT authentication, web sockets, and more. If you are interested, you can check out the project here.
A month after completing this project, I hopped on a plane and headed back to the US from Vietnam. After a few days of jet-lag, a week of hanging with friends, and a couple of days stuffing my face for Christmas, I was ready to officially start applying to jobs.
I thought a good first move would be to reach out to a good friend of mine that works for Auth0. He had reached out to me while I was traveling and told me to hit him up when I was back in the states. I looked over the open positions at his company and asked for a referral to a full-stack development position. Not only did he say yes, he even asked if there were any other positions I wanted to be referred to. I linked him to a back-end developer position that sounded interesting as well as my resume. At this point, I was feeling pretty good and thought I was gonna be working in no time. Well, things did not go how I expected. A few days later he heard back from the recruiter that the full-stack position was just filled and she didn't think I had enough experience for the back-end position. Insert knife and twist 😭
Bummed out about my first rejection, and fearful that I would encounter more of the same, I decided I needed one more project to demonstrate I had the skills to pay the bills. But if I were going to work on a new project, I wanted to make sure I worked with the most in-demand technologies to increase my chances of getting hired. After a bit of reflection, I chose to work with Typescript, Node.js, Express, React, PostgreSQL, and Docker. Luckily my assumptions were correct according to this 2019 Stackoverflow poll. Also, you can read more on my new stack here.
Now that I had picked a technology stack, I needed a project to work on. I had just finished traveling so I thought I might build something related to that(I had no clue travel would be hit so hard). Indie Hackers is a site I enjoy browsing from time to time and I saw a project that sounded interesting. It allows a person to enter their home country/passport and then see a list of visa requirements for every other country in the world and the length of stay. I thought this would be a fun project to build and had some thoughts on what I could do differently.
For version one, I focused only on visa requirements and it took around 2 months to complete. During this time I took a couple of courses through Udemy, brushed up on SQL, and learned Typescript. I hosted it on a small VPS and if you are interested, you can see it here.
I should also mention, before shelter in place laws and during the development process, I attended a couple of local dev Meetups. Most were a bust, but I met a Facebook recruiter at one and he gave me some solid advice. I was a little worried about not having a job for the last 2 years and he said it was not a bad thing. I just needed to frame it positively and mention what I gained from the experience. He also said to have a good LinkedIn profile, and clearly state what I am looking for in my next position.
After this encounter, I knew exactly what I needed to do once I finished EZVisa. So as soon as the project was complete, I created version two of my resume, had my wonder girlfriend proofread it(thanks Jess 😘), and moved on to updating my online profiles. First, I tackled LinkedIn, then moved on to Angelist and applied for their A-List program. If you don't know, A-List is a service for people with two years of industry experience and are looking to fast track landing a job. Companies apply to you instead of you to them. Lastly, I decided to reach out to my friend at Auth-0 for another referral. I noticed the back-end position was still open and I wanted to give it another shot with my new resume.
A few days later, I received some amazing news. Not only was I accepted into A-List, but the same Auth-0 recruiter that turned me down in January now wanted to schedule a phone screening! 🎉 It was time to start completing some coding challenges. I started by doing a couple of easy level problems on Leetcode, however, I only got through two or three before my A-List profile went live and I was contacted by six companies!
Before responding to any of these companies, I knew I only wanted to work for a company I believed in. To make this decision, I read through their company website, all articles they sent, and the job description. If I didn't find their industry, tech, or solution interesting, I simply turned them down. No need to waste their time or mine. If I liked what I saw, I responded with a short personalized message on why I believed in what they were doing and when I was available to take a phone screen. This is how I scheduled every single phone screening. Some of the companies even thanked me for the kind words in my initial response.
While I waited for my screenings, I continued doing code challenges on LeetCode and AlgoExpert. LeetCode has way more questions than AlgoExpert, but AlgoExpert's questions are way more thorough. Each one has a detailed video explanation, 1-3 code solutions, and a video walk-through of the solutions! There is also some great System Design content and questions on AlgoExpert. In fact, I owe my current position to the SystemsExpert portion. My interview was very heavy on System Design. If you decide to sign up for AlgoExpert, use code
zngai-91 for 15% off. It helps out both of us 😊
A few more companies reached out, I repeated my investigative step and initial reach out. By the time I jumped on the phone with the recruiter, I knew what they did, who some of the competitors were, what round of funding they had completed, and I had an idea what made them unique. This allowed me to have questions unique to their business and great conversation with each recruiter. I made sure to track everything in Notion. Finally, at the end of the conversation, I asked what was the expected next step, how best to prepare for the technical assessment, and when I should hear back from someone. Recruiters want to help you succeed so I say let them.
In the coming days, rejection messages/emails started rolling in from the companies I had taken the technical assessment for. I wasn't surprised given I was not able to submit much code for some out of being so nervous due to the timer. One of those rejection letters came from Auth-0. I didn't get a chance to complete the coding assessment with them due to a hiring freeze thanks to COVID-19.
However, as the title of the blog post suggests, there is a happy ending. There was one company that did not subject me to a coding test with a timer and instead asked me to code a small API given some data and a UI mock-up. From there I spent my remaining interview rounds doing system design which was tough but fun. Eventually I made it to the last round and got an offer! Here is a snapshot of applications in Notion.
Here are some stats for those that are curious.
- I was contacted by 16 companies on A-List
- I turned down 8 without a phone screening
- Of the 8 I responded to, I had a phone screening with 7
- Out of this 7, I went through the first tech interview with 4
- Out of these 4, I received an offer from one
- I was also contacted by a few recruiters on LinkedIn but nothing worth mentioning.
If you take away just two things from this post, it would be to be genuine and prepared. It was my level of preparation and interest in the company that ultimately won over my current employer. Happy job hunting!