What it took to land my dream software engineering job

Written by SunnyB | Published 2018/03/02
Tech Story Tags: programming | digitalocean | jobs | dream-job | engineering

TLDRvia the TL;DR App

He may not be a software engineer, but he perfectly captures my excitement

Even before I started my job search in January 2018, I knew I wanted to work at DigitalOcean. The culture, the learning opportunities, and the chance to work on a product I believed in. It was everything I wanted in my next role.

But I knew it’d be a long shot.

The quality of engineering and scalability at DigitalOcean is remarkable.

As a software engineer without a CS degree, I was not the best candidate on paper. Furthermore, I moved to New York City only 6 months prior and my network was pretty much nil.

I would need to prove that I could outperform engineers with advanced degrees without relying on any string-pulling.

I had my work cut out for me.

Fast forward 8 weeks

It is March 2018 and I have accepted an offer from DigitalOcean to work as a Software Engineer II from their New York office.

Credit: giphy.com

I also had considerable success during the job hunt.

Of the 74 companies to which I directly applied, I had:

  • 20 phone screens.
  • 15 technical screens.
  • 8 onsite interviews (with more scheduled).
  • 7 offers.

That is a response rate of ~27% for direct applications and ~10% of applications turned into offers.

So what happened?

Good question!

This post will go over what happened in those 8 weeks and how I was able to get my dream job.

These are not going to be the typical “Don’t Give Up!” and “Stay Motivated!” pieces of advice that I read so often. While those idioms are nice, they are not particularly useful.

I am going to outline the detailed steps that I took to market myself, prepare for interviews, and compete with the other engineers on the market.

I hope people reading this can glean some useful insights. Especially those with non-traditional backgrounds.

Warning: there are no shortcuts

If you’re searching for “How to get a job in X months?”, this isn’t it.

I have committed the past 2 years of my life to becoming a software engineer. This has included freelance work, a brief stint as a web development intern, and intensive self-study in the form of Launch School.

I have some novel tips on how to promote oneself, but there isn’t a replacement for mastering the fundamentals — not even a fancy resume and cover letter.

I’ve learned that the hard way.

If you’re having trouble with technical interviews due to lack of experience and/or knowledge, dedicate this time to addressing those mental gaps and studying core principles. Might I even suggest Launch School?

A strong engineering foundation will put you in the 90th percentile of job candidates. This article is meant to take that foundation and make it marketable.

If that sounds like what you’re looking for, enough small talk.

Let us begin.

1. Build a badass project

Conclave in action

I’m not talking about a Trello-clone or another CRUD app. Everyone has those in their portfolios. I’m talking about something that takes serious research and shows off your technical prowess.

For Nitin, Elise, and myself, that was Conclave. We built Conclave as part of the Launch School Capstone Program during the fall of 2017.

It is badass. It also took a lot of work.

We spent hundreds of hours over several weeks researching and building Conclave. This involved reading white-papers, sifting through open-source code, and implementing custom data-structures. We even had to design our own consensus and conflict-resolution algorithms for decentralized systems.

This may sound like a lot, but it was crucial.

If your dream company is a big-name tech giant, you are going to have a lot of competition with CS graduates. While we non-traditional folks cannot compete with their pedigree, we can beat them in applied experience.

Even if you do not want to work for one of the Big Four, a badass project is important. Every interviewer will ask about your recent projects and biggest challenges.

Showing that you have tackled interesting problems, such as concurrency and scaling, will make you shine.

2. Show off badass project

Once our team built Conclave, it was time to show it off.

We wrote an extensive case study that we posted to Hacker News and Reddit. We also wrote a condensed version that we published on Medium.

This not only displayed our ability to explain complex ideas in simple terms, it even lead to some companies reaching out to us!

Meetups

I’m always hearing advice that you should attend Meetups while looking for a job.

Do you know what is more impressive than attending a Meetup?

Speaking at one!

My presentation at the Javascript.NYC meetup

During my job search, I spoke at two local JavaScript and Ruby Meetups. This can be great for a couple reasons:

  1. If it’s recorded, you can put the video on your LinkedIn and website. This will be very impressive to any managers who look you up and will set you apart from the other candidates.
  2. Speaking at Meetups can be a fantastic referral generator.

I know that many engineers shy at the idea of public speaking and will avoid it at any cost. But think about the upsides.

