After Months of Preparing for the Google Interview, I Got Hired by Amazon

The tech interview process is notorious for being long, arduous, and even demoralizing at times. It‘s a rite of passage that every software engineer must go through to prove their mettle and join the ranks of the world‘s most innovative companies.

As a self-taught web developer with over 15 years of experience, I knew I had a huge knowledge gap to fill when I set my sights on transitioning to a software engineering role at Google. I gave myself 8 months to study full-time and build up my computer science fundamentals from scratch.

The Journey Begins

I threw myself into my studies with a singular focus and determination. I pored over classic algorithms textbooks, worked through hundreds of coding problems, and filled countless notebooks with scribbles of data structures and Big O analyses.

Some of the key computer science concepts I focused on included:

  • Data structures: I built and manipulated countless linked lists, stacks, queues, trees, graphs, and hash tables. I learned how to evaluate the trade-offs between different data structures and choose the optimal one for a given problem.

  • Algorithms: I implemented and optimized classic algorithms such as binary search, quicksort, breadth-first search, depth-first search, Dijkstra‘s shortest path, and dynamic programming. I practiced evaluating the time and space complexity of my solutions using Big O notation.

  • Object-oriented design: I brushed up on OOP principles such as encapsulation, inheritance, and polymorphism. I practiced designing systems with clear abstractions, interfaces, and modularity in mind.

  • System design: I learned how to break down complex systems into manageable components, consider factors such as scalability, reliability, and maintainability, and communicate my design decisions clearly.

I supplemented my studying with a wealth of online resources. LeetCode and HackerRank became my go-to platforms for practicing coding problems. I worked through classic books such as "Cracking the Coding Interview" and "Elements of Programming Interviews". I took online algorithms courses, watched countless hours of technical interview videos, and even did mock interviews with friends and peers.

It was an intense and often stressful period. There were many times I felt overwhelmed, frustrated, and full of self-doubt. But I tried to stay focused on the larger goal and celebrate the small wins and breakthroughs along the way. I knew that consistent, deliberate practice was the only path forward.

Putting My Skills to the Test

After 8 months of rigorous studying, I finally felt ready to tackle the Google interview. I was excited and nervous as I flew out to the Google campus for a full day of technical interviews.

The Google interview process is known for being one of the toughest in the industry. The typical software engineering candidate goes through:

  • 1-2 phone screens involving coding and algorithm problems
  • 1 take-home coding assessment
  • 5-6 on-site interviews testing algorithms, data structures, system design, and soft skills

Only a tiny fraction of applicants make it to the on-site stage, and an even smaller percentage receives an offer. According to a former Google recruiter, Google historically extended offers to only about 0.2% of all applicants.

I gave it my all during the interviews. I solved dynamic programming problems, designed a distributed web crawler, and waxed poetic about hash tables. I walked out feeling cautiously optimistic – I thought I had done well, but I knew the bar was extremely high.

Ultimately, I didn‘t get an offer from Google. It was a painful rejection that stung my ego and made me question my abilities. But after the initial disappointment subsided, I realized that I had grown immensely during the process. I was a much stronger engineer than I was 8 months prior, and I had developed valuable skills, discipline, and mental toughness.

Picking Myself Back Up

I allowed myself a short break to recharge, then I got back to work. I reached back out to my network (including new connections I had made during my interview prep), polished up my resume and online profiles, and began applying and interviewing at other top tech companies.

Amazon in particular stood out to me as an exciting opportunity. I had admired Amazon‘s customer obsession, bold innovation, and scrappy startup-like culture for years. I knew engineers there were empowered to take ownership, experiment, and drive impactful projects.

Amazon‘s leadership principles deeply resonated with me:

  • Customer Obsession: Start with the customer and work backwards.
  • Ownership: Think like an owner, with a long-term perspective.
  • Bias for Action: Speed matters. Calculated risk-taking is encouraged.
  • Invent and Simplify: Innovate, streamline, and eliminate complexity.

I studied Amazon‘s leadership principles and prepared specific examples of how I embodied them in my work. I did my homework on Amazon‘s businesses and brainstormed ideas for how I could contribute and add value.

Acing the Amazon Loop

I applied online to Amazon and was excited to quickly receive a request for a phone interview. The Amazon interview process moved rapidly:

  1. One phone screen with a hiring manager, focusing on coding and algorithms
  2. One online coding assessment, involving two algorithm problems under time pressure
  3. A "loop" of 4-5 hour-long video interviews, covering algorithms, system design, and behavioral questions

