I recently went through a big round of interviewing and job searching for SW Engineer roles. I wasn’t fully prepared, and don’t think I could ever be fully prepared. Interviewing is hard and strenuous and nerve wracking and I honestly hate it. But the preparation I did helped. So this post is to collect some of those preparation points, and I hope to do some other separate posts about particulars.
LinkedIn is King
While there are many job sites like Indeed or Monster, many have a target audience. There are sites like StackOverflow and Hackerrank that have their own job sections. But going way back to 2010 it became clear from my perspective that LinkedIn had some advantage in the tech sector for job searching. So brush up your profile (or create one) and link up with a bunch of friends. If you ever loose a job, your network of former colleagues (however you keep in touch with them) is the most reliable place to get recommendations and referrals. Use all the sites you feel comfortable with, but don’t neglect LinkedIn.
Relearning CS 101 stuff, aka. MIT Opencourseware is great
Years ago I was trying to prepare to travel for a set of day long interviews at a large internet .com company. The recruiter had suggested studying up on CS algorithm fundamentals, so I went searching and found the MIT Opencourseware for Computer Science. Of particular value was the CS6.006 course from 2011 which is available on YouTube. The lectures are good, and have nice descriptions of the problems with Python as the class language. I highly recommend these, and go back to them any time I will be doing interviews to review (on 1.5 speed now that I’ve seen them before).
Interview Prep pages on Company Career Sites
I have focused my job searching through the years on large technology companies. Big tech is where I’ve spent my career and where I feel the most familiar with the corporate shenanigans. Most of these big companies have some sort of interview preparation material available freely on their sites, and when you talk to a recruiter from the company they will send you a link to some of these materials. So here is a list of links that I’ve accumulated that may be good reference in the future.
- Amazon
- Google
- They seem to expect you to figure it out yourself. But there are plenty of resources that you can google for. Like https://careers.google.com/how-we-hire/
- Salesforce
In addition, you will find if you search for a particular company and “Software Engineer interview” there are tons of YouTube videos and articles from people who either were interviewers or have violated their NDA (not cool). Here are a few I found helpful but not too cheat-y.
- https://igotanoffer.com/blogs/tech/facebook-software-engineer-interview
- https://medium.com/better-programming/how-to-ace-the-coding-interview-by-an-ex-facebook-interviewer-9c163a845d05
You will also find tons of references to the “Grokking the System Design Interview” course on Educative. It is highly referenced, but I didn’t have the time nor the desire to pay for it this time around. Maybe in the future I’ll give it a try. https://www.educative.io/courses/grokking-the-system-design-interview
Also, just so I don’t forget, I should do a whole post about System Design interviews. I found https://blog.pramp.com/how-to-succeed-in-a-system-design-interview-27b35de0df26 was helpful.
Coding practice sites
There are a few sites that are recommended by big tech companies as places to go brush up your coding skills, and some companies even pay these sites to help in the screening process (which I find questionable, but understandable).
- LeetCode
- This was the practice site I liked the most from this list. Lots of different problems to work through, and the monthly challenges were a fun way to engage on a daily basis. The site lets you pick your preference for language and gives a framework for testing that lets you think more about the problem.
- LeetCode isn’t perfect, and I found some of the same problems as with HackerRank (problem description vs. test framework mismatch, unclear writing, discussion boards have all the answers). But the problems were less.
- HackerRank
- I found I did not like HackerRank. Many of their problems had spelling errors or things that didn’t match. They do have most of the same features as LeetCode though
- Some were just deliberately vague in ways that would break your solution when you tried to run it. I know in interviews sometimes the problems are stated vaguely on purpose to allow for some discussion and for the solution to emerge, but on a practice coding site there isn’t someone else for you to talk out the requirements with unless you want to do to the discussion boards, and many people just post their answers on the discussion board which takes some of the challenge out of it.
- Many of the problems had obviously been written for an older language like C and not updated as time went on. In some cases this meant that the problem description didn’t match up with the testing framework presented.
- Unfortunately, HackerRank has convinced companies like Amazon and Facebook to use their service for screening applicants. What that means is they run you through a timed coding challenge in their clunky online editor. It is less fun than it sounds.
- Geeks for Geeks
- Like HackerRank, I found this site to be pretty hit or miss. For instance, in https://www.geeksforgeeks.org/given-sorted-dictionary-find-precedence-characters/ (not linking directly as it isn’t worth giving them any more traffic) I found a number of grammatical and spelling errors, and the writing was not good.
Managing Nerves
This was a big challenge for me, especially with the pressure of finding a job to support my family and my dislike of having to market myself. I’m a terribly honest person, so I get nervous when talking about my experience that I don’t give the impression that I did something I didn’t or that I am taking credit for my team’s work.
So what helps with nerves? First is some preparation. Long ago (10 years?) someone gave me some great advice. I can’t remember if it was a job seeking consultant that HP had brought in to coach the group or if it was my father-in-law (he certainly lived this idea). The idea is to do at least one interview a year, even when you have a good stable job. That way you gain experience in the interview process and keep your interviewing skills current. It doesn’t have to be a perfect job and you don’t have to accept it. But if you did happen to find an awesome opportunity, all the better.
Next is to study. There are many, many resources to help you study for an interview in whatever your field or specialty is. And I’ve put some links to resources below. Practicing coding or laying out a highly scalable system really helps build understanding and confidence. Along with just reading blogs and watching videos, do some practice exercises and talk out loud. So many of the ‘how to interview’ resources stress that the interviewer is looking for you to be able to explain your thought process and how you approach a problem. Talking to yourself out loud while solving a problem is a great first step.
Talk yourself up a little. You are allowed to be your own cheerleader. I know for myself that is hard, as I am well aware of my own failings or weaknesses. But take some time to look over your resume and experiences. Write a few blog posts or something about projects you worked on and what you learned. You may find that you can find some reassurance in knowing you have done good work in the past.
I went through a large amount of stress with this last round of job searching, and many of my normal stress coping mechanisms weren’t enough. But don’t abandon them. I found that prayer helped me a lot. Spending time with my family also was a good distraction. Music is great to get your mind in the right mode. And exercise helps sharpen your mind and get out some nervous energy.
Company Interview Process Variations
Whew, where to start. Each company has the freedom to make up their own process, and the larger the company the more likely they are to vary in their own way. I think I broke it down to 3 broad categories, but you could go farther with subcategories.
First, there are the small companies that have a more personal interview setup. With these you meet with a hiring manager (likely after a phone screen from a recruiter or HR rep) and talk about your experience and stories from your resume. There may be a technical challenge like coding or system design, and sometimes those are done in an interview session with members of the team so they can get a feel for your skills. The amount of in-interview time with these small companies is usually less.
Next there are the larger companies that don’t really do a lot of hiring (budget constraints and bureaucracy get in the way), so they have a process and lots of hoops to jump through but really have not figured out how to make it a good process. So you may talk to a recruiter and get sent for an interview on a position to find out it wasn’t a good fit. Or you may never get a chance to talk to anyone because your application is just lost in the pile of applications the company gathered just out of legal requirements when they really posted the job hoping to catch the one ‘rock star’ employee from the community that would bring the company some prestige for hiring.
And then there are the big hiring tech companies that have a famous multi-stage hiring process with multiple challenging technical coding problems and that schedule a day full of multiple interviews to create rigor to try to break you. Google, Amazon, and Facebook are famous for these. Microsoft used to be famous for having a challenging interview process but seems to have eased up a bit in more recent years. Each of these class of companies take pride in tweaking their process to be a challenging bar so they only get the most elite, talented engineers in to their company. There are many things wrong with this approach, and many people have written about the fallacies of relying on a process that doesn’t match the actual day to day activities of an engineer. But these companies see that their process works for them, so there is no incentive for them to change.
Salaries, one of the great mysteries
I haven’t got a clue when it comes to salaries or negotiations. Fortunately there are sites like GlassDoor which make the process a bit better. There is still a challenge in that most salaries for SW engineers are reported in areas with a high cost of living (Bay area, Seattle, New York, etc) and that throws off the curve quite a bit when looking for remote work.
The other big problem with salaries is that different companies call their roles different things. Figuring out the difference between Principal vs Staff is pretty fuzzy. I found https://www.levels.fyi/SE/Amazon/Google/Facebook/ was helpful in comparing how some of these companies stack up and what to look for. Still, I wish the ACM would come out with some standardization for engineering role names to make the job searching much easier.