How many job candidates can say they have given a public presentation?

It shows that you know your stuff to the point that you are willing to teach and tell others about it!

Are you willing to talk for 30 mins in front of a group of your fellow engineers for ~$100,000 a year and benefits?

3. Beef up LinkedIn and Website

Your LinkedIn profile is the first place a recruiter looks when you apply to their company. If you do not have, get one.

I made sure to beef up my LinkedIn profile until it hit the “All-Star” rating. “All Stars” are 40 times more likely to get contacted.

Instead of describing all the stuff I included, you can look for yourself.

I also subscribed to the Premium account so that I could inMail recruiters (more on this later).

What should my title be?

This is another area where you can set yourself apart. Get a little creative.

Due to my experience with full stack and distributed systems, I put my title as “Full Stack and Distributed Systems engineer”.

Wordy, but unique.

If you can’t think of anything special, you can’t go wrong with “Software Engineer” or “Web Developer”.

Get a website

I can already hear all my fellow back-end engineers groaning.

“Why do I have to create a website? I don’t get paid to make things look pretty!”

If you’re searching for a job, you’re likely not getting paid at all. Until you’ve signed that offer letter, you’re a marketer, not an engineer.

Having a website is not about displaying your front-end aptitude— though it can be.

A website is another way to advertise yourself and dictate your narrative. When employers search for my name on Google, I want to control what they see as much as possible.

Keep it simple

I built my website using Sinatra, basic HTML/CSS/JS, Heroku, and a fun background gradient pattern I found on CodePen.

Note: I’m undergoing some site maintenance so my website may not be operational when you’re reading this.

For those who balk at the idea of using HTML or CSS, there are plenty of Jekyll templates on GitHub .

4. Apply to companies in reverse order of interest

Before I started applying for jobs, I created a long list of companies that interested me. I then separated this list into 3 groups based on preference.

These were my “Tiers”.

Each tier determined when I would apply and how much effort I would put towards the application. The greater my interest, the longer I waited to apply.

Why apply to top tier companies last?

Hiring is an incredibly imprecise process. There are so many factors and variables that are impossible to control.

Credit: giphy.com

Nerves, imperfect answers, and simple mistakes can take down even the most senior engineer. No matter how brilliant you are with computers, only stellar interviewers get stellar offers.

And while mock interviews can improve your skill to a certain degree, there is no substitute for the real thing. That is why I wanted to hold off interviewing for my top choice companies until I had some practice.

I didn’t receive an offer from my first onsite because of rookie mistakes. By the time of my eighth onsite, those errors were fewer and farther between.

5. Create customized resumes and cover letters

Here is my resume.

Notice the “v37” in the URL? This is the 37th version of my resume.

I mentioned before that the more a company interested me, the more effort went into applying.

However, regardless of tier, I created a customized resume and cover letter for almost all of the applications. By the end of my 8 week search, I had 40–50 different versions of my resume

Why go through all that effort?

I started my job search with AngelList, LinkedIn Easy Apply, and other low yield tactics. I figured I would need to blast out lots of applications but I would eventually get a response.

100 applications later, complete silence.

Credit: giphy.com

I learned later that those job aggregators tend to spam companies to the point that HR just ignores the applicants. I don’t personally recommend them.

Instead, I focused on applying directly to company career pages, emailing recruiters, and crafting unique resumes and cover letters.

Resume Tips

There are plenty of resources on how to write a professional resume. While my resume still needs work, here are 3 things that helped me:

  • I added a “Summary” section at the top that summarizes my interests and experience in 2–3 sentences. It is both helpful to recruiters, because they can quickly skim it, and highly customizable.
  • I emphasized my personal projects. I mixed-and-matched them depending on the company I was applying to. Hosting them on Heroku was a big plus.
  • I curated my “Skills” section to each job description. I omitted front-end technologies for back-end positions and vice-versa. I wanted to show my potential employer that I was the perfect person for the role, down to the skills and technologies I displayed.

Cover Letter Tips

Cover letters are tricky and I still have a lot to learn about them. The best advice I received was to create a cover letter template.

Cover letter templates are a balancing act. I wanted to leave enough room for personalization so every version was unique. But the more room I left, the longer each cover letter would take to write.

Custom assets take time and energy but can significantly increase the chance of receiving phone screens. The majority of my applications did not come endorsed with a referral. My CV and cover letter were my main selling points.

