Frank spent 9 years at Amazon and IMDb, developing and managing the technology that automatically delivers product and movie recommendations to hundreds of millions of customers, all the time. Frank holds 17 issued patents in the fields of distributed computing, data mining, and machine learning. In 2012, Frank left to start his own successful company, Sundog Software, which focuses on virtual reality environment technology, and teaching others about big data analysis.
Mastering the System’s Design Interview: Asking the Right Questions (Part 1)
By Frank Kane
This article is an excerpt from our Mastering the System’s Design Interview course. In this section, we will dive into the key questions you should ask during your interview to help you stand out from the crowd.
When it comes to an interview, your ability to navigate the interview is just as important as your skills and credentials.
Your potential employer is not only evaluating your technical expertise but also how you approach problems in general and how you work with others. That is equally important to the technology that you’re invoking.
So, let’s discuss strategies for getting through the interview itself successfully. These are more about soft skills and how you approach problems than the actual technologies themselves. As an interviewer at Amazon, where I did thousands of these interviews, this is what I’m looking for more than anything else.
I want you to come up with a solution that makes sense, but it’s less important to me that you finish and describe a fully fleshed-out system that scales. I’m more interested in whether you can take feedback from me.
How do you respond to my direction?
How well do you work with me?
How do you think?
How do you approach problems?
Usually, in a system design interview question, you’re going to be given some incredibly vague problem to solve – and that is intentional. The interviewer wants you to break that down and clarify the requirements of what you’re asking them to build.
I might give you some incredibly high-level things, like “design YouTube for me”, or “design Google search please”. Some people will just sit there and look like a deer in headlights and quietly cry to themselves a little bit (they don’t really, at least I hope not).
The successful interviewee will say, “Okay, let’s break that down and see what you really want me to do.” The first step is to turn this vague direction they’ve given you into concrete requirements.
Always start by repeating the question. That’s just a basic communication skill. If someone’s asking you to do something, just to repeat it back to them and make sure that you understand it properly.
So, if I say, “design YouTube”, the first thing you should say is, “okay, you want me to design YouTube, you know, the big video streaming service” and make sure you’re on the same page.
2. Now, it’s time to ask lots of questions.
Break that down into what they really want you to build.
Clarify what the requirements for it are.
Think out loud.
3. As you approach a problem, don’t just sit there in silence. That’s not doing you any good. Let your interviewer see your thought process.
As you’re thinking about different strategies and the pros and cons of them, don’t keep it inside your head where the interviewer can’t see it. Talk about it as you’re thinking through it. That will give the interviewer a chance to steer you in the right direction, which is going to help you.
Learn more strategies on how to Master your System Design Interview today with our Mastering the Systems Design Interview Course. Click here to enroll today.
Stay tuned for part two of this series, coming soon.
Ace your System Interview with these Strategies – Part 2
By Frank Kane
This article is an excerpt from our course, Mastering the Systems Design Interview. As part 2 of our series, this article will share strategies & skills to help you master your Systems Design Interview. In part 1, we went through how to ask the right questions to stand out in the interview. Click here to review part one.
Now let’s dive in. First and foremost, you want to let your interviewer see your thought process. As you’re thinking about different strategies and the pros and cons of them, don’t keep it inside your head where the interviewer can’t see it. Talk about it as you’re thinking through it. That will give the interviewer a chance to steer you in the right direction, which is only going to help you.
Start by repeating the question and then break it down into specific requirements.
If I say “design Youtube,” you should say, “Okay, you want me to design Youtube. What part of YouTube do you want me to design? There are many components to YouTube, like recommendations, editing content, channels, advertisements, and managing payments to people.
What piece do you want me to focus on?
Is it just the storing and the serving of the videos themselves?”
Odds are they’ll say, “yeah, let’s just focus on that” because obviously, you’re not going to design all of YouTube in 20 minutes.
So, narrow the problem down to what they really want you to do. Then ask more clarifying questions. How many videos are we talking about? How much traffic are we talking about?
They might push back on you and say, “well, what do you think it is?” You might have to estimate that yourself. But just make sure you come to an agreement about what the scale of the problem really is, and what the requirements are in terms of latencies or availability. Those requirements will inform what tradeoffs you can make in your design.
You might also ask about the budget. Do I have infinite money and infinite servers to throw at this? Or do I have cost constraints to think about as well? Clarify those requirements upfront. As you start to think about what the implications of those requirements are, talk about it.
I’ve seen one other system design interview prep course, and the instructor’s advice
was to start off by saying, “okay, can I think about this for five minutes?” I think that’s a terrible idea. Don’t just sit there in silence for five minutes. It’s awkward, and the interviewer doesn’t get any insight into your thought process, which is what they really want to see. So, no, do not just sit there in silence for five minutes while you think about it. Think out loud, and let the interviewer see how you approach the problem.
Once you understand what those requirements are, a good idea is to work backward from the customer experience. It’s very tempting to start with your favorite technology and say, “oh, okay, I want to use Apache Spark and a deep neural network for this problem,” and work forwards from your favorite technologies in hopes that you end up with a solution that meets the customer requirements.
A better approach is to work backward from those customer requirements and figure out what technologies meet those requirements. For example, say we’re asked to design YouTube. You need to vend massive amounts of videos all around the world at very low latency and at a massive scale. That probably means you need to use a CDN for the most popular videos at least. Where does the data come from that feeds that CDN, and how is that data cataloged? How do I access it? Work backward from the end user to the CDN, to the distributed data store that feeds that CDN, to the systems that populate that data store. That’s working backward from the customer, as opposed to working forwards from the lowest level technology and hoping you arrive at the right place.
Working backward will gain you major points at Amazon in particular because it is a very core piece of their entire culture. You are routinely expected and evaluated on how well you work backward from the customer at Amazon. Simply saying during an interview, “I’m going to work backward from the customer experience here,” will earn you a ton of goodwill at an Amazon system design interview. But even outside of Amazon, working backward is the right way to do it. Most experienced interviewers will appreciate this approach.
Tying it back to our YouTube example again, we might start off by asking clarifying questions. How will users discover the videos? Do we need to think about building a search engine or a recommender engine or an advertising engine? Figure out what the customer experience is that you’re being asked to deliver. What piece of that experience are you being asked to design? Start by understanding what customer experience you’re being asked to deliver, and then work backward from that customer experience to the technical components that you need to deliver it.
You must first identify who the customers are.
Are these people all around the world?
Are they in one specific region primarily?
Are they accessing your data at weird times, or are there weird peaks in traffic that we need to worry about?
What are their use cases?
What are they trying to do?
In our YouTube example, they’re trying to find a video and play it back in a reliable manner. They don’t want to see any buffering.
Which use cases do you need to concern yourself with? Don’t paint yourself into a corner where you’re trying to design all of YouTube in 20 minutes or all of Google or all of Amazon. Make sure you define upfront what piece of it they really want you to do.
Your first task in any system design interview is to clarify the requirements of what you’re being asked to design. Clarify them in terms of the customer experience whenever possible. Your interviewer is really trying to see that you can think about problems from a business perspective and not just a technical perspective. If you start with the customer experience and focus on that, that shows me that you can think about this like a business owner would. You’re thinking about how this technology will provide an experience to this company’s customers that can make them money down the road. Your job is not just about applying cool technology. It’s about finding solutions for delivering new compelling customer experiences.
Once you’ve defined the customer experience you’re trying to deliver, what do you ask about next?
You need to define the scaling requirements of the system you’re being asked to deliver. Nail down what the scale of the system really is. Are we talking about hundreds of users or millions of users? That makes a big difference as to what sort of technologies you will invoke. And it will inform you of the need for horizontal partitioning. If the scale is massive, then you know you need some sort of horizontally scaled solution. You can’t just throw one giant database at it or one giant web server. You need some sort of distributed system. And if it’s truly massive, maybe you need to rely on cloud storage solutions like S3, where somebody else is managing all that cost and complexity for us.
Also, understand how often the users are coming. What kind of transaction rates are we talking about that we need to support? Again, if it’s large rates of transactions, you will need many servers at the front end to manage those transactions. Think about how those transactions are distributed across different data centers and across the world.
Also, define the scale of the data. That data must come from somewhere, and it probably needs to be processed in some way. Are we talking about hundreds of videos, millions of videos, or billions of videos? If it’s a really big number, we need some sort of distributed system for processing and storing that data. You will need to employ every trick in the book for horizontally scaling your servers, your data storage, and your data processing.
But not every problem warrants that sort of approach. If you’re being asked to design some internal tool only used by some department within your company, you don’t need that level of complexity and expense. You should always prefer the simplest solution that will meet the requirements. But generally, if you’re being asked to design a system for a large company, they’re asking you to design something at a massive scale. Often, the answer will be some sort of horizontally scaled solution, but at least articulate that, ‘Hey, this is massive scale. I need to do horizontal scaling’.
In the off chance that you’re being asked to design something smaller, go for simplicity and explicitly say that’s what you’re doing. Say, “hey, I know we could throw a big Hadoop cluster at this problem or some big distributed Elasticsearch cluster, but I don’t need to. I don’t want to have to maintain all those services if I don’t need to. And I don’t want to be paying a big web services bill either, so why take on that complexity where I can just have a database and a backup database and a few web servers in front of it and be done with it? ”
Learn more strategies on how to Master your System Design Interview today with our Mastering the Systems Design Interview Course.
In this course, you will get tips, tricks, and practice interviews with a former hiring manager from Amazon, who interviewed thousands of software engineers and hired hundreds.
Frank Kane will share the secrets of what your interviewer is looking for and the technologies you’re expected to know. And we all know practice makes perfect, so you’ll also get six mock system design interviews with real-world interview questions from the biggest tech employers.
A technical interview loop is a demanding process, and the system design part is often the most challenging. This course gets you prepared, and maximizes your odds of landing a new job that could change your life.
This course includes 5 hours of on-demand video content that will cover everything you need to know before starting your next interview:
Techniques for scaling distributed systems and service fleets
Database technologies and “NoSQL” solutions
Use of caching to improve scalability and performance
Designing for resiliency and handling failures
Distributed storage solutions
A review of algorithms and data structures
Processing big data with Apache Spark
An overview of cloud computing resources
Interview strategies for structuring your system design interview
Six full mock interviews with real-world system design interview questions
General tips and tricks for a successful technical interview
This course is for experienced software engineers who need some extra preparation prior to a challenging system design interview.
This course is currently available at sundog-education.com and also will be available on Udemy soon…but you’ll only be able to get it at its BESTprice of $9.99 at sundog-education.com (now through the end of the month)!
Enroll today, and you’ll have every advantage going into your next tech interview!
This week we’ve rounded up some of the latest news in big data and machine learning for you. Including the difference between mathematical optimization and machine learning, and man-machine collaboration.
As an instructor on Udemy, I’m always looking for new ways to help my students learn about big data and machine learning. If you’re interested, check out my latest post on Udemy’s blog: Machine Learning Engineer vs Data Scientist – https://bit.ly/399v2PC
This week we’ve rounded up some of the latest news in big data for you. Including how we can protect the rainforests with big data, big data is revolutionizing NYC apartment hunting, and healthcare is the next step of data liberation.
We’ve been busy updating our Ultimate Hands On Hadoop – Tame your Big Data course!
Cloudera threw us for a loop when they suddenly cut off access to their software repositories to people who are not paid customers; this caused a lot of the hands-on activities in the course to no longer work as they used to.
Not to worry; we’ve found workarounds for all of the activities affected, and re-recorded the associated lectures to ensure you have a smooth experience while working through this course.
If you ran into trouble recently, go back and try again – there may be updated steps to get you through it now.
The latest news in AI, Machine Learning, and Data Science includes; the environmental impact of deep learning, the most in-demand skills for data scientists in 2021, and how a winery is using AI to improve their crop.
Get the rest of the latest news in AI, Data Science & Deep Learning below.
We recently updated our AWS Certified Data Analytics prep course on Udemy for changes in 2021. S3 now offers strong consistency, making EMRFS consistent by default. Amazon’s guidance for choosing instance types for EMR clusters has also been updated, and the maximum retention period for Kinesis has increased from 7 to 365 days. We don’t know how quickly the exam will adapt to these changes, but you’ll know about them when they do.
Cloudera has also been making some changes to their pricing to require subscriptions for pretty much everything, and as such, they’ve made the free Hortonworks Data Platform Sandbox (which we use in our Ultimate Hands-On Hadoop course) hard to find. We’ve updated our setup lecture to point you in the right place for that.
There have been numerous other small updates to most of our courses since our last update; the start of the year tends to come with a lot of change. But as always, we remain committed to keeping our courses up to date for you!
The latest news in data science and machine learning includes four predictions for AI & Machine Learning in 2021, how AI can improve website security, and public datasets are improving decision making.
Everyone knows machine learning is a hot skill and a lucrative one. According to Glassdoor, the average base pay for a machine learning engineer as we enter 2021 is more than $114,000 per year in the United States.
Many employers also offer more perks, such as bonuses and equity, that can amount to much more than your base pay as your machine learning engineer career progresses.
Landing a machine learning engineering job isn’t easy, however. The skills and experience you need are broader than you may think, and they fall under a variety of different job titles.
In this recent blog I wrote on Udemy I share How to Become a Machine Learning Engineer in 2021 – click here to read the full blog: https://bit.ly/2K4MFXM
The latest news in data science, machine learning, and AI includes, machine learning helping reduce carbon emissions, AI predicting criminal behavior, and master data eating AI for breakfast. For the rest of the latest news scroll down.