The phone screen went well as I walked through an optimal solution to a string manipulation problem. The online assessment was challenging but I was able to solve both problems with a few minutes to spare.

The video loop was intense but actually fun. My interviewers were kind and genuinely seemed to want me to succeed. I had the opportunity to dive deep into the details of designing a scalable distributed system, something I had prepared extensively for. The behavioral discussions flowed naturally as I related Amazon‘s leadership principles to my own experiences and values.

Throughout the interviews, I focused on:

  • Thinking out loud and communicating my problem-solving process
  • Asking clarifying questions and using test cases to verify my understanding
  • Discussing trade-offs and alternative solutions
  • Exhibiting strong coding skills with proper abstractions, error handling, and test coverage
  • Showing cultural fit by relating my work style and goals back to Amazon‘s principles

A week later, I received the thrilling call – Amazon wanted to make me an offer as a Software Development Engineer! After months of grinding through interview prep and facing setbacks and rejections, I had finally achieved my goal of joining a top-tier tech company. I was overjoyed and deeply grateful for the opportunity.

Diving into AWS

My role at Amazon will be on the AWS Config team, part of the rapidly growing Amazon Web Services division. AWS Config is a service that helps customers assess, audit, and evaluate the configurations and compliance of their AWS resources.

I‘m excited to dive into the complex technical challenges of building a highly scalable and performant system that processes trillions of configuration changes across millions of AWS accounts. Some of the key AWS Config features I‘ll be working on include:

  • Configuration snapshots: Capturing point-in-time snapshots of all supported resource configurations, which can be used for auditing, compliance, and root cause analysis.

  • Config rules: Enabling customers to define custom rules that automatically check resource configurations against desired settings. Rules can be triggered by configuration changes or run on a recurring schedule.

  • Compliance reporting: Generating compliance reports and dashboards showing which resources are conformant vs. non-conformant to defined rules and standards.

  • Multi-account data aggregation: Collecting and aggregating configuration data across multiple AWS accounts and regions for centralized visibility and control.

I‘ll be using a wide range of AWS technologies to build and scale these features, likely including DynamoDB, Lambda, SNS, S3, and more. I‘m thrilled to deepen my AWS expertise and learn from the incredibly talented engineers on my team.

Lessons Learned

Looking back, I‘m grateful for the challenging journey I went through to land my dream job at Amazon. The intense preparation and interviewing process taught me invaluable lessons:

  1. Ambitious goals are powerful. Setting a specific, ambitious goal (getting hired at a top tech company) gave me a north star to focus on when the going got tough. The goal motivated me to study longer, push through frustrations, and bounce back from setbacks.

  2. Consistent hard work pays off. There‘s no shortcut to building deep technical skills and problem-solving abilities – it takes hours of deliberate, focused practice. Small improvements compound over time into significant growth. Even when progress feels slow, keep putting in the reps.

  3. Embrace the struggle. Learning complex concepts and solving difficult problems is meant to be challenging. Embrace the discomfort and view failures and mistakes as valuable learning experiences. When you feel uncomfortable, that‘s often when you‘re growing the most.

  4. Mindset is everything. Your thoughts and beliefs play a huge role in your actions and outcomes. Cultivate a mindset of curiosity, optimism, and determination. Focus on the variables within your control and let go of the rest.

  5. It‘s a marathon, not a sprint. Pace yourself and prioritize rest and recovery. Taking breaks and disconnecting regularly will keep you energized and prevent burnout in the long run. Trust in the process and keep a long-term perspective.

To aspiring software engineers going through the interview process – keep putting in the work and believing in yourself. The path is long and winding, but with grit and persistence, you will reach your destination.

"The brick walls are there for a reason. The brick walls are not there to keep us out. The brick walls are there to give us a chance to show how badly we want something. Because the brick walls are there to stop the people who don‘t want it badly enough." – Randy Pausch

I‘m excited to begin the next chapter of my journey at Amazon and tackle new challenges with the AWS Config team. I aim to approach each day with beginner‘s mind, curiosity, and a bias for action. I‘ll be sharing more updates on my experiences and learnings – you can follow along on my blog, LinkedIn, and Twitter.

The future is bright and full of possibilities. Onward and upward!

Similar Posts