I made sure to show I had researched the company by mentioning any recent news articles or posts from their engineering blog (if they had one).

While many people say the cover letters are dead, based on my response rate, I can only assume the recruiters appreciated the extra effort.

A quick note on when to apply

Credit: giphy.com

I reserved Monday — Wednesday for sending applications. Those are the most popular days for job postings and talent searching.

Applying to fresh listings was the best way to get my application in front of a recruiter or hiring manager.

The chance of getting a response decreases as the week goes on. Weekends are the worst by far.

Additionally, every first day of the month, Hacker News has a Who Is Hiring post. It is a fantastic resource for finding open positions. There is also a chance that some posts will include a personal email to someone inside the company. This can allow you to bypass applying through HR entirely.

6. Reach out to fellow engineers

Credit: giphy.com

The idea of building a network from scratch in a new city may cause others to panic, but it excited me.

I love to meet new people.

While I’m sure elaborate networking strategies exist, I kept mine simple.

I found engineers at companies in my Tier 1 list and sent “Connect” requests through LinkedIn. If they went to the same college as me, all the better.

I included a note saying I was new to the city, had recently finished a project, and wanted to get more involved in the community.

Short and sweet.

Engineers are much more open to grabbing coffee with strangers than one might think. I was able to meet engineers from DigitalOcean, Spotify, Datadog, and others.

I even got to eat lunch in the Google cafeteria. Check that one off the bucket list!

“But I hate networking!”

Many people do not like networking because they feel it is dishonest and/or “salesy”.

It doesn’t have to be that way.

I didn’t go to these hangouts seeking something in return. Many meetings didn’t result in a referral, and that was perfectly fine.

I was genuinely eager to involve myself in the local dev community and talk with other engineers. I asked them about their backgrounds, current projects, and interests outside of programming.

I continue to reach out even now that I am employed. Everyone has a unique story and I enjoy hearing them.

If you have trouble meeting other developers, take some notes from Dale Carnegie.

Find engineers who have blogs, podcasts, or have spoken at conferences. Reach out and express a genuine interest in their work. Ask to pick their brain about a certain topic they have talked about that you find fascinating.

You may be surprised with the response.

7. STUDY

Credit: giphy.com

Slick cover letters and referrals were effective for getting my foot in the door. It was my technical chops that took me the rest of the way.

Since I did not major in computer science in college, my weakest areas were algorithms, data structures, and system design.

I made sure to change that.

Algo/DS

To get a basic overview of algorithms and data structures, I read A Common Sense Guide to Algorithms and Data Structures.

To build on my baseline knowledge, I solved around 100 problems on LeetCode. I made sure they covered the different topics I might face in a technical screen:

  • Arrays/Strings
  • Matrices
  • Binary Trees
  • Linked Lists
  • Backtracking
  • Dynamic programming
  • Bit Manipulation (this probably won’t come up in interviews, but it is fun to learn)

I wrote down my mental models for most of the algorithm problems I completed in a Google Spreadsheet that you can see here.

This helped me to better understand the solutions and patterns involved. It also served as a useful refresher before onsite interviews.

Credit: pramp.com

Alongside LeetCode, I also did over 30 Pramp interviews. If you’re not familiar with Pramp, it’s a “free online peer-2-peer platform for practicing technical interviews.”

You get to practice algorithm questions and your interview skills at the same time. I can’t recommend it enough.

I also bought some whiteboard wall tape to practice for whiteboard interviews. It came in handy.

System Design

System design interviews are the true test of whether someone has mastered the fundamentals. Don’t think you can walk in and half-ass them. Interviewers can detect BS.

Not only does system design help determine if you will get an offer, but how lucrative that offer will be.

Take it seriously.

Like many engineers, I didn’t have a lot firsthand experience designing large-scale production systems. To prepare, I studied from those who did.

The best resource I found was Grokking the System Design Interview. It has many detailed case studies that are easy to follow and cover common scenarios. The $80 price tag is well worth it.

There are plenty of free resources as well:

I also learned a lot from case studies written by previous Launch School Capstone graduates. The topics they cover are common topics in interviews:

Finally, if you are up for it, read white-papers. I read the ones for DynamoDB and Cassandra to improve my understanding of NoSQL databases.

White-papers can be technical and verbose but one of the best ways to learn from those at the top of our field. Anyone seeking back-end or full-stack roles should consider them.

