How I got a job at Amazon as SDE-1
I recently floated a google form in a LinkedIn post for referring people to various positions they might be interested in at Amazon, and I got an overwhelming response. I suspect there was so much interest due to the overlapping events of people getting laid off/newly graduating without offers due to the Pandemic, and Amazon greatly increasing the number of available job openings. I put some amount of automation in place and referred close to 500 people who filled the form. One other thing that was asked of me over and over again, was to share the process that I used to get an interview and then to crack it. This post is in response to that.
Background
Let me start off by giving a brief background about myself. If you are not interested in this, you can skip to the next part. I graduated from IIT Bombay in 2018 with a Bachelor’s degree in Electrical Engineering. As it might be apparent, I was not inclined towards my major as a career choice, and decided to devote significant amounts of time in college into what I actually loved — programming. I attempted many different things — competitive programming, building web portals for use within our college network, and taking on courses in Machine Learning. Of these, I achieved some amount of success in making a web portal that was used to map Professors to aspiring Teaching Assistants, and vice versa. A lot of professors signed up for it and so did large chunk of the student body, and it led to a huge improvement in the quality of TA sessions, which really boosted my confidence to pursue this as a career. I prepared for my campus interviews and was able to bag an offer from VMware.
I really enjoyed my time at VMware, where I stayed until the end of March, 2020. I learned a lot about real world software projects, programming patterns, design patterns, project planning and management, working in a team, and a lot of other “boring” things you probably won’t learn at college but are incredibly important. Much has been said elsewhere on the internet about how to be a good developer and grow your career once you get a job, but this is out of scope for this post (one of the things you will learn as a developer — clarify the scope of your project thoroughly :-P). I eventually decided to switch jobs as the next step to grow in my software engineering career. I got offers from 3 companies — Flipkart, MoEngage and Amazon, and eventually accepted the offer from Amazon by following basically the steps I outline below. I am not saying it will work for everyone, but it can at least serve as a starting point if you have no idea where to begin.
Strategy
There are broadly three parts to getting a job. First is getting an interview, second is preparing for the interview, and third is performing well in the interview itself. All steps require planning and commitment. I can shed some light on the planning part, but commitment over a potentially long period of time until you reach your goal has to come from within. You should make progress, no matter how little, every day on your plan, otherwise it won’t work. This is true for everything one does, in my opinion.
Getting an interview
Let me start off by saying that getting an interview is probably much easier if you come from a so called Tier-1 college in India — places like IITs, NITs, BITS, IIITs, etc. This is just the harsh reality. It doesn’t mean that people from other colleges don’t have a chance, or that they are less capable. It just means that they will have to work much harder to get a foot in the door. I do believe that companies have started to move past this ancient perception that they will get good candidates only from IITs or BITS, but it will take some time to get better. Anyhow, I will explain what all I did, and maybe that can serve as a starting point for you to getting an interview, but as with everything, I don’t guarantee results, and if things don’t work for you, try to figure out something else that does work.
Once I realized that I had to make a switch, I updated my LinkedIn profile with everything I had done since I had joined VMware. I highly recommend LinkedIn to get visible to recruiters, and updating your profile to the latest version should also help you gain more visibility. I don’t recommend making it too flashy and loaded with meaningless jargon like Blockchain, AI, IOT (unless you have done significant work on it) or make false claims as it only makes you look bad when you get asked about it in the interview and cannot answer it. Anyway most software engineering jobs today (in my potentially wrong opinion) are about making APIs and microservices, and all the related work around it, so having blockchain or IOT experience won’t necessarily translate directly to that or help in getting an interview.
I also highly recommend making your profile visible to recruiters as looking actively for a job. After I made this change, I almost immediately started getting tons of connection requests from recruiters wanting to hire me. I suspect this also had to do with the fact that I come from a “Tier-1” college, but it should at least be better than not having it turned on for everyone.
I also recommend making an account on Instahyre. I got a lot of messages from recruiters from there as well, and a lot of startups hire from here. Some of them might be good as well, so it is worth checking out.
I did apply to a lot of jobs on LinkedIn and Instahyre, but the offers that came to me materialized only out of the recruiters who directly contacted me.
Preparing for the Interview
Let me just make a blanket statement at this point: In my opinion, there are only two things that are important to cracking the interview for a junior software developer position — significant programming projects, and a strong grasp on algorithm and data structures basics. Everything else you can learn at your job. So don’t let things like “lack of experience in xxx technology” hold you back.
Interviews for SDE-1 type roles are only of three broad types: DS/Algo problem solving, managerial, and Software Coding — where you have to write a small software system whose specification they will give you. Not all companies will have all these rounds, but most good product companies will have at least the first two.
For the DS/Algo, I decided to stick with GeeksForGeeks, as it had all the material from the past interviews of all major product companies — Amazon and Flipkart to be particular. I went through many recent SDE-1 interview experience submissions for both these companies, and made a google sheet of all the problems that were asked, with links to their solutions on GeeksForGeeks. I also made an initial problem solving strategy, which although I did not follow to the letter, but helped me rapidly revise concepts and learn new ones as well. The strategy is as follows:
- Set timer for 20 minutes to come up with an approach.
- Read and understand question.
- Try to solve it within the timer bound. Not the implementation, only the approach.
- Look at solution and make notes if it is something new that you have learnt.
- Implement the solution on your own, if it is something new that you have learnt that you have not implemented before.
- Check off the problem from the google sheet, and add a short note there if the solution was something new.
In practice, it did not go exactly this way. I would set a timer and come up with an approach, but then I would learn that a different DS/Algo that I am not completely familiar with would give a much better solution. In my experience you don’t need to learn all the details of extremely esoteric algorithms and data structures that you come across in competitive programming, but you should have a solid grasp on the basic Data Structures, their related algorithms and other fundamental concepts — Graphs, Binary search trees, Heaps, Stacks, Queues, Linked lists, Dynamic Programming and basic algorithms for sorting, searching, tree traversals, etc. You can find several such lists on the internet, googling should help you for this.
So if I got any question that made me learn something new, I made notes and implemented the solution on my own (after reading but not copying the one provided) in C++ and STL. This took a lot more time in the beginning, but after a while these concepts started getting repeated in other questions as well, so I saved time later by putting in the initial effort. I skipped the questions that required very advanced algorithms or data structures, but there were only one or two of those, and indeed I was not tested on them in the interviews. I also skipped very easy questions, as they would not add any additional knowledge that I did not already have.
I recommend using C++ and STL as it has a lot of data structures and algorithms built in, and in problems where you are not required to implement them on your own, the STL library implementations will give you a huge boost to solve the problem easily. C++ solutions on GeeksForGeeks usually do include use of STL, and that should help you learn the library too. If they don’t include it, you should definitely google and search for implementations for common algorithms/data structures in STL that you may need to solve a problem, and that should also help you learn the basic set of approaches you can have while solving a problem.
One thing that I feel I did well was not spend too much time on finding an approach for any problem on my own. My intention was not to become an algorithms researcher who can come up with completely new algorithms on my own. It was to familiarize myself with the kind of questions that are generally asked, and getting comfortable with using a set of algorithms and data structures that I knew as tools for solving interview-type problems. Coming up with completely novel approaches to problems is not an expectation in any interview, in my experience.
For Software Coding I practiced only 1–2 problems asked in Flipkart in recent interviews. In hindsight, I should have followed a similar pattern and practiced getting my IDE set up, and solving a few more of these types, as doing this fresh in an interview setting will be difficult and an extra pressure.
I did not particularly prepare for the managerial round, but there are some HR-type questions that you should have a pre-defined answer for. I will cover this in more detail in the next part.
The Interview itself
I will cover the managerial interview type first. You should have ready your professional introduction — a short story of your professional life so far, the work you have done and the journey you have taken. Don’t introduce many personal elements in this story, and keep it small, and try to cover everything important in a 2–3 minute monologue. This would be the answer to the most common opening question — tell me about yourself.
The interviewer might take it from there in any direction they like — they might start grilling you on just one of your projects, in which case you should give an answer as honestly as possible, and if you don’t know something just admit it. They might also ask generally about your experiences, your learnings, your mistakes etc. In these kinds of questions, it is again best to remain honest. It is not an issue to strategically expose a one or two of your professional errors — as long as they are not too big and unacceptable — and explain what you learned from that experience and how you will make sure you will never let that mistake happen again.
An interviewer might also ask about your future plans, and its always the best bet to say that you intend to grow in the career ladder that their company has, and take a leadership role in the future. You should also be mentally ready to face ad-hoc questions that are unrelated to your role. For example, I was asked to solve a physics problem from my JEE days in my Flipkart interview. They are not looking to see if you can solve it, they are just observing how you think. You should not give up on this question and keep trying to solve it until they give up or until you have solved it.
This is true even for DS/Algo type questions. It is best if you are able to solve a question, but if you are not, the next best thing is to show that you are not giving up and asking questions. You should always ask clarifying questions for open ended problems given to you during the coding round like what are the constraints of the problem? What is the time and space complexity that they expect? After solving the problem with one approach, ask if they need further improvement on the time and space complexity. Such questions will be highly context driven, but it is important to ask. Also, think loudly — discuss your approach with the interviewer. They may give you feedback for your approach, which you should carefully consider and use to amend your solution.
Software Coding round in Flipkart: This happened only in Flipkart. It might be useful to try establishing a rapport with the interviewer and asking questions about the company and giving a brief introduction about yourself as well. They will give you a specification and expect you to code up the solution in 1.5 hours. There is no constraint on the language or tools you can use. It is useful to have your IDE set up and having practiced a few of these questions before going into the interview.
Bar Raiser round in Amazon: This is particular to Amazon. It is similar to a typical managerial round, but with the added twist that you should be familiar with the Leadership Principles of Amazon. Others have covered this type of interview in a lot more detail and some googling should have you prepared for this.
You should also have a few questions ready from your end to be asked to the interviewers if they ask you whether you have any questions for them. Don’t ask anything that you could have easily googled, like how much profit the company made in the last year, or something like that. Instead you can ask about their personal experience working at the company, how their typical day looks like, etc. I am not a fan of asking about work-life balance, as it might indicate to some that you are already making excuses to not work, but this is subjective. You might need to research a bit about the company and know the expectations of the role to craft meaningful questions before going into the interview. Do take some time to think about this, as a thoughtful question from your end can make all the difference.
Final Words
Overall, my recommendation is to stay polite, confident and keep your eyes and ears open. If you feel the need to prepare more, ask a friend or relative to help you out and take a mock interview.
Lastly, a failed interview is not the end of the world, and does not reflect on one’s capabilities. All these are only profit making corporations at the end of the day, and while having goals and dreams to join these companies is good, you should realize that you as a person are much more than just a job at a corporation, and your self worth should not be tied to it. I viewed it this way — if I failed it, I would be exactly where I was before with nothing lost. If I passed it, I would have a good job and make a decent living. There’s no downside to either case. There’s always another company you can interview at. Your happiness and mental health is more important than anything else. All the best!