Every organization, today is relentlessly pursuing to attract the best talent out there and to be the best employer, and the most diverse, inclusive and equitable place to work after all,
Good leadership requires you to surround yourself with people of diverse perspectives who can disagree with you without fear of retaliation. Doris Kearns Goodwin
I generally, have received a lot of interests to join my team during my leadership roles at various past start-ups/unicorns like Goodhealth, Delhivery and now, currently at Amazon and I have helped my organizations to always strive to hire and mentor the talent, along with helping it to achieve the goal to be one of the best employers.
Talent is the multiplier. The more energy and attention you invest in it, the greater the yield. Markus Buckingham
So, with my journeys and experiences as a part of the hiring committees and thus, guiding and driving the hiring initiatives and the processes at different places at different levels with different capacities, interviews as a standard process for hiring across different Software Development roles feels the right protocol to me personally.
Given, a large applicant pool on top of resource constraints in terms of hiring panel and their time, standard interviews for hiring across different roles goes a long way to give the best experience to the applicants with the aim to standardize the way of selecting the talent without any bias, with a smaller number of false positives.
As an interviewer and also, the part of hiring committees, my goal through interviews always has been to hire the right talent first and not reject upfront due to any bias. The interviews focus on evaluating the applicant fitment with us and my organization’s principles, so that after hiring the candidate, I can help set them up on the path to success in my organization with the right mentor-ship and coaching as a leader.
Also, read my article on the right approach to software engineering.
An organization, no matter how well designed, is only as good as the people who live and work in it. Dee Hock
This document serves as an interview guide for technical engineering positions, specifically targeted towards Software Engineering roles. Before going through the other sections further, here is my small disclaimer.
Disclaimer : I currently, work as an Engineering Leader at Amazon and I am actively guiding my team to “ hire and develop the best ”, along with helping Amazon strive “ to be the Earth’s best employer ”. Do reach out for referrals to get a chance to be part of my team by sending me a dm.
Based on your role, you will be expected to show those expectations required through the interview. The sections would be different across the interviews across different roles (for example, high level system design will not be relevant for junior SDEs), but the horizontals remain the same set of our core organizational culture and principles.
Let’s dive down into the expectations of the verticals of the technical engineering interviews.
The coding round focuses on time-bound problem solving and clean modular optimal code. The interviewer will ask a clear 1–2 problems in the 45 min interview along with asking on prior experiences to gauge your problem-solving approach and you will be expected to provide a clean optimal working code for the solution in your preferred language of choice and also, walk the interviewer through the solution and its space and time complexity analysis. It is important for you to cover all the edge cases, write test cases and even, evaluate any more optimal approaches.
The focus of this round is to test your problem-solving skills, which can also be learnt with practice and dedication, which is covered in the next section. Your dedication to learn the art of problem solving through efficient data structures and algorithms and then, using it to solve real world problems shows your perseverance and grit to learn and your curiosity to understand and solve hard technical problems.
The low-level design round focuses on checking your depth on how the code would be designed to solve a real-world design problem and your ability based on your coding experience to simplify and model a given real world problem. The interviewer will ask one or two partially ambiguous problem in the interview along with asking on prior experiences to gauge how you approach the problem using good design principles like — KISS, DRY, SOLID, OOPS design patterns (pre-made software blue prints like factory, adaptor, proxy etc) and you will be expected to provide a clean class structure, entities, their API interfaces and their encapsulated data and method and its coupling and interaction with other class entities or API interfaces to simulate the system and then, walk the interviewer through the solution.
The focus of this round is to test your understanding of how long-term maintainable code are written, which is mostly learned through good coding practices and experience.
The high-level system design round focuses on your ability to think at scale on how given an ambiguous problem statement, you will go ahead by gathering requirements — functional as well as non-functional and propose a system, which will scale big to solve that problem. The interviewer will ask one or two problems in the interview along with asking on prior experiences to gauge how you approach the problem using different tools and services around storage, network and compute while evaluating the system and resource constraints and trade-offs to design a large-scale system and then, walk the interviewer through the solution and even, be ready to show strength and commitment to justify and defend your design but also, the willingness and courage to incorporate any diverse idea or any other design the interviewer suggests.
The focus of this round is to test how you think at scale and your wisdom of how big systems are designed, built and scaled, which is mostly learned through experience.
Also, read my article on System Manifesto — the Wisdom for System Design , Philosophy of System Implementation and Principles for System Implementation based on my leanings and experiences of building large scale systems.
The Behavioral round focuses on your cultural fitment with the team and the organization based on your past experiences and projects working in different teams. The interviewer will ask multiple instances in the interview to gauge how you have behaved in different situations , what tasks you performed, what actions you took and what was the result, and they will be evaluated on whether they align with the right ethics and code of conduct aligning with the organization’s principles.
The focus of this round is to earn the trust of your interviewer and build their confidence that you will be able to fit in the culture and deliver the results.
The right preparation and a positive approach towards the interview will help you navigate the process and be part of the engineering organization, you are interviewing for.
Let’s dive down into the preparation of the verticals of the technical engineering interviews.
The coding round should be prepared by dedication to learn and be curious about the art of problem solving through data-structures and algorithms.
Here is a sample problem for this round:
Given a set S, write a program in your preferred language of choice to generate all subsets of it, i.e., find the power set of set S. A power set of any set S is the set of all subsets of S, including the empty set and S itself
For example, if S is the set \{x, y\}, then the subsets of S are: \{\}, \{x\}, \{y\}, \{x,y\}
Hence, the power set of S is \{\{\}, \{x\}, \{y\}, \{x, y\}\}, which should be the output of the program. Provide and cover all the test cases including null set and empty set...
These are the data-structures and algorithmic concepts, which are mostly covered and you should also learn them to apply in your daily tasks:
These are the resources to learn from in their preparation:
These are the small curated resources, you should focus, if you are frugal on time:
The low-level design round should be prepared by learning deeply about different design patterns and utilizing them to design entities and classes to solve the problem.
Here is a sample problem for this round:
Design a shopping cart checkout system.
Build a checkout system for a shop, which sells say, 2 products – Apples and Mangoes with the unit cost of an Apple as 1.5$, and a Mango as 1$.
Design the cart checkout system, which can have multiple of these products and provides their order total. For example :
2 Apple, 1 Mango = 4$
Define all the relevant class entities for the inventory as well as cart and their methods and how they will be coupled and invoked. Also, provide mechanisms to add new products (say, banana) into the inventory and also, modify prices of the products.
These are the design patterns and principles, which are mostly covered and you should also learn them to apply in your daily tasks:
These are the resources to learn in low level design preparation:
The high level design round should be prepared by thinking at scale about how different large scale systems like pastebin, twitter, Facebook feed, search engines etc. are designed and learning from them to design such large scale system.
Here is a sample problem for this round:
Design a URL shortener service.
Design a service, like bit.ly or tinyurl.com, that creates a short URL against the original long URL. When the user hits the short URL, they are redirected to the long URL against the shortened one.
These are the high-level system design concepts, which are mostly covered and you should also learn them to apply in your daily tasks:
These are the resources to dive deep into their preparation:
The behavioral round should be prepared by going through the culture and principles of your prospective employer and building your narrative of your past experiences and projects working in different teams based on those principles and culture.
Here is a sample problem for this round:
Tell us about an instance when you had to work with incomplete data or information. How did you make your decisions then?
Here are Amazon leadership principles, which you should definitely go through, if you are applying to Amazon. Send me a dm for referrals to Amazon ;)
These are the resources to prepare for behavioral or hiring manager round:
A positive approach towards the interview will keep you calm and focused during the interview and help you make it. As we are also trying to hire the next team-mate and based on your resume, you have been selected to be interviewed.
Simply, prepare well and be optimistic and positive during the interview.
Let’s dive down into the approach for the verticals of the technical engineering interviews.
Hope, you enjoyed going through the Technical Engineering Interview Guide.
Do reach out for referrals to get a chance to be part of my team at Amazon by sending me a dm. Feel free to go through our Amazon hiring FAQs and reach out to me or the recruiter for any further questions.
Looking forward to you giving your best on the day of the interview.
Good Luck!
The Technical Engineering Interview Guide was originally published in Technopreneurial Treatises on Medium, where people are continuing the conversation by highlighting and responding to this story.