How I navigated the job hunt and landed my dream job
This article is about how I went through my job hunt for a full time position as a software engineer in New York City and ended up with my dream job. I had spent two years building my skills and had aspirations to work at a top tech company with a high bar for engineering excellence.
I knew this goal would not be easy to achieve, especially without a CS degree, barely having any network in New York City, and having to compete against engineers from top schools. It would be a long shot, and I was prepared for the long haul.
9 weeks later… #
I’m ecstatic to say that I’ve accepted an offer from DigitalOcean to work as a Software Engineer II from their NYC HQ!
This success came after countless study sessions, mock interviews, hours of practice, and facing numerous challenges & rejections. But I kept my spirits up and came out the other end happier than I imagined possible.
How did you go from start to finish? #
That question is what this article is all about! I’ll be detailing my preparation process for interviews, how I built my network, and managed myself during this job hunt.
That being said, everyone’s experiences are different and should pull from this article what they feel will benefit them. No two job hunts are the same and there are different factors in each one.
With that said, let’s dive in!
First things first: build a solid foundation #
Before anything else, it’s vital that you have a rock solid foundation in the fundamentals of software engineering. Instead of chasing after the hottest technologies, what’s important is to have the technical foundation needed to learn new things quickly and deeply.
In my opinion, the best way to do this is to pick one industry-proven language and stick with it while learning about variables, functions, tools, software design, databases, APIs, and building web applications. This allowed me focus on depth in my knowledge, proficiency in solving coding challenges, and experience in building quality projects.
To build my fundamentals, I chose to study at Launch School which offers an extensive curriculum and rigorous assessment process that ensured that I had deeply learned the fundamentals before progressing.
Build a project that impresses employers & engineers #
In the current day, there are multitudes of bootcamps and online tutorials that provide aspiring software developers with projects to help them land a job.
However, there is now a saturation in the market of developers with simple CRUD apps or clones of popular apps like Instagram, Netflix, Reddit, etc. These projects no longer impress employers or other engineers as they once did.
That said, many engineers need some way to evaluate you before giving you a referral and there is no replacement for showing your skills off with a solid project.
That’s why Gooi, Nick, and I built SpaceCraft, a real-time collaborative REPL that allows developers to write and execute code in the browser for Ruby, JavaScript, and Python.
It was an incredible experience, and also a TON of work. You can read more about how we built SpaceCraft in this article or read our case study.
We spent hundreds of hours researching how to build a REPL, enable real-time collaboration, use Docker to create isolated user sessions, and handle user requests with a proxy server.
Market yourself effectively #
While SpaceCraft may showcase our skills, I still needed to get people to look at it. Since I had relocated to NYC for my job hunt, my professional network was close to nil and I did my best to put myself in front of as many engineers as possible.
That’s why our team wrote our case study, an article on HackerNoon, and presented at Meetups. These efforts helped us stand out among the sea of other applicants and generated interest from employers & engineers.
Presenting at Meetups were a game changer for me as they got my name out there and procured referrals to several companies, along with giving me the chance to practice and refine my communication skills.
I also built a personal website and beefed up my LinkedIn & AngelList profiles in order to make it easier for prospective companies to find me and see my work.
Devoting time to market yourself and skill set through writing articles, presenting at events, and professional networking sites can lead to a big payoff in the interview process.
I had a big increase in the number of engineers and companies reaching out to me after seeing my updated profiles and hearing me present, and having a video of my presentation to include in my outreach emails resulted in a higher response rate and more interviews.
Reach out to engineers & companies #
In the same vein, I made sure to consistently reach out to engineers at companies I was interested in. Using LinkedIn Connect requests, I had over a dozen coffee meetings with engineers from DigitalOcean, Cockroach Labs, Oscar Health, DataDog, Peloton, and more. These meetings helped me get a feel for the job market in NYC, hear an insider perspective on company culture and teams, and gain referrals.
My advice is to approach these meetings casually and with interest in your fellow engineer’s work, career, and company. Don’t go in asking for a referral at the beginning, many times they will offer to refer you if you’re nice and the conversation goes well.
Another form of outreach that I did was more directly emailing engineers. Whenever I found a job posting that I really liked, I would reach out to an engineer who works at the company through LinkedIn Inmail, using Clearbit Connect when needed to find contact info.
In the email, I would include an introduction on my background, my most impressive project, a link to one of my presentations, and ask if they were open to chatting about the position.
This form of outreach lead to my highest response rate out of any other avenue with nearly 1/3 of all my emails getting a response. Remember, the job hunt is entirely a numbers game and it’s best to try out all forms of outreach to see which nets you the highest returns.
Study, practice, repeat #
That said, none of these efforts would go anywhere if I didn’t have the skills to succeed in the technical interviews. With a solid foundation in the fundamentals, I needed to spend my time solving coding challenges and studying topic relevant to the positions.
The types of questions and challenges you can face in interviews are VAST and often times you won’t know what to expect. Many of the top companies will focus on algorithms and data structures, while startups and mid-size companies may focus on more “practical” problems like refactoring an existing class or adding features to a basic project.
My advice is to study a variety of coding challenges and do your best to predict the questions they will ask you. For algorithms and data structures, my main resources for building a foundation and conceptual understanding were:
I also solved 2–3 problems a day on LeetCode for 5–6 days a week.
Many companies will also have a system design interview to assess what level to hire you for. If you’re aiming for mid-to-senior level roles, you’ll need to devote more time to this area.
I found the best resources to be Grokking the System Design Interview and reading various blogs on specific topics. Here are a few blogs I’d recommend:
Another very common step is to complete a take home challenge. The variety of these challenges can make it hard to prepare for, but there are some common topics. Several that I saw were:
- Build a RESTful API that handles several provided cURL requests
- Build a CLI app that stores inputs (like albums, artists, and release year) and allows users to retrieve them
- Build a game using React/Rails (ex: Tic-Tac-Toe, Blackjack, Minesweeper)
- Given a spec and example of the finished product, create a web page that is as close to pixel perfect to the example as possible.
The upside is that you have more time to complete them in the comfort of your own home, and there are lots of opportunities to impress by writing a comprehensive test suite, identifying & addressing edge cases, and finding extra touches to add.
Over my job hunt, I typically spent Monday-Thursday applying to companies, doing outreach, and solving LeetCode challenges or studying system design. I reserved Friday-Saturday to practice building a take home project. Here are some to consider:
- https://x-team.com/blog/how-to-create-a-ruby-api-with-sinatra/
- https://www.discoverdev.io/blog/series/js30/
- https://daveceddia.com/react-practice-projects/
- https://medium.freecodecamp.org/how-to-build-a-react-js-chat-app-in-10-minutes-c9233794642b
- https://codeburst.io/writing-a-crud-app-with-node-js-and-mongodb-e0827cbbdafb
- https://codeburst.io/learning-react-js-by-building-a-minesweeper-game-ced9d41560ed
- https://github.com/karan/Projects
To prepare for live coding challenges, I used Pramp for mock interviews 3–4 times a week, which improved my performances by leaps and bounds.
I’ve written before on this topic in Why You Need an Interview Script, but essentially when under pressure our mental abilities can suffer due to the feeling of being evaluated. The best way to combat this issue is to have mock interviews to recreate the experience until we’ve adjusted to it. Having a problem solving process also really helped to give me a leg up, and the best one that I’ve found is PEDAC.
Know what you’re looking for in a role & company #
With all that said, it’s important to take the time and consider exactly what you’re looking. Do you have a strong preference between backend, frontend, or full stack positions? How big of a company do you want to join? Which industries interest you? And in which direction do you want to grow your career?
Your answers to these questions can have a dramatic effect on which companies you choose to interview with. As software developers, we’re lucky to have no shortage of jobs and companies looking to hire, but it’s important to remember these points:
There is a large variety of roles and areas of work to choose from, and you should consider which areas of software development you want to specialize in.
You should try to find a role and company that you’ll be happy to work in for several years. My personal opinion is that it’s important to build your experience, credibility, and professional network as an engineer and it’s best to work 1–2 years minimum in each role, rather than job hopping every 6 months — 1 year.
Just as there are a lot of good jobs in software, there are also a lot of bad jobs that you want to avoid. Not every job will have you work on mature, experienced teams building ambitious, challenging projects. There are jobs in which you could mainly handle tedious tasks, clean up legacy code, or simply minor UI components day-in & day-out.
So take the time to think about what you want and list the things that you look for in your dream job. For myself, I wanted a role that focused mainly on backend development with the opportunity to:
- Learn a compiled language like Go.
- Work on distributed systems and possibly microservices.
- Join an experienced team of engineers to learn from.
- Have the ability to work remotely from time-to-time.
- Work at a company that values diversity and inclusion.
- Have benefits toward continued education.
I aggressively sought out companies that offered most of them and didn’t spend time applying to those that didn’t. While not every company would have everything I was looking for, I knew that I would be happier with the end result than if I just mass applied everywhere.
A side benefit was that by targeting the specifics of my next role, I was able to focus my studies on relevant topics that allowed me to improve with every interview, which I feel gave me the needed edge to land my role at DigitalOcean.
Manage the interview cycle #
The interview process for software development is grueling, and the potential for burn out is very high. Typically, the process can comprise of 3–5 steps, or even more, like so:
- Initial phone screen with HR or a recruiter
- Phone call with a company engineer or hiring manager
- Live code challenge with a company engineer
- Take home project
- Onsite at the company
- Potential offer extended
Exhausting, right? And every company is different, with some having only 1–2 interviews before the onsite and others taking months!
From my job hunt, I experienced a cycle that repeated itself. First, I would have initial phone screens with multiple companies. These would then lead to code challenges, take home projects, or technical phone screens. After several of these steps and opportunities getting filtered out, any onsites would get clustered into the same week or two.
Since the intensity of these stages increased the further I went in the process, I had less time for new applications due to increased studying, culminating with my onsites which had me studying full-time without sending fresh applications. If no suitable offers were extended, then I would start again with fresh applications and the cycle would start over.
Here are some tips when going through this cycle:
- Try to keep your application activity high throughout the cycle. It’s important to keep applying and doing outreach in order to fill your interview funnel with new opportunities.
- Have a daily goal of applications and outreach to complete. My daily goal for Monday-Thursday was to submit at least 5 applications (often with cover letters) and reach out to 5 engineers for coffee or to ask about open positions.
- Think critically about what to expect in each interview. You may get some details in your initial phone screen about the interview process, but always ask for more info in order to prepare.
- If you have a call with a CTO, know that it’s common for them to ask you technical questions regarding your resume as well as behavioral questions.
- Don’t schedule onsites on back-to-back days. They are by far the most exhausting steps and need more preparation. Always give yourself at least one day of rest in-between onsites to recharge, review topics, and mentally prepare.
Avoiding burnout through the process #
At this point, I want to address the importance of avoiding burn out during the job hunt. With the sheer number of interviews to complete and associated stress, it can easily feel overwhelming at times.
Don’t overwork yourself by studying & coding for 6+ hours a day on top of interviews, and dedicate time each week to disconnect and recharge. It’ll help you maintain your energy & focus as you steadily ramp up the intensity of later stage interviews.
At most, I studied 4 hours a day and prioritized deep work as described in Cal Newport’s Deep Work, which is where you focus intensely for a period of time on a task that is more difficult than what you’re used to without any distractions.
This meant solving algorithm problems or practicing projects that were harder than what I had already completed. This made sure that I kept improving my skills, while also identifying where I struggled and needed to study more.
And no matter how busy my week was, I always took at least one day off to relax and recharge for upcoming interviews.
In the end… #
I’m extremely happy with the results of my job hunt and feel that the approaches I detailed above worked well for me. For those of you out job hunting now, I hope that this article proves helpful to you. I also recommend reading the following article, which I found very helpful for my job hunt:
What it took to land my dream software engineering job — Sun-Li Beatteay
Good luck to everyone out there job hunting, keep it up!
Please let me know what you think in the comments! I’d love to hear more about your job hunt experiences and what has worked for you.