After my longest period of uncertainty in life— spending two months unemployed — I’ll be starting as a software engineer at Uber on their Risk and Safety team on Monday. It was a long and winding road to get here, as, quite frankly, this was my first real job search, where I actively interviewed at multiple companies and prepped for whiteboarding interviews thoroughly. As others have noted, this process is easily underestimated, and I felt it was worthwhile to document my lessons learned along the way.
As a disclaimer, this is what worked for me, and it might not be what works for everyone. For context, I’m a software engineer with about a year of professional experience mostly doing front-end work; therefore, some of these sections are engineering specific.
Always apply with an internal referral
This can be through a friend, a classmate from college, anyone who went to your college, or a professional network (my favorites are Tech Ladies and LSH). Don’t be afraid to connect with people you don’t know on LinkedIn or to cold email — Google around for templates to make it easier! Most people would be happy to refer you after a quick chat (also note most have referral bonuses, so there’s incentive on their part). Have a template on hand which outlines your relationship with the person you’d like to refer you. This will make it as simple as possible for them to refer you and shows you’re respectful of their time.
If you don’t have any connection to a company through one of the above, reach out to recruiters directly — it might not have as high a success rate, but it never hurts. Just say that you’re interested in working for the company, cite a specific example of work the company has done that you find exciting, and ask for a time to chat more about open positions.
Timing and Lists
The most common advice here is to progress from the companies you’re least excited to work for to the companies you’re most excited to work for, and it’s great advice. You’ll gain confidence along the way, have better stamina for those day-long interviews, and you’ll have a larger arsenal of interview questions to prepare with.
A personal anecdote: I noticed that this strategy came in handy for front-end engineering questions in particular. In one of my first interviews, I was asked what a closure was, and I completely stumbled. Luckily, I had an interviewer who walked me through an explanation, and I did some research on it afterward. Good thing, too — I was asked about in in no fewer than 4 interviews after.
In addition to the progression ^^, consider applying to hiring platforms such as Hired and Triplebyte. I recommend trying Hired first, since there’s a lower barrier to entry (filling out a profile and having a polished resume) and you can set up a few phone screens and HackerRank tests to get you in the right mindset to interview well.
Once you’ve prepared technically, move to Triplebyte, which I found to be harder to get accepted into (2 hour interview involving breadth and depth of technical knowledge). Time Triplebyte to coincide with when you’re applying to your top choices — in some cases, there may be overlap between Triplebyte’s company matches and your top choices, and Triplebyte’s fast forwarding you to a final interview saves you the headache of the phone screen you would’ve had otherwise.
Be disciplined about your preparation
Consistency is key here. Do at least one question a day, ideally 2-3. I won’t go into depth on how to prepare technically, since there are manygoodresources out there for that, but what I will say is that this time around, I felt more confident and prepared than I did the last time I searched for a job because I wasn’t cramming the entirety of “Cracking the Coding Interview” in a few days. There’s no substitute for problem solving. There’s a wealth of resources out there, but the top two resources I used were:
Cracking the Coding Interview
LeetCode (paid subscription)
On the surface, the paid subscription doesn’t seem like it’s worth it. I, however, found it really useful for 1) viewing top questions for each company and 2) keeping myself accountable. The LeetCode subscription made me feel obligated to use it every day. It also helped me be comfortable coding on a computer without my IDE.
How do you know if you’re prepared enough? You should be able to come up with a decent approach pretty much within a few minutes of seeing a problem, or at least know what sorting method or data structures to use. Try to solve problems in multiple ways — how would you solve for something optimizing for space? How about for speed or the worst case complexity? Being able to discuss tradeoffs in an interview helps you stand out as a rational, thoughtful decision maker.
During the interview
Mentally reset between each interview — don’t let one bad interview tank your mentality for the rest of them. If you’re strapped for questions to ask the interviewer, ask the same question to multiple interviewers — this will give you different perspectives or confirm something about the company’s culture you’re curious about.
Be nice to your recruiters
Leaving a lasting (positive) impression on a recruiter can only act in your favor. Be kind, flexible, and accommodating while being assertive about your timeline if you’re sitting on another offer and especially assertive when negotiating your offer. You may want to apply to that company in the future, and having a friendly rapport with the recruiter means you might be able to get more feedback than you would’ve otherwise. On that note, always ask for feedback! More often than not, this isn’t possible, but sometimes, recruiters are happy to jump on the phone with you and discuss the weak points of your interviews (not over email for legal issues).
Concluding thoughts
Every experience is a good experience. If you don’t get your “dream job,” ask the recruiter for feedback and continue to work on prepping for the next time you interview. Tenacity is an important quality in a job search.
Be open about what your dream job/company is — you could surprise yourself along the way (I certainly did).
Never say no to an interview — you never know what may happen!
Smiling and kindness go a long way — be someone everyone would love to work with. Express passion for the company and team you’re interviewing for (if you’re not, are you sure this is the right position for you?)
If you’ve quit your job without another in hand, generate some side income so you don’t feel bad going out for dinner every now and then or splurging on something nice. I felt holed up for a while and hesitated to spend money at all, which only made me more anxious. What helped was reviewing and rewriting software engineering resumes on Fiverr and through Udacity. I was able to generate enough income to cover basic expenses, and along the way improved my resume writing skills. By helping others pitch themselves, I learned how to better pitch myself in the process.
If you’re searching for jobs while on the job, schedule phone screens for first thing in the morning or last thing in the day so it’s easier to plan your day — recruiters are used to this kind of request, so don’t be afraid to ask! If you don’t have access to private conferences rooms (as I didn’t), use Breather — you can get codes for enough credit to take a few phone screens in a private room close to your office. Step out for “an appointment” and do your phone screen then so you don’t have to take extra time off or work from home.