The reason why I wanted to talk about this is mainly because
when I started telling my friends that I passed the Google
Software Engineer interview they were all mainly interested
in how I did that and how the interview looked like.
So.. here we are! I won't be able to tell you the secret recipe for an easy and quick win, but I'll share my experience and I hope it will be helpful to you.
There are different opinions when it's about facing software engineer interviews, mine is the following: you need to prepare and study in order to be ready and successful. It's not only that: believe it or not, you need to be in your lucky day which means that you are in a positive mood, you meet good interviewers and the questions you are asked matches your background. Easy! 😊 The simple reason behind that is because my daily routine as a software engineer has always been completely different from what I was asked during interviews and also from what I studied during my university: I don't think there is anything wrong, I just believe that in some moments of your life you have to demonstrate someone else that you would be ready to do challenging things that sooner or later they will happen in your work like. Interviews should be one of them. During interviews you have to demonstrate the company can invest on you not only for the daily routine that directly depends on where you work (in-house tools, e-mails, meetings, maintenance/operations) but also on those engineering and programming skills that are (or should be) the real core of our job.
There are many types of software engineering interviews and they really depends on what company you are applying for. On this story I will focus on two of the most important tech companies for which I did the interview and for both of them the outcome has been successful: Amazon and Google.
Note: What I'll report here will not reveal any particular secret in order to cheat during the interview. This is about my personal experience and knowledge. It is also important to clarify that I am not writing this article on behalf of these companies and because what I am saying is built upon my personal experience, it may not be totally true for yours, given that these companies are really big and different teams can have slightly different processes.
Amazon means a lot for me. I worked in this company (in AWS
CloudWatch specifically) as a software development engineer
in Dublin for 3 years. Here I learned a lot, I improved my
skills, I understood what it means build software on a large
scale but of course I don't want to say is the perfect place
to work in, because there is no perfect place in this world!
Amazon is a company focused on soft-skills. When living in the company, you can hear about soft skills everywhere and everytime. You may have heard about the Amazon leadership principles, which undoubtly led the company where it is now. Because of their importance, leadership principles are scrutinously checked during the interview. Your interview will most likely be made of three main steps:
1. The first step is a coding test where Amazon wants to check your coding skills. Usually this test is not particularly difficult and depending on the team that is hiring, you may not need to get 100% of overall score as long as you've demonstrated that you did not cheat and your proposed coding solution makes sense (even if it does not work in all cases).
2. If you succeed the first step, a phone screen will follow. During the phone screen, the goal is usually to check if basic software engineering skills are met (data structures, basic design scaling systems questions, programming principles) but it is imporant to mention that already in this phase the interviewer would probably ask you questions to check your soft-skills. Usually he will try to analyse 1-2 of the leadership principles I mentioned above.
3. The third and last step consist of an on-site interview which lasts 5 hours. During this time you will meet 5 different interviewers for one hour each. Usually a lunch break will be offered together with a meal (Amazon does not usually have canteen in the offce - it depends on where you apply - so likely you would go outside the office with an Amazonian that will be there for a chat with you). It can also happen that during the same hours, 2 interviewers may appear: no worries, that means that one of them is shadowing the interview in order to become an interviewer (that should be mentioned by the interviewer).
This is definitly the toughest step of the interview, but I would not be too much worried becuase it's not a full 5-hour technical session where you will be asked extremely weird complicated questions: usually every interviewer is in charge to cover a leadership principle in addition to its responsibility of covering some technical aspect. Most likely you will meet two managers and three engineers: the two managers will be in charge of anayling your soft skills (and maybe also your problem solving skill), while the three engineers will focus not only on leadership principles but also on data structures, coding and system design.
As you can see, leadership principles are extermely important in Amazon and I want to spend some words on that: it is easy to come prepared to those questions and invent something, but please don't do that! Just be yourself, tell about your real work experience, your real life and your real knowledge. Amazon is a challenging environmen and no one in this company is free to do less than what other people are doing. Assuming you will be able to cheat and demonstrate your soft-skills are valid to be hired, you won't last long in the company because your team and manager would be different from you and they would soon realise you don't work well for them. Really, don't cheat! 😊 As a final recommendation, here's what you should do:
- Read more about the leadership principles, it's always good to know what the company bevieves before to join
- Practice some coding questions (LeetCode and HackerRank should be okay)
- Practice about system design interviews (these interviews should be "easy" if you have experience, but if you want to have an idea on how this interview should be structured, just go on YouTube and search for some dry-run interviews for system design - in my mind it's the fastest way to learn)
- ...and of course good luck with that! 😊
If you are a software engineer, you may know that Google is
the #1 place where all engineers would like to be at least
once (yes, even the ones they say they hate it.. 😜).
I am one of those guys that always wanted to work for Google. The idea of being part of such an amazing company that owns high-scalable, customer-friendly, wide-impact suite of services used all over the world can be really challenging. People can argue that it is also exciting working in start-ups, creating your own and I honestly 100% agree with that. I just believe this is all personal. The interview in google is known as to be one of the most difficult software engineer interviews. It was also known to be one of those interviews where you were asked weird questions to check your reasoning skills. I think that this is not happening anymore and at least no such questions were asked to me 😃
The process is highly focused on checking your engineering skills but it also focuses on your soft skills to check if you have the googliness (if you compare it to Amazon, they prioritize checking if you really are a good software engineer, but still soft skills are important when you work in a big company).
Similarly to Amazon, I had to complete two main steps (in this case no initial coding quiz was required but I can't really tell if this is the standard):
- The first step was a phone screen where the interviewer only focused in asking me a technical question: it was an excellent well structured question where he could almost infinitely keep asking questions to make it harder and harder until you are not able to give an answer, and that was the case for me. You usually end up feeling that the interview was a failure because it most likely ends at a point where you don’t know how to answer.
- The second and last step is the on-site interview. This consists of 1-hour 5 different interviews and you usually have a 1-hour break with a google engineer to have lunch and ask him questions. Google usually provides food in all the offices, so most likely you will end up having lunch there; they will also provide you a quick tour around the office. Depending on the seniority you are applying for, you may or not may have a system design interview, therefore you will have to face with 3-4 coding/data structures questions, 1 system design (optional as I said) and one about your soft skills.
As you can see, my interview in Google was more focused on checking my technical skills. At least in my case, questions they asked me in Google were more difficult than the ones I was asked in Amazon. Nothing really impossible if you try to prepare, and that’s why I am giving you here some links to help you:
- Project Euler: this is a challenging mathematical set of questions that you need to solve by providing the solution. Only by writing a program in an optimized way will give you the answer (otherwise an O(n^2) will take ages);
- LeetCode: this is the place where you can keep practicing with coding questions;
- HackerRank: this is like LeetCode;
- GitHub Repo to practice with coding, data stractures and many other things: I love this link!
- Cracking the Coding Interview: this is the most famous book if you want to prepare for the coding interview; I personally did not use it, but it's really really famous and also tech companies recommend it to read it;
- Algorithms in C: this is where things get really interesting: if you want to have a proper preparation about data structures and algorithms you can go with this one and you won't regret it. I love studying and this was a pleasure to read, but of course it takes time;
- The Algorithm Design Manual: Steven Skiena wrote this excellent book and like the previous one gives you an excellent preparation in terms of algorithms and data structures;
- Algorithm and Data Structures explained by Abdul Bari: during my preparation I randomly ended up on a video made by this person and I really enjoyed it. It explains algorithms and data structures in a very easy way. In my opinion YouTube is just the best way to have a basic understanding of things
- High Scalability: a website that tells you a lot about most recent news in terms of scalable systems.
- InfoQ: you may already know this; if you don't, this is just a website that collects all the latest articles about technology in general.
- To prepare for system design questions, you should just go on YouTube and search for "System Design Interview" - you will get lots of videos that will explain you how to approach for this question.
Not everyone agrees that you should prepare for an interview, someone believes that it’s like cheating. I have no harm in accepting that opinion, but for the reason I explained above I am one of those people that like to come prepared and show that you really want to take that job: I don’t like saying things like: “I don’t remember this topic” or “I’ve never heard about that”.
I would like to say one last thing: interviewers in these company are always willing to put you in a comfortable situation and they rarely are arrogant or annoyed by you. When you decide to be an interviewer in these companies you go through a training process where they teach you the way to hire and then you have to attend a certain number of interviews in shadow mode. I know that because I was an interviewer when I worked in Amazon. The reason why I’m saying that is because I really want to tell you that you should not be scared of who you have in front of you, that guy may be your colleague one day and vice versa, so relax and try to trust him/her.
I would never say this is the perfect process to hire a good software engineer just because I believe there is no perfect process as well as there is no perfect company. I think a good hiring process can be defined like that as long as it works well with that company.