Applying to companies and interviewing
Updated: May 14, 2021
Applying to jobs is a numbers game
Don't forget it! Don't lose hope when the first company rejects you or you don't hear back from most of them. When I was leaving Microsoft (3 years into my now 7-year career), I applied to about 40 companies and most didn't even get back to me. It's not because you're not awesome: there are so many reasons they might not get back to you that have nothing to do with how good of an engineer you are (or how much potential you have).
Here are some of them:
You're too junior for what they're looking for. It doesn't mean you're dumb. Junior engineers need and should receive a lot of mentorship from senior engineers, and they might not have the bandwidth. Or they need someone who can independently lead a gigantic project. You might not be able to do that now, but with a couple more years experience, you will be able to.
They already have some people that are far enough in their pipeline that they're not looking at new applications
They took 5 seconds to scan your resume and didn't notice how awesome you are. You should assume that recruiters and hiring managers will only spend 5 seconds looking at your resume
How to curate your resume and LinkedIn
Assume that recruiters and hiring managers will only spend 5 seconds looking at it. They might even do a ctrl+f and search for the programming language they are looking for expertise in.
List the programming languages you have experience in and rate them by how much experience you have with them.
Here's an example:
Proficient: NodeJS, TypeScript, Swift
Experienced: HTML, CSS, Go
If you don't have a LinkedIn profile yet, make one and list your languages/technologies there as well, using the same format. Your LinkedIn profile is basically a more accessible version of your resume. Note: if you're looking at my LinkedIn profile right now, it doesn't actually follow this advice because I haven't updated it since I learned all this stuff from being on the recruiting side at my current job.
List your past jobs and highlight some achievements there. You can sugar-coat things and exaggerate. I endorse it. Blame me if you ever get in trouble for it, but you won't.
Here's an example:
Microsoft, Visual Studio team, 2014-2015
- refactored core part of language service to make it unit testable and wrote unit tests to ensure stability for future expansion
That project was kind of a make-work project I came up with when I was actually losing my mind from not writing any code for an entire year. Was it very impactful? I don't really know because I left right after that, but it led to an impressive-looking code review and it sounded important when I described it to my future manager on my next team. Sometimes you need to embellish a little to pull yourself out of a hole.
Applying to jobs
Apply to your second-choice companies first! This is my most important piece of advice, so don't gloss over it. Practicing phone screens and whiteboarding interviews with companies you are less invested in will get you used to the process and really REALLY help with interview nerves. When you finally walk into interviews at your dream company, you won't even be worried, especially if you already have offers from companies you don't really want to work for. It's the best way to practice, hands-down.
On top of that, while you're interviewing with your second-choice companies, you will be learning more about the industry, what's out there, and you might actually discover a company that you're way more excited about than your original top choices. Keep an open mind!
And no, you don't have to feel guilty for applying to jobs you don't really want. Recruiters are used to people rejecting offers. Maybe don't do this at startups because they have a lot fewer resources to dedicate to hiring. Amazon is a great company to practice with because all their job postings are posted individually and you can be in the interview process with several teams at once! Again, don't worry, Jeff Bezos is literally the richest man in the world and Amazon isn't going to even feel it when you tell them you actually don't want to work for them. You can make up an excuse.
Using your network
Your network is your most valuable asset when you're switching jobs. If you have friends or acquaintances from university or your coding bootcamp that landed positions at companies you might want to work for, reach out to them! You might think you're asking too much of them, but in most cases they will gladly refer you because (1) you're undervaluing yourself and (2) many companies offer referral bonuses to existing employees that bring in more talent from their networks.
As a quick aside, I want to strongly encourage your to invest in your network at your current company (or school if that's where you are now). A couple years ago, I was in a Q&A with a group of female interns at Google and one of them asked me if your network really was that important, because she felt antisocial and didn't want to socialize at work. My answer was, yes, it is. Even if you don't really want to socialize with your colleagues, your network is WAY MORE VALUABLE than any number of hours practicing interview questions or polishing your resume. Companies trust referrals way more than their own judgement on candidates that apply through the website and that is for a good reason: you really can't tell much about a person from their resume.
On top of your network helping you get your next job, they will help you at your current job. Humans are social creatures and even though we would like to believe the best projects go to the most qualified employees, the reality is that it's much more political than that. If you maintain casual good relationships with most people on your team (e.g. a friendly hello when they enter the office, maybe remembering that they're planning a trip to Europe this summer), good things will come your way. Also, 5 minutes of banter by the coffee machine might lead to someone helping you finally figure out that bug you've been smashing your head against all morning. Your network is SO VALUABLE!
Don't waste time on them. I'm pretty sure no one reads them. Some online application forms have a field for a cover letter, so compose a generic one and paste in the company name every time you apply to a new job. Finding ways to get the most value out of your time is one of the most important skill you can hone as an engineer. Start now!
So you have started applying to your second choice companies and now it's time to practice those dreaded coding interview questions. Some companies are moving away from this traditional and frankly useless interview practice (when are you going to reverse a binary tree in a professional setting? Never.), but I believe most companies still do it.
I recommend leetcode.com. Start with easy questions and don't get discouraged when you can't answer them. Start by drawing out an example input on some paper and drawing out how the data has to change or whatever you need to do to visualize the problem. Set a timer for 5-10 minutes and commit to trying to figure out for that much time, then go to the solutions section and learn from other people. There is NOTHING wrong with learning from other people. It is, after all, how you will do most of your learning in an actual professional setting. In real life you learn from people, so you should do that here too.
Do some medium questions too and try to cover most of the categories (e.g. arrays, graphs, trees, breadth-first-search, depth-first-search, linked lists, backtracking, MAYBE dynamic programming but honestly if I ever saw dynamic programming in production code, I would have a heart attack). These are your bases. When you do enough of these problems, you will recognize them for what they and know how to solve them easily, even if you haven't seen that exact problem before.
Save your answers somewhere you can find them easily. I put mine on my github so I could review them quickly on any computer. This is a great way to remind yourself how you approach different problems right before an interview. You don't have to keep re-solving them, you can just keep re-reading them, in my experience.
You don't need to do hard problems. I didn't do any hard problems and I aced my Google interviews.
In the interview
My approach to dealing with nerves is to over-prepare, hence interviewing with second-choice companies first and covering my bases in leetcode. If you still struggle with nerves in the interview, I guess my advice is to remember that there isn't one dream job out there for you and this isn't your only shot. There are LOTS of jobs that you will be happy in, and this one might not even bit one of them.
Remember that you are interviewing with your future team and you should ask them things like:
Do you have unit/integration tests? What is your code coverage like?
How long does it take an engineer to build and run their code after making a change?
Can you describe the feedback/promotion process?
If you're talking to your future manager: how many direct reports do they have? (anything over 8 should be a red flag)
Aim to get multiple offers around the same time
This will probably happen if you are applying to your second-choice companies first, but if there are a few companies that you would really love to work for, you don't want to be pressured into making a decision about one company before you get an offer for the other company. If they tell you you have 24 hours to make a decision, that is a lie. You can take a lot longer than that and you can even tell them you're waiting to hear back from another company. It's not ideal, but don't rush into a decision because they're pressuring you!
It's hard to know how long it will take a company to generate an offer after interviewing. Google takes a minimum of 3 weeks because they have a mandatory hiring committee stage of the approval process, but Facebook might have an offer for you within 3 days. Startups usually can move very quickly and you might hear back within a couple days of your interviews. Do some research while you're applying to help you come up with a timeline.
Having multiple offers is going to be your greatest bargaining chip when it comes to negotiating your offer, which you MUST do!