8. Do Deep Work

I love when other engineers say that they study for 8–12 hours a day while searching for a job. My competition is openly admitting that they walk into their interviews exhausted.

Credit: giphy.com

I know, I know. That isn’t what they’re trying to say. But show me someone who studies for more than 8 hours while job hunting and I’ll show you someone who is terrible at time management and is likely burnt out.

Cal Newport outlines in Deep Work that the most “focused work” an expert can do on a daily basis is around 4 hours. For the average person, it’s even less.

That isn’t to say someone cannot “work” for more than 4 hours. I see people “working” for 10+ hours all the time. The amount they get done is debatable.

What is “focused worked”?

For me, I defined it as concentrated and distraction-free work that was above my comfort level.

Following along with a tutorial? No.

Reading a blog post? No.

Practicing problems you’ve already seen and know how to solve? None of that.

Credit: giphy.com

While those are fun, they wouldn’t progress me enough in the short amount of time I had.

To improve my interview skills without using all my free time, I did deep work. Here are some examples:

  • Spend an hour practicing challenging (read: more difficult than you’re used to) problems on paper/whiteboard or have a friend test you. Pramp works as well.
  • Take 20–30 mins to do a mock system design interview. Compare your answer with an official case study and try it again to improve your answer.
  • Not comfortable working with 3rd party APIs? Take 2–3 hours to build a program that interacts with GitHub. Struggle with it. Try recalling everything you know about REST, APIs, and HTTP. For everything you don’t know, search on Google/StackOverflow. Take notes so you don’t forget.

Some days I did two or more of these tasks. Other days, I focused on one.

The important part was making sure I removed all distractions. This let me limit my studying to 4–6 hours which left more time to apply, network, and just relax.

Do not learn new technologies

Some people may fight me on this, but you shouldn’t spend what limited time you have learning new languages or frameworks.

This is the time to hone what you already know.

Treat your upcoming interviews like a music tour. Does a musician prepare for an upcoming performance by learning new songs?

Hell no!

They dedicate their time to fine-tuning their repertoire and making sure every note is perfect.

That is what you must do.

A great tech company won’t care which languages you know. They will trust you can learn whatever technology you need on the job. Spend your time sharpening the tools you have.

9. Leverage job offers

This was the most beneficial step in my job hunt and the most difficult.

It took around 5.5 weeks to get my first job offer. The next 6 came in the following 2.5 weeks.

How?

Leverage and timing.

My first offer opened many doors. It not only put me in a better negotiating position with other companies, it made the entire process speed up 10 fold.

Credit: giphy.com

I let all the other companies know that another offer was on the table. I asked, if they were still interested in me, to be streamlined through their process.

The next step was to email recruiters at companies where I had applied but hadn’t received a response. I let them know I was still interested but had a standing offer. If they thought I was a good fit, I would need to be put on the fast track.

This is where LinkedIn inMail comes in handy. Not every recruiter checks their inMail, so I also used Clearbit for direct emails.

From a recruiter’s perspective, I was a desirable candidate. Another company had vetted me and had confirmed that I knew my stuff. I also proved my passion for the recruiter’s company by placing my other offers on hold.

Recruiters love passionate candidates.

Most places can take anywhere from 3 weeks to a couple months to interview a candidate.

With an offer in hand, the turnaround can be as short as a week.

Even if your first offer is from your dream company, it’s worth delaying your acceptance to improve your negotiation position. They may not like this, but it’s not up to them.

This is your career and your future. Do what’s best for you.

Final Note: Be Nice

Credit: giphy.com

There’s a lot to say about being nice and energetic during interviews. Many of the companies who gave me an offer cited my passion and positivity as determining factors.

I firmly believe that cracking a couple jokes and making the interviewers smile can make up for some less-than-perfect answers. For my fellow introverts and ambiverts, I recommend turning your anxiety into excitement.

Thank you for reading this long-winded essay!

I know that applying to jobs is a difficult process. My hope is that this information helps non-traditional candidates leverage their talents and teach them to how to sell their skills.

Best of luck to all of you job seekers. If you have any questions or concerns, feel free to reach out or comment below. I will answer as best I can.

Now go off and start building some badass projects! I look forward to seeing them soon at a Meetup near me.


Written by SunnyB | Software engineer and tech blogger.
Published by HackerNoon on 2018/03/02