Full transcript of prepare-system-design-interviews. Source: https://www.youtube.com/watch?v=Ru54dxzCyD0
WEBVTT Kind: captions Language: en
00:00:00.240 —> 00:00:01.829 align:start position:0%
If<00:00:00.400>
00:00:01.829 —> 00:00:01.839 align:start position:0% If you click play on this video, then
00:00:01.839 —> 00:00:03.110 align:start position:0%
If you click play on this video, then
you<00:00:02.000>
00:00:03.110 —> 00:00:03.120 align:start position:0% you probably have an interview coming
00:00:03.120 —> 00:00:04.789 align:start position:0%
you probably have an interview coming
up.<00:00:03.679>
00:00:04.789 —> 00:00:04.799 align:start position:0% up. My guess is that you feel good about
00:00:04.799 —> 00:00:06.230 align:start position:0%
up. My guess is that you feel good about
how<00:00:04.960>
00:00:06.230 —> 00:00:06.240 align:start position:0% how to prepare for coding interviews,
00:00:06.240 —> 00:00:08.190 align:start position:0%
how to prepare for coding interviews,
but<00:00:06.560>
00:00:08.190 —> 00:00:08.200 align:start position:0% but system design makes you a little bit
00:00:08.200 —> 00:00:10.629 align:start position:0%
but system design makes you a little bit
nervous.<00:00:09.200>
00:00:10.629 —> 00:00:10.639 align:start position:0% nervous. I’m Evan. I’m a former Meta
00:00:10.639 —> 00:00:12.150 align:start position:0%
nervous. I’m Evan. I’m a former Meta
Staff<00:00:10.880>
00:00:12.150 —> 00:00:12.160 align:start position:0% Staff engineer and I’ve conducted many
00:00:12.160 —> 00:00:13.830 align:start position:0%
Staff engineer and I’ve conducted many
hundreds<00:00:12.480>
00:00:13.830 —> 00:00:13.840 align:start position:0% hundreds of interviews. And I’m now the
00:00:13.840 —> 00:00:15.990 align:start position:0%
hundreds of interviews. And I’m now the
co-founder<00:00:14.320>
00:00:15.990 —> 00:00:16.000 align:start position:0% co-founder of Hello Interview. Hello
00:00:16.000 —> 00:00:17.189 align:start position:0%
co-founder of Hello Interview. Hello
Interview<00:00:16.240>
00:00:17.189 —> 00:00:17.199 align:start position:0% Interview is a platform that helps
00:00:17.199 —> 00:00:18.710 align:start position:0%
Interview is a platform that helps
candidates<00:00:17.680>
00:00:18.710 —> 00:00:18.720 align:start position:0% candidates just like you prepare for
00:00:18.720 —> 00:00:20.790 align:start position:0%
candidates just like you prepare for
their<00:00:18.880>
00:00:20.790 —> 00:00:20.800 align:start position:0% their upcoming interviews. In this role,
00:00:20.800 —> 00:00:22.070 align:start position:0%
their upcoming interviews. In this role,
I’ve<00:00:21.039>
00:00:22.070 —> 00:00:22.080 align:start position:0% I’ve now worked with hundreds of
00:00:22.080 —> 00:00:23.670 align:start position:0%
I’ve now worked with hundreds of
thousands<00:00:22.400>
00:00:23.670 —> 00:00:23.680 align:start position:0% thousands of candidates. And through
00:00:23.680 —> 00:00:24.870 align:start position:0%
thousands of candidates. And through
that,<00:00:23.920>
00:00:24.870 —> 00:00:24.880 align:start position:0% that, I’ve gained a really good
00:00:24.880 —> 00:00:26.470 align:start position:0%
that, I’ve gained a really good
understanding<00:00:25.359>
00:00:26.470 —> 00:00:26.480 align:start position:0% understanding of what works and what
00:00:26.480 —> 00:00:28.470 align:start position:0%
understanding of what works and what
doesn’t.<00:00:27.439>
00:00:28.470 —> 00:00:28.480 align:start position:0% doesn’t. And so I know that system
00:00:28.480 —> 00:00:30.550 align:start position:0%
doesn’t. And so I know that system
design<00:00:28.800>
00:00:30.550 —> 00:00:30.560 align:start position:0% design can feel incredibly overwhelming,
00:00:30.560 —> 00:00:33.110 align:start position:0%
design can feel incredibly overwhelming,
but<00:00:30.800>
00:00:33.110 —> 00:00:33.120 align:start position:0% but it doesn’t have to be. The key, just
00:00:33.120 —> 00:00:34.709 align:start position:0%
but it doesn’t have to be. The key, just
like<00:00:33.280>
00:00:34.709 —> 00:00:34.719 align:start position:0% like with leak code for coding prep, is
00:00:34.719 —> 00:00:37.190 align:start position:0%
like with leak code for coding prep, is
to<00:00:34.880>
00:00:37.190 —> 00:00:37.200 align:start position:0% to work backwards from common problems.
00:00:37.200 —> 00:00:38.549 align:start position:0%
to work backwards from common problems.
I’m<00:00:37.360>
00:00:38.549 —> 00:00:38.559 align:start position:0% I’m going to tell you exactly which
00:00:38.559 —> 00:00:40.389 align:start position:0%
I’m going to tell you exactly which
problems<00:00:39.040>
00:00:40.389 —> 00:00:40.399 align:start position:0% problems I would focus on and in what
00:00:40.399 —> 00:00:42.069 align:start position:0%
problems I would focus on and in what
order<00:00:40.879>
00:00:42.069 —> 00:00:42.079 align:start position:0% order a little bit later on in this
00:00:42.079 —> 00:00:44.310 align:start position:0%
order a little bit later on in this
video.<00:00:42.800>
00:00:44.310 —> 00:00:44.320 align:start position:0% video. But before diving into specific
00:00:44.320 —> 00:00:46.110 align:start position:0%
video. But before diving into specific
questions,<00:00:45.120>
00:00:46.110 —> 00:00:46.120 align:start position:0% questions, you would need a basic
00:00:46.120 —> 00:00:47.990 align:start position:0%
questions, you would need a basic
foundation.<00:00:47.120>
00:00:47.990 —> 00:00:48.000 align:start position:0% foundation. And so the first thing I
00:00:48.000 —> 00:00:49.190 align:start position:0%
foundation. And so the first thing I
would<00:00:48.079>
00:00:49.190 —> 00:00:49.200 align:start position:0% would do is I would understand what the
00:00:49.200 —> 00:00:51.389 align:start position:0%
would do is I would understand what the
hell<00:00:49.360>
00:00:51.389 —> 00:00:51.399 align:start position:0% hell a system design interview actually
00:00:51.399 —> 00:00:54.150 align:start position:0%
hell a system design interview actually
is.<00:00:52.399>
00:00:54.150 —> 00:00:54.160 align:start position:0% is. Then I would go ahead and refresh on
00:00:54.160 —> 00:00:55.510 align:start position:0%
is. Then I would go ahead and refresh on
my<00:00:54.320>
00:00:55.510 —> 00:00:55.520 align:start position:0% my fundamentals. These are going to be
00:00:55.520 —> 00:00:57.189 align:start position:0%
my fundamentals. These are going to be
concepts<00:00:55.840>
00:00:57.189 —> 00:00:57.199 align:start position:0% concepts that you likely learned back in
00:00:57.199 —> 00:00:59.590 align:start position:0%
concepts that you likely learned back in
college<00:00:57.440>
00:00:59.590 —> 00:00:59.600 align:start position:0% college and just need a touch up. From
00:00:59.600 —> 00:01:01.430 align:start position:0%
college and just need a touch up. From
here,<00:00:59.840>
00:01:01.430 —> 00:01:01.440 align:start position:0% here, I’d get familiar with the basic
00:01:01.440 —> 00:01:03.349 align:start position:0%
here, I’d get familiar with the basic
components<00:01:01.920>
00:01:03.349 —> 00:01:03.359 align:start position:0% components that are present in in almost
00:01:03.359 —> 00:01:06.070 align:start position:0%
components that are present in in almost
every<00:01:03.520>
00:01:06.070 —> 00:01:06.080 align:start position:0% every single system design. And then we
00:01:06.080 —> 00:01:07.590 align:start position:0%
every single system design. And then we
can<00:01:06.240>
00:01:07.590 —> 00:01:07.600 align:start position:0% can finally start to work backwards from
00:01:07.600 —> 00:01:09.350 align:start position:0%
can finally start to work backwards from
those<00:01:07.760>
00:01:09.350 —> 00:01:09.360 align:start position:0% those common problems so that we can
00:01:09.360 —> 00:01:11.910 align:start position:0%
those common problems so that we can
build<00:01:09.600>
00:01:11.910 —> 00:01:11.920 align:start position:0% build a deeper understanding. Now,
00:01:11.920 —> 00:01:13.190 align:start position:0%
build a deeper understanding. Now,
you’ll<00:01:12.159>
00:01:13.190 —> 00:01:13.200 align:start position:0% you’ll probably note this strategy
00:01:13.200 —> 00:01:15.030 align:start position:0%
you’ll probably note this strategy
mirrors<00:01:13.600>
00:01:15.030 —> 00:01:15.040 align:start position:0% mirrors how you’re already preparing for
00:01:15.040 —> 00:01:17.190 align:start position:0%
mirrors how you’re already preparing for
coding<00:01:15.360>
00:01:17.190 —> 00:01:17.200 align:start position:0% coding interviews, identifying patterns
00:01:17.200 —> 00:01:19.270 align:start position:0%
coding interviews, identifying patterns
across<00:01:17.680>
00:01:19.270 —> 00:01:19.280 align:start position:0% across problems rather than memorizing
00:01:19.280 —> 00:01:21.510 align:start position:0%
across problems rather than memorizing
random<00:01:19.680>
00:01:21.510 —> 00:01:21.520 align:start position:0% random solutions. Let me show you what I
00:01:21.520 —> 00:01:23.749 align:start position:0%
random solutions. Let me show you what I
mean.<00:01:21.920>
00:01:23.749 —> 00:01:23.759 align:start position:0% mean. So, first off, what is a system
00:01:23.759 —> 00:01:25.749 align:start position:0%
mean. So, first off, what is a system
design<00:01:24.080>
00:01:25.749 —> 00:01:25.759 align:start position:0% design interview? Well, a system design
00:01:25.759 —> 00:01:27.190 align:start position:0%
design interview? Well, a system design
interview<00:01:26.080>
00:01:27.190 —> 00:01:27.200 align:start position:0% interview evaluates your ability to
00:01:27.200 —> 00:01:29.830 align:start position:0%
interview evaluates your ability to
architect<00:01:27.759>
00:01:29.830 —> 00:01:29.840 align:start position:0% architect complex, scalable systems that
00:01:29.840 —> 00:01:32.149 align:start position:0%
architect complex, scalable systems that
solve<00:01:30.159>
00:01:32.149 —> 00:01:32.159 align:start position:0% solve real world problems. Sounds like
00:01:32.159 —> 00:01:34.069 align:start position:0%
solve real world problems. Sounds like
something<00:01:32.320>
00:01:34.069 —> 00:01:34.079 align:start position:0% something out of a textbook. What is it
00:01:34.079 —> 00:01:35.910 align:start position:0%
something out of a textbook. What is it
really?<00:01:34.720>
00:01:35.910 —> 00:01:35.920 align:start position:0% really? You come to a whiteboard. The
00:01:35.920 —> 00:01:37.429 align:start position:0%
really? You come to a whiteboard. The
interviewer<00:01:36.320>
00:01:37.429 —> 00:01:37.439 align:start position:0% interviewer asks you to design a system,
00:01:37.439 —> 00:01:39.190 align:start position:0%
interviewer asks you to design a system,
something<00:01:37.680>
00:01:39.190 —> 00:01:39.200 align:start position:0% something like Ticket Master or Uber,
00:01:39.200 —> 00:01:41.270 align:start position:0%
something like Ticket Master or Uber,
and<00:01:39.439>
00:01:41.270 —> 00:01:41.280 align:start position:0% and you draw boxes explaining at a high
00:01:41.280 —> 00:01:43.510 align:start position:0%
and you draw boxes explaining at a high
level<00:01:41.600>
00:01:43.510 —> 00:01:43.520 align:start position:0% level what services and interactions are
00:01:43.520 —> 00:01:45.910 align:start position:0%
level what services and interactions are
necessary<00:01:44.240>
00:01:45.910 —> 00:01:45.920 align:start position:0% necessary to pull off designing the
00:01:45.920 —> 00:01:47.830 align:start position:0%
necessary to pull off designing the
system.<00:01:46.560>
00:01:47.830 —> 00:01:47.840 align:start position:0% system. You’re not writing code. It’s
00:01:47.840 —> 00:01:50.469 align:start position:0%
system. You’re not writing code. It’s
typically<00:01:48.159>
00:01:50.469 —> 00:01:50.479 align:start position:0% typically just boxes and arrows. Now,
00:01:50.479 —> 00:01:51.830 align:start position:0%
typically just boxes and arrows. Now,
this<00:01:50.640>
00:01:51.830 —> 00:01:51.840 align:start position:0% this diagram shows that there are a few
00:01:51.840 —> 00:01:53.670 align:start position:0%
this diagram shows that there are a few
types<00:01:52.159>
00:01:53.670 —> 00:01:53.680 align:start position:0% types of heavily overlapping design
00:01:53.680 —> 00:01:55.990 align:start position:0%
types of heavily overlapping design
interviews.<00:01:54.640>
00:01:55.990 —> 00:01:56.000 align:start position:0% interviews. In this video, we’re talking
00:01:56.000 —> 00:01:58.149 align:start position:0%
interviews. In this video, we’re talking
about<00:01:56.320>
00:01:58.149 —> 00:01:58.159 align:start position:0% about by far the most common, which are
00:01:58.159 —> 00:02:01.030 align:start position:0%
about by far the most common, which are
product<00:01:58.560>
00:02:01.030 —> 00:02:01.040 align:start position:0% product and infraesign problems. Now, a
00:02:01.040 —> 00:02:02.789 align:start position:0%
product and infraesign problems. Now, a
product<00:02:01.360>
00:02:02.789 —> 00:02:02.799 align:start position:0% product problem, this is when you’re
00:02:02.799 —> 00:02:04.630 align:start position:0%
product problem, this is when you’re
designing<00:02:03.040>
00:02:04.630 —> 00:02:04.640 align:start position:0% designing an app or a website that you
00:02:04.640 —> 00:02:07.270 align:start position:0%
designing an app or a website that you
use<00:02:04.880>
00:02:07.270 —> 00:02:07.280 align:start position:0% use every day. Something like Dropbox or
00:02:07.280 —> 00:02:09.190 align:start position:0%
use every day. Something like Dropbox or
Uber,<00:02:07.840>
00:02:09.190 —> 00:02:09.200 align:start position:0% Uber, Netflix, all these things that
00:02:09.200 —> 00:02:11.910 align:start position:0%
Uber, Netflix, all these things that
that<00:02:09.440>
00:02:11.910 —> 00:02:11.920 align:start position:0% that you know well. Infra, on the other
00:02:11.920 —> 00:02:13.750 align:start position:0%
that you know well. Infra, on the other
hand,<00:02:12.239>
00:02:13.750 —> 00:02:13.760 align:start position:0% hand, infrastructure design problems,
00:02:13.760 —> 00:02:16.390 align:start position:0%
hand, infrastructure design problems,
these<00:02:14.000>
00:02:16.390 —> 00:02:16.400 align:start position:0% these are non-userfacing systems. So
00:02:16.400 —> 00:02:17.750 align:start position:0%
these are non-userfacing systems. So
components<00:02:16.879>
00:02:17.750 —> 00:02:17.760 align:start position:0% components like designing a rate
00:02:17.760 —> 00:02:19.910 align:start position:0%
components like designing a rate
limiter,<00:02:18.160>
00:02:19.910 —> 00:02:19.920 align:start position:0% limiter, maybe designing a message cue,
00:02:19.920 —> 00:02:21.830 align:start position:0%
limiter, maybe designing a message cue,
or<00:02:20.160>
00:02:21.830 —> 00:02:21.840 align:start position:0% or even data processing pipelines,
00:02:21.840 —> 00:02:24.070 align:start position:0%
or even data processing pipelines,
things<00:02:22.000>
00:02:24.070 —> 00:02:24.080 align:start position:0% things like an adclick aggregator. But
00:02:24.080 —> 00:02:25.589 align:start position:0%
things like an adclick aggregator. But
in<00:02:24.319>
00:02:25.589 —> 00:02:25.599 align:start position:0% in general, when you have a system
00:02:25.599 —> 00:02:27.350 align:start position:0%
in general, when you have a system
design<00:02:25.920>
00:02:27.350 —> 00:02:27.360 align:start position:0% design interview, it’s likely going to
00:02:27.360 —> 00:02:29.350 align:start position:0%
design interview, it’s likely going to
come<00:02:27.520>
00:02:29.350 —> 00:02:29.360 align:start position:0% come out of one of these two buckets.
00:02:29.360 —> 00:02:31.270 align:start position:0%
come out of one of these two buckets.
Either<00:02:29.680>
00:02:31.270 —> 00:02:31.280 align:start position:0% Either product design or infrastructure
00:02:31.280 —> 00:02:33.190 align:start position:0%
Either product design or infrastructure
design.<00:02:31.920>
00:02:33.190 —> 00:02:33.200 align:start position:0% design. When you get into an interview,
00:02:33.200 —> 00:02:34.630 align:start position:0%
design. When you get into an interview,
it’s<00:02:33.519>
00:02:34.630 —> 00:02:34.640 align:start position:0% it’s really, really, really important
00:02:34.640 —> 00:02:36.790 align:start position:0%
it’s really, really, really important
that<00:02:34.879>
00:02:36.790 —> 00:02:36.800 align:start position:0% that you follow a framework. This keeps
00:02:36.800 —> 00:02:38.229 align:start position:0%
that you follow a framework. This keeps
you<00:02:36.959>
00:02:38.229 —> 00:02:38.239 align:start position:0% you focused and it makes sure that
00:02:38.239 —> 00:02:40.390 align:start position:0%
you focused and it makes sure that
you’re<00:02:38.480>
00:02:40.390 —> 00:02:40.400 align:start position:0% you’re on time. And so as you prepare,
00:02:40.400 —> 00:02:41.670 align:start position:0%
you’re on time. And so as you prepare,
you’ll<00:02:40.640>
00:02:41.670 —> 00:02:41.680 align:start position:0% you’ll want to choose a framework that
00:02:41.680 —> 00:02:43.670 align:start position:0%
you’ll want to choose a framework that
works<00:02:41.920>
00:02:43.670 —> 00:02:43.680 align:start position:0% works really well for you. I strongly
00:02:43.680 —> 00:02:45.710 align:start position:0%
works really well for you. I strongly
recommend<00:02:44.000>
00:02:45.710 —> 00:02:45.720 align:start position:0% recommend that you choose this framework
00:02:45.720 —> 00:02:47.670 align:start position:0%
recommend that you choose this framework
here.<00:02:46.720>
00:02:47.670 —> 00:02:47.680 align:start position:0% here. What you’re going to do when the
00:02:47.680 —> 00:02:48.790 align:start position:0%
here. What you’re going to do when the
interview<00:02:47.920>
00:02:48.790 —> 00:02:48.800 align:start position:0% interview starts and you’re asked to
00:02:48.800 —> 00:02:50.710 align:start position:0%
interview starts and you’re asked to
design<00:02:49.040>
00:02:50.710 —> 00:02:50.720 align:start position:0% design a system like design ticket
00:02:50.720 —> 00:02:52.150 align:start position:0%
design a system like design ticket
master<00:02:51.280>
00:02:52.150 —> 00:02:52.160 align:start position:0% master is you’re going to start by
00:02:52.160 —> 00:02:53.509 align:start position:0%
master is you’re going to start by
outlining<00:02:52.640>
00:02:53.509 —> 00:02:53.519 align:start position:0% outlining the requirements of the
00:02:53.519 —> 00:02:55.509 align:start position:0%
outlining the requirements of the
system.<00:02:54.080>
00:02:55.509 —> 00:02:55.519 align:start position:0% system. Now, this includes both the
00:02:55.519 —> 00:02:57.509 align:start position:0%
system. Now, this includes both the
functional<00:02:56.000>
00:02:57.509 —> 00:02:57.519 align:start position:0% functional requirements and the
00:02:57.519 —> 00:02:59.509 align:start position:0%
functional requirements and the
non-functional<00:02:58.239>
00:02:59.509 —> 00:02:59.519 align:start position:0% non-functional requirements. Functional
00:02:59.519 —> 00:03:00.790 align:start position:0%
non-functional requirements. Functional
requirements<00:02:59.920>
00:03:00.790 —> 00:03:00.800 align:start position:0% requirements are just the features of
00:03:00.800 —> 00:03:02.710 align:start position:0%
requirements are just the features of
the<00:03:00.959>
00:03:02.710 —> 00:03:02.720 align:start position:0% the system like a user should be able to
00:03:02.720 —> 00:03:04.790 align:start position:0%
the system like a user should be able to
book<00:03:02.959>
00:03:04.790 —> 00:03:04.800 align:start position:0% book a ticket and a non-functional
00:03:04.800 —> 00:03:07.030 align:start position:0%
book a ticket and a non-functional
requirement<00:03:05.200>
00:03:07.030 —> 00:03:07.040 align:start position:0% requirement is the quality of the system
00:03:07.040 —> 00:03:08.790 align:start position:0%
requirement is the quality of the system
like<00:03:07.360>
00:03:08.790 —> 00:03:08.800 align:start position:0% like booking tickets should be low
00:03:08.800 —> 00:03:10.470 align:start position:0%
like booking tickets should be low
latency,<00:03:09.519>
00:03:10.470 —> 00:03:10.480 align:start position:0% latency, right? and or the system should
00:03:10.480 —> 00:03:12.309 align:start position:0%
latency, right? and or the system should
be<00:03:10.560>
00:03:12.309 —> 00:03:12.319 align:start position:0% be able to scale to however many number
00:03:12.319 —> 00:03:15.190 align:start position:0%
be able to scale to however many number
of<00:03:12.760>
00:03:15.190 —> 00:03:15.200 align:start position:0% of users. This ensures upfront that you
00:03:15.200 —> 00:03:16.869 align:start position:0%
of users. This ensures upfront that you
and<00:03:15.360>
00:03:16.869 —> 00:03:16.879 align:start position:0% and your interviewer agree on what
00:03:16.879 —> 00:03:19.270 align:start position:0%
and your interviewer agree on what
you’re<00:03:17.040>
00:03:19.270 —> 00:03:19.280 align:start position:0% you’re going to be designing. Next, you
00:03:19.280 —> 00:03:21.670 align:start position:0%
you’re going to be designing. Next, you
want<00:03:19.440>
00:03:21.670 —> 00:03:21.680 align:start position:0% want to outline the core entities of the
00:03:21.680 —> 00:03:23.750 align:start position:0%
want to outline the core entities of the
system.<00:03:22.400>
00:03:23.750 —> 00:03:23.760 align:start position:0% system. These typically map directly to
00:03:23.760 —> 00:03:25.589 align:start position:0%
system. These typically map directly to
the<00:03:23.920>
00:03:25.589 —> 00:03:25.599 align:start position:0% the tables in your database. These are
00:03:25.599 —> 00:03:27.430 align:start position:0%
the tables in your database. These are
just<00:03:25.760>
00:03:27.430 —> 00:03:27.440 align:start position:0% just the entities that your system will
00:03:27.440 —> 00:03:29.910 align:start position:0%
just the entities that your system will
persist<00:03:27.840>
00:03:29.910 —> 00:03:29.920 align:start position:0% persist and that your API will exchange.
00:03:29.920 —> 00:03:32.470 align:start position:0%
persist and that your API will exchange.
So,<00:03:30.159>
00:03:32.470 —> 00:03:32.480 align:start position:0% So, think like a user, an event, a
00:03:32.480 —> 00:03:35.030 align:start position:0%
So, think like a user, an event, a
ticket.<00:03:33.280>
00:03:35.030 —> 00:03:35.040 align:start position:0% ticket. Simple as that.
00:03:35.040 —> 00:03:36.789 align:start position:0%
ticket. Simple as that.
Then<00:03:35.360>
00:03:36.789 —> 00:03:36.799 align:start position:0% Then you’re going to outline the basic
00:03:36.799 —> 00:03:38.550 align:start position:0%
Then you’re going to outline the basic
APIs<00:03:37.440>
00:03:38.550 —> 00:03:38.560 align:start position:0% APIs needed to meet your functional
00:03:38.560 —> 00:03:40.470 align:start position:0%
APIs needed to meet your functional
requirements.<00:03:39.519>
00:03:40.470 —> 00:03:40.480 align:start position:0% requirements. Nine times out of 10,
00:03:40.480 —> 00:03:41.670 align:start position:0%
requirements. Nine times out of 10,
these<00:03:40.720>
00:03:41.670 —> 00:03:41.680 align:start position:0% these are probably going to be REST
00:03:41.680 —> 00:03:43.830 align:start position:0%
these are probably going to be REST
endpoints,<00:03:42.560>
00:03:43.830 —> 00:03:43.840 align:start position:0% endpoints, but there might be unique
00:03:43.840 —> 00:03:46.390 align:start position:0%
endpoints, but there might be unique
cases<00:03:44.480>
00:03:46.390 —> 00:03:46.400 align:start position:0% cases where GraphQL or something else
00:03:46.400 —> 00:03:49.190 align:start position:0%
cases where GraphQL or something else
makes<00:03:46.720>
00:03:49.190 —> 00:03:49.200 align:start position:0% makes more sense. But from here, you
00:03:49.200 —> 00:03:51.750 align:start position:0%
makes more sense. But from here, you
then<00:03:49.440>
00:03:51.750 —> 00:03:51.760 align:start position:0% then get into the fun stuff. You get to
00:03:51.760 —> 00:03:52.869 align:start position:0%
then get into the fun stuff. You get to
head<00:03:51.840>
00:03:52.869 —> 00:03:52.879 align:start position:0% head over to that whiteboard and you’re
00:03:52.879 —> 00:03:55.030 align:start position:0%
head over to that whiteboard and you’re
going<00:03:52.959>
00:03:55.030 —> 00:03:55.040 align:start position:0% going to start drawing boxes and arrows
00:03:55.040 —> 00:03:56.789 align:start position:0%
going to start drawing boxes and arrows
starting<00:03:55.280>
00:03:56.789 —> 00:03:56.799 align:start position:0% starting with a really simple highle
00:03:56.799 —> 00:03:58.949 align:start position:0%
starting with a really simple highle
design<00:03:57.680>
00:03:58.949 —> 00:03:58.959 align:start position:0% design where the goal of the highle
00:03:58.959 —> 00:04:01.190 align:start position:0%
design where the goal of the highle
design<00:03:59.360>
00:04:01.190 —> 00:04:01.200 align:start position:0% design is to meet the functional
00:04:01.200 —> 00:04:03.270 align:start position:0%
design is to meet the functional
requirements<00:04:01.680>
00:04:03.270 —> 00:04:03.280 align:start position:0% requirements of your system. So, a
00:04:03.280 —> 00:04:05.990 align:start position:0%
requirements of your system. So, a
really<00:04:03.599>
00:04:05.990 —> 00:04:06.000 align:start position:0% really simple, not complex design that
00:04:06.000 —> 00:04:08.670 align:start position:0%
really simple, not complex design that
can<00:04:06.159>
00:04:08.670 —> 00:04:08.680 align:start position:0% can allow users to say book a
00:04:08.680 —> 00:04:11.350 align:start position:0%
can allow users to say book a
ticket.<00:04:09.680>
00:04:11.350 —> 00:04:11.360 align:start position:0% ticket. From here, you’re going to get
00:04:11.360 —> 00:04:13.030 align:start position:0%
ticket. From here, you’re going to get
deep<00:04:12.000>
00:04:13.030 —> 00:04:13.040 align:start position:0% deep and this is where you’re going to
00:04:13.040 —> 00:04:15.350 align:start position:0%
deep and this is where you’re going to
enhance<00:04:13.439>
00:04:15.350 —> 00:04:15.360 align:start position:0% enhance that initial highle design via
00:04:15.360 —> 00:04:17.430 align:start position:0%
enhance that initial highle design via
deep<00:04:15.599>
00:04:17.430 —> 00:04:17.440 align:start position:0% deep dives where the goal of the deep
00:04:17.440 —> 00:04:19.909 align:start position:0%
deep dives where the goal of the deep
dives<00:04:18.000>
00:04:19.909 —> 00:04:19.919 align:start position:0% dives are to satisfy your non-functional
00:04:19.919 —> 00:04:21.830 align:start position:0%
dives are to satisfy your non-functional
requirements.<00:04:20.720>
00:04:21.830 —> 00:04:21.840 align:start position:0% requirements. So, now that I can book a
00:04:21.840 —> 00:04:23.350 align:start position:0%
requirements. So, now that I can book a
ticket,<00:04:22.320>
00:04:23.350 —> 00:04:23.360 align:start position:0% ticket, how do I make sure that booking
00:04:23.360 —> 00:04:25.350 align:start position:0%
ticket, how do I make sure that booking
it<00:04:23.520>
00:04:25.350 —> 00:04:25.360 align:start position:0% it is low latency? How do I make sure
00:04:25.360 —> 00:04:27.749 align:start position:0%
it is low latency? How do I make sure
that<00:04:25.600>
00:04:27.749 —> 00:04:27.759 align:start position:0% that it’s strongly consistent? How do I
00:04:27.759 —> 00:04:29.510 align:start position:0%
that it’s strongly consistent? How do I
make<00:04:27.840>
00:04:29.510 —> 00:04:29.520 align:start position:0% make sure that it can scale to those
00:04:29.520 —> 00:04:31.189 align:start position:0%
make sure that it can scale to those
scale<00:04:29.919>
00:04:31.189 —> 00:04:31.199 align:start position:0% scale numbers that you might have agreed
00:04:31.199 —> 00:04:33.270 align:start position:0%
scale numbers that you might have agreed
upon<00:04:31.600>
00:04:33.270 —> 00:04:33.280 align:start position:0% upon with your interviewer? Now, the
00:04:33.280 —> 00:04:34.710 align:start position:0%
upon with your interviewer? Now, the
last<00:04:33.360>
00:04:34.710 —> 00:04:34.720 align:start position:0% last step in understanding what a system
00:04:34.720 —> 00:04:37.350 align:start position:0%
last step in understanding what a system
design<00:04:35.040>
00:04:37.350 —> 00:04:37.360 align:start position:0% design interview is is understanding how
00:04:37.360 —> 00:04:38.790 align:start position:0%
design interview is is understanding how
your<00:04:37.600>
00:04:38.790 —> 00:04:38.800 align:start position:0% your interviewer is going to be
00:04:38.800 —> 00:04:41.189 align:start position:0%
your interviewer is going to be
evaluating<00:04:39.360>
00:04:41.189 —> 00:04:41.199 align:start position:0% evaluating you. Now, every company is
00:04:41.199 —> 00:04:42.950 align:start position:0%
evaluating you. Now, every company is
slightly<00:04:41.520>
00:04:42.950 —> 00:04:42.960 align:start position:0% slightly different, of course, but they
00:04:42.960 —> 00:04:45.350 align:start position:0%
slightly different, of course, but they
all<00:04:43.199>
00:04:45.350 —> 00:04:45.360 align:start position:0% all evaluate you on some permutation of
00:04:45.360 —> 00:04:48.070 align:start position:0%
all evaluate you on some permutation of
the<00:04:45.639>
00:04:48.070 —> 00:04:48.080 align:start position:0% the following. One, your problem solving
00:04:48.080 —> 00:04:50.070 align:start position:0%
the following. One, your problem solving
skills.<00:04:48.880>
00:04:50.070 —> 00:04:50.080 align:start position:0% skills. So, this is most importantly
00:04:50.080 —> 00:04:52.390 align:start position:0%
skills. So, this is most importantly
your<00:04:50.320>
00:04:52.390 —> 00:04:52.400 align:start position:0% your ability to recognize and prioritize
00:04:52.400 —> 00:04:54.710 align:start position:0%
your ability to recognize and prioritize
the<00:04:52.720>
00:04:54.710 —> 00:04:54.720 align:start position:0% the core challenges of the system. So if
00:04:54.720 —> 00:04:56.230 align:start position:0%
the core challenges of the system. So if
you’re<00:04:54.800>
00:04:56.230 —> 00:04:56.240 align:start position:0% you’re designing ticket master, you’re
00:04:56.240 —> 00:04:57.990 align:start position:0%
you’re designing ticket master, you’re
focused<00:04:56.479>
00:04:57.990 —> 00:04:58.000 align:start position:0% focused on the booking flow. You’re not
00:04:58.000 —> 00:05:01.110 align:start position:0%
focused on the booking flow. You’re not
focused<00:04:58.320>
00:05:01.110 —> 00:05:01.120 align:start position:0% focused on authentication, for example.
00:05:01.120 —> 00:05:03.270 align:start position:0%
focused on authentication, for example.
Next<00:05:01.360>
00:05:03.270 —> 00:05:03.280 align:start position:0% Next is your solution design. This is
00:05:03.280 —> 00:05:05.430 align:start position:0%
Next is your solution design. This is
your<00:05:03.440>
00:05:05.430 —> 00:05:05.440 align:start position:0% your highle design from that framework
00:05:05.440 —> 00:05:07.430 align:start position:0%
your highle design from that framework
uh<00:05:05.520>
00:05:07.430 —> 00:05:07.440 align:start position:0% uh that we showed just a moment ago. Did
00:05:07.440 —> 00:05:09.029 align:start position:0%
uh that we showed just a moment ago. Did
you<00:05:07.520>
00:05:09.029 —> 00:05:09.039 align:start position:0% you weigh trade-offs and did you arrive
00:05:09.039 —> 00:05:11.550 align:start position:0%
you weigh trade-offs and did you arrive
at<00:05:09.280>
00:05:11.550 —> 00:05:11.560 align:start position:0% at something that meets those functional
00:05:11.560 —> 00:05:13.670 align:start position:0%
at something that meets those functional
requirements?<00:05:12.560>
00:05:13.670 —> 00:05:13.680 align:start position:0% requirements? Next is your technical
00:05:13.680 —> 00:05:15.510 align:start position:0%
requirements? Next is your technical
excellence.<00:05:14.560>
00:05:15.510 —> 00:05:15.520 align:start position:0% excellence. And this is where you’re
00:05:15.520 —> 00:05:18.070 align:start position:0%
excellence. And this is where you’re
going<00:05:15.759>
00:05:18.070 —> 00:05:18.080 align:start position:0% going to show off in your deep dives
00:05:18.080 —> 00:05:21.590 align:start position:0%
going to show off in your deep dives
that<00:05:18.240>
00:05:21.590 —> 00:05:21.600 align:start position:0% that you have technical expertise in
00:05:21.600 —> 00:05:24.550 align:start position:0%
that you have technical expertise in
some,<00:05:22.320>
00:05:24.550 —> 00:05:24.560 align:start position:0% some, not all, but in some areas of the
00:05:24.560 —> 00:05:26.390 align:start position:0%
some, not all, but in some areas of the
system.<00:05:25.120>
00:05:26.390 —> 00:05:26.400 align:start position:0% system. Can you go deep? Talk about
00:05:26.400 —> 00:05:27.990 align:start position:0%
system. Can you go deep? Talk about
specific<00:05:26.880>
00:05:27.990 —> 00:05:28.000 align:start position:0% specific technologies. Talk about
00:05:28.000 —> 00:05:30.070 align:start position:0%
specific technologies. Talk about
specific<00:05:28.400>
00:05:30.070 —> 00:05:30.080 align:start position:0% specific areas where things could break
00:05:30.080 —> 00:05:31.990 align:start position:0%
specific areas where things could break
all<00:05:30.320>
00:05:31.990 —> 00:05:32.000 align:start position:0% all of this. And then lastly, of course,
00:05:32.000 —> 00:05:33.749 align:start position:0%
all of this. And then lastly, of course,
is<00:05:32.160>
00:05:33.749 —> 00:05:33.759 align:start position:0% is your communication skills. Can you
00:05:33.759 —> 00:05:35.749 align:start position:0%
is your communication skills. Can you
clearly<00:05:34.160>
00:05:35.749 —> 00:05:35.759 align:start position:0% clearly explain complex technical
00:05:35.759 —> 00:05:38.310 align:start position:0%
clearly explain complex technical
concepts?<00:05:36.720>
00:05:38.310 —> 00:05:38.320 align:start position:0% concepts? You’ll be talking for 35
00:05:38.320 —> 00:05:39.830 align:start position:0%
concepts? You’ll be talking for 35
minutes<00:05:38.560>
00:05:39.830 —> 00:05:39.840 align:start position:0% minutes to an hour during the system
00:05:39.840 —> 00:05:41.510 align:start position:0%
minutes to an hour during the system
design<00:05:40.160>
00:05:41.510 —> 00:05:41.520 align:start position:0% design interview. You need to be clear
00:05:41.520 —> 00:05:46.310 align:start position:0%
design interview. You need to be clear
and<00:05:41.759>
00:05:46.310 —> 00:05:46.320 align:start position:0%
00:05:46.320 —> 00:05:47.350 align:start position:0%
Next<00:05:46.560>
00:05:47.350 —> 00:05:47.360 align:start position:0% Next up, you’re going to want to make
00:05:47.360 —> 00:05:48.950 align:start position:0%
Next up, you’re going to want to make
sure<00:05:47.440>
00:05:48.950 —> 00:05:48.960 align:start position:0% sure that you have at least a basic
00:05:48.960 —> 00:05:50.710 align:start position:0%
sure that you have at least a basic
foundational<00:05:49.680>
00:05:50.710 —> 00:05:50.720 align:start position:0% foundational understanding of some of
00:05:50.720 —> 00:05:52.629 align:start position:0%
foundational understanding of some of
the<00:05:50.919>
00:05:52.629 —> 00:05:52.639 align:start position:0% the fundamentals. And so, people are
00:05:52.639 —> 00:05:54.550 align:start position:0%
the fundamentals. And so, people are
going<00:05:52.720>
00:05:54.550 —> 00:05:54.560 align:start position:0% going to provide these long overwhelming
00:05:54.560 —> 00:05:56.070 align:start position:0%
going to provide these long overwhelming
lists.<00:05:54.880>
00:05:56.070 —> 00:05:56.080 align:start position:0% lists. You’ve probably seen them online,
00:05:56.080 —> 00:05:57.350 align:start position:0%
lists. You’ve probably seen them online,
of<00:05:56.320>
00:05:57.350 —> 00:05:57.360 align:start position:0% of all these things that you need to
00:05:57.360 —> 00:06:00.230 align:start position:0%
of all these things that you need to
know.<00:05:58.000>
00:06:00.230 —> 00:06:00.240 align:start position:0% know. But in reality, knowing these six
00:06:00.240 —> 00:06:02.310 align:start position:0%
know. But in reality, knowing these six
concepts<00:06:00.720>
00:06:02.310 —> 00:06:02.320 align:start position:0% concepts here are going to get you 90
00:06:02.320 —> 00:06:04.710 align:start position:0%
concepts here are going to get you 90
plus%<00:06:03.039>
00:06:04.710 —> 00:06:04.720 align:start position:0% plus% of the way there. And so, this is
00:06:04.720 —> 00:06:07.590 align:start position:0%
plus% of the way there. And so, this is
where<00:06:04.880>
00:06:07.590 —> 00:06:07.600 align:start position:0% where I would focus my time. First up is
00:06:07.600 —> 00:06:09.670 align:start position:0%
where I would focus my time. First up is
storage<00:06:08.000>
00:06:09.670 —> 00:06:09.680 align:start position:0% storage fundamentals. When it comes to
00:06:09.680 —> 00:06:11.430 align:start position:0%
storage fundamentals. When it comes to
storage,<00:06:10.400>
00:06:11.430 —> 00:06:11.440 align:start position:0% storage, you should be able to discuss
00:06:11.440 —> 00:06:13.350 align:start position:0%
storage, you should be able to discuss
various<00:06:11.919>
00:06:13.350 —> 00:06:13.360 align:start position:0% various data storage models and the
00:06:13.360 —> 00:06:15.430 align:start position:0%
various data storage models and the
appropriate<00:06:13.759>
00:06:15.430 —> 00:06:15.440 align:start position:0% appropriate use cases. And so be
00:06:15.440 —> 00:06:17.430 align:start position:0%
appropriate use cases. And so be
prepared<00:06:15.759>
00:06:17.430 —> 00:06:17.440 align:start position:0% prepared to explain things like how data
00:06:17.440 —> 00:06:19.909 align:start position:0%
prepared to explain things like how data
is<00:06:17.600>
00:06:19.909 —> 00:06:19.919 align:start position:0% is organized in a relational database
00:06:19.919 —> 00:06:21.790 align:start position:0%
is organized in a relational database
where<00:06:20.160>
00:06:21.790 —> 00:06:21.800 align:start position:0% where you have normalized tables with
00:06:21.800 —> 00:06:24.309 align:start position:0%
where you have normalized tables with
relationships<00:06:22.800>
00:06:24.309 —> 00:06:24.319 align:start position:0% relationships versus document stores
00:06:24.319 —> 00:06:26.070 align:start position:0%
relationships versus document stores
where<00:06:24.560>
00:06:26.070 —> 00:06:26.080 align:start position:0% where you have nested JSON-like
00:06:26.080 —> 00:06:28.390 align:start position:0%
where you have nested JSON-like
structures<00:06:26.639>
00:06:28.390 —> 00:06:28.400 align:start position:0% structures like this. And then also key
00:06:28.400 —> 00:06:30.230 align:start position:0%
structures like this. And then also key
value<00:06:28.800>
00:06:30.230 —> 00:06:30.240 align:start position:0% value stores where you have a simple
00:06:30.240 —> 00:06:33.189 align:start position:0%
value stores where you have a simple
lookup<00:06:30.639>
00:06:33.189 —> 00:06:33.199 align:start position:0% lookup mechanism based on a key. Your
00:06:33.199 —> 00:06:34.950 align:start position:0%
lookup mechanism based on a key. Your
interviewer<00:06:33.520>
00:06:34.950 —> 00:06:34.960 align:start position:0% interviewer is also going to expect that
00:06:34.960 —> 00:06:37.909 align:start position:0%
interviewer is also going to expect that
you<00:06:35.280>
00:06:37.909 —> 00:06:37.919 align:start position:0% you understand acid properties uh for
00:06:37.919 —> 00:06:40.150 align:start position:0%
you understand acid properties uh for
transactional<00:06:38.639>
00:06:40.150 —> 00:06:40.160 align:start position:0% transactional systems in particular and
00:06:40.160 —> 00:06:41.670 align:start position:0%
transactional systems in particular and
that<00:06:40.319>
00:06:41.670 —> 00:06:41.680 align:start position:0% that you’re able to compare and contrast
00:06:41.680 —> 00:06:43.749 align:start position:0%
that you’re able to compare and contrast
these<00:06:42.000>
00:06:43.749 —> 00:06:43.759 align:start position:0% these with base principles for
00:06:43.759 —> 00:06:44.830 align:start position:0% these with base principles for distributed
00:06:44.830 —> 00:06:44.840 align:start position:0% distributed
00:06:44.840 —> 00:06:46.629 align:start position:0%
distributed
databases.<00:06:45.840>
00:06:46.629 —> 00:06:46.639 align:start position:0% databases. You should be able to
00:06:46.639 —> 00:06:48.629 align:start position:0%
databases. You should be able to
articulate<00:06:47.360>
00:06:48.629 —> 00:06:48.639 align:start position:0% articulate when each storage paradigm
00:06:48.639 —> 00:06:51.270 align:start position:0%
articulate when each storage paradigm
makes<00:06:48.880>
00:06:51.270 —> 00:06:51.280 align:start position:0% makes sense based on access patterns and
00:06:51.280 —> 00:06:52.950 align:start position:0%
makes sense based on access patterns and
the<00:06:51.440>
00:06:52.950 —> 00:06:52.960 align:start position:0% the given consistency requirements of
00:06:52.960 —> 00:06:54.550 align:start position:0%
the given consistency requirements of
your<00:06:53.120>
00:06:54.550 —> 00:06:54.560 align:start position:0% your system which you probably agreed
00:06:54.560 —> 00:06:55.749 align:start position:0%
your system which you probably agreed
upon<00:06:54.800>
00:06:55.749 —> 00:06:55.759 align:start position:0% upon in your non-functional
00:06:55.759 —> 00:06:57.029 align:start position:0%
upon in your non-functional
requirements.<00:06:56.240>
00:06:57.029 —> 00:06:57.039 align:start position:0% requirements. Now, next up when it comes
00:06:57.039 —> 00:06:59.510 align:start position:0%
requirements. Now, next up when it comes
to<00:06:57.120>
00:06:59.510 —> 00:06:59.520 align:start position:0% to the fundamentals is scalability. And
00:06:59.520 —> 00:07:01.270 align:start position:0%
to the fundamentals is scalability. And
scalability<00:07:00.080>
00:07:01.270 —> 00:07:01.280 align:start position:0% scalability is just the concept of how
00:07:01.280 —> 00:07:03.029 align:start position:0%
scalability is just the concept of how
do<00:07:01.360>
00:07:03.029 —> 00:07:03.039 align:start position:0% do we scale our system? so that we can
00:07:03.039 —> 00:07:05.430 align:start position:0%
do we scale our system? so that we can
support<00:07:03.360>
00:07:05.430 —> 00:07:05.440 align:start position:0% support more users and more requests.
00:07:05.440 —> 00:07:07.350 align:start position:0%
support more users and more requests.
And<00:07:05.680>
00:07:07.350 —> 00:07:07.360 align:start position:0% And scalability almost always comes up
00:07:07.360 —> 00:07:09.189 align:start position:0%
And scalability almost always comes up
in<00:07:07.520>
00:07:09.189 —> 00:07:09.199 align:start position:0% in a system design interview. And so
00:07:09.199 —> 00:07:10.469 align:start position:0%
in a system design interview. And so
when<00:07:09.360>
00:07:10.469 —> 00:07:10.479 align:start position:0% when you’re talking about scaling
00:07:10.479 —> 00:07:11.749 align:start position:0%
when you’re talking about scaling
compute,<00:07:10.880>
00:07:11.749 —> 00:07:11.759 align:start position:0% compute, when you’re scaling your
00:07:11.759 —> 00:07:13.510 align:start position:0%
compute, when you’re scaling your
servers,<00:07:12.319>
00:07:13.510 —> 00:07:13.520 align:start position:0% servers, you should know about vertical
00:07:13.520 —> 00:07:16.230 align:start position:0%
servers, you should know about vertical
scaling,<00:07:14.240>
00:07:16.230 —> 00:07:16.240 align:start position:0% scaling, beefier machines, more CPU,
00:07:16.240 —> 00:07:18.550 align:start position:0%
scaling, beefier machines, more CPU,
more<00:07:16.400>
00:07:18.550 —> 00:07:18.560 align:start position:0% more RAM, and also horizontal scaling.
00:07:18.560 —> 00:07:20.629 align:start position:0%
more RAM, and also horizontal scaling.
Let’s<00:07:18.880>
00:07:20.629 —> 00:07:20.639 align:start position:0% Let’s just add more machines to be able
00:07:20.639 —> 00:07:23.350 align:start position:0%
Let’s just add more machines to be able
to<00:07:20.800>
00:07:23.350 —> 00:07:23.360 align:start position:0% to service these incoming requests. You
00:07:23.360 —> 00:07:24.870 align:start position:0%
to service these incoming requests. You
should<00:07:23.520>
00:07:24.870 —> 00:07:24.880 align:start position:0% should also understand how to scale
00:07:24.880 —> 00:07:27.029 align:start position:0%
should also understand how to scale
storage.<00:07:25.599>
00:07:27.029 —> 00:07:27.039 align:start position:0% storage. And so this is techniques like
00:07:27.039 —> 00:07:29.110 align:start position:0%
storage. And so this is techniques like
partitioning<00:07:27.599>
00:07:29.110 —> 00:07:29.120 align:start position:0% partitioning and sharding, splitting
00:07:29.120 —> 00:07:31.430 align:start position:0%
partitioning and sharding, splitting
data<00:07:29.599>
00:07:31.430 —> 00:07:31.440 align:start position:0% data instead of on a single database
00:07:31.440 —> 00:07:34.710 align:start position:0%
data instead of on a single database
across<00:07:31.919>
00:07:34.710 —> 00:07:34.720 align:start position:0% across multiple database instances. Um
00:07:34.720 —> 00:07:36.870 align:start position:0%
across multiple database instances. Um
as<00:07:34.960>
00:07:36.870 —> 00:07:36.880 align:start position:0% as well as how to distribute data
00:07:36.880 —> 00:07:38.510 align:start position:0%
as well as how to distribute data
efficiently<00:07:37.440>
00:07:38.510 —> 00:07:38.520 align:start position:0% efficiently across these different
00:07:38.520 —> 00:07:41.029 align:start position:0%
efficiently across these different
instances<00:07:39.520>
00:07:41.029 —> 00:07:41.039 align:start position:0% instances like the famous consistent
00:07:41.039 —> 00:07:43.510 align:start position:0%
instances like the famous consistent
hashing<00:07:41.800>
00:07:43.510 —> 00:07:43.520 align:start position:0% hashing algorithm. We actually have a
00:07:43.520 —> 00:07:45.270 align:start position:0%
hashing algorithm. We actually have a
video<00:07:43.759>
00:07:45.270 —> 00:07:45.280 align:start position:0% video on the channel that goes into
00:07:45.280 —> 00:07:47.589 align:start position:0%
video on the channel that goes into
detail<00:07:45.520>
00:07:47.589 —> 00:07:47.599 align:start position:0% detail on consistent hashing. So if
00:07:47.599 —> 00:07:49.270 align:start position:0%
detail on consistent hashing. So if
that’s<00:07:47.759>
00:07:49.270 —> 00:07:49.280 align:start position:0% that’s new to you, check that one out.
00:07:49.280 —> 00:07:52.230 align:start position:0%
that’s new to you, check that one out.
Okay,<00:07:49.520>
00:07:52.230 —> 00:07:52.240 align:start position:0% Okay, so next up is networking. Uh, when
00:07:52.240 —> 00:07:53.589 align:start position:0%
Okay, so next up is networking. Uh, when
it<00:07:52.400>
00:07:53.589 —> 00:07:53.599 align:start position:0% it comes to networking, you probably
00:07:53.599 —> 00:07:56.390 align:start position:0%
it comes to networking, you probably
remember<00:07:54.000>
00:07:56.390 —> 00:07:56.400 align:start position:0% remember learning about these OS OSI
00:07:56.400 —> 00:07:58.710 align:start position:0%
remember learning about these OS OSI
layers,<00:07:56.720>
00:07:58.710 —> 00:07:58.720 align:start position:0% layers, excuse me, in college. And I
00:07:58.720 —> 00:08:00.150 align:start position:0%
layers, excuse me, in college. And I
have<00:07:58.800>
00:08:00.150 —> 00:08:00.160 align:start position:0% have good news for you. When it comes to
00:08:00.160 —> 00:08:01.990 align:start position:0%
have good news for you. When it comes to
your<00:08:00.400>
00:08:01.990 —> 00:08:02.000 align:start position:0% your interviews, you only really need to
00:08:02.000 —> 00:08:03.670 align:start position:0%
your interviews, you only really need to
know<00:08:02.240>
00:08:03.670 —> 00:08:03.680 align:start position:0% know three of them. The application
00:08:03.680 —> 00:08:05.510 align:start position:0%
know three of them. The application
layer,<00:08:03.919>
00:08:05.510 —> 00:08:05.520 align:start position:0% layer, transport layer, and network
00:08:05.520 —> 00:08:07.270 align:start position:0%
layer, transport layer, and network
layer.<00:08:06.000>
00:08:07.270 —> 00:08:07.280 align:start position:0% layer. And so, the application layer is
00:08:07.280 —> 00:08:08.469 align:start position:0%
layer. And so, the application layer is
going to<00:08:07.360>
00:08:08.469 —> 00:08:08.479 align:start position:0% going to be the most important for your
00:08:08.479 —> 00:08:10.309 align:start position:0%
going to be the most important for your
interviews.<00:08:09.120>
00:08:10.309 —> 00:08:10.319 align:start position:0% interviews. And this is where you are
00:08:10.319 —> 00:08:12.550 align:start position:0%
interviews. And this is where you are
going<00:08:10.479>
00:08:12.550 —> 00:08:12.560 align:start position:0% going to want to know things like API
00:08:12.560 —> 00:08:15.830 align:start position:0%
going to want to know things like API
design,<00:08:13.199>
00:08:15.830 —> 00:08:15.840 align:start position:0% design, REST versus GraphQL versus gRPC,
00:08:15.840 —> 00:08:17.830 align:start position:0%
design, REST versus GraphQL versus gRPC,
which<00:08:16.080>
00:08:17.830 —> 00:08:17.840 align:start position:0% which makes sense when. And you’ll also
00:08:17.840 —> 00:08:19.550 align:start position:0%
which makes sense when. And you’ll also
want<00:08:18.000>
00:08:19.550 —> 00:08:19.560 align:start position:0% want to understand real-time
00:08:19.560 —> 00:08:22.230 align:start position:0%
want to understand real-time
communication<00:08:20.560>
00:08:22.230 —> 00:08:22.240 align:start position:0% communication via websockets or server
00:08:22.240 —> 00:08:23.749 align:start position:0%
communication via websockets or server
sent<00:08:22.400>
00:08:23.749 —> 00:08:23.759 align:start position:0% sent events. This is what you’ll use in
00:08:23.759 —> 00:08:25.909 align:start position:0%
sent events. This is what you’ll use in
the<00:08:23.919>
00:08:25.909 —> 00:08:25.919 align:start position:0% the case of designing for example a chat
00:08:25.919 —> 00:08:28.550 align:start position:0%
the case of designing for example a chat
app.<00:08:26.800>
00:08:28.550 —> 00:08:28.560 align:start position:0% app. And then second is the transport
00:08:28.560 —> 00:08:30.790 align:start position:0%
app. And then second is the transport
layer.<00:08:29.039>
00:08:30.790 —> 00:08:30.800 align:start position:0% layer. And so for infra style interviews
00:08:30.800 —> 00:08:33.870 align:start position:0%
layer. And so for infra style interviews
in<00:08:31.039>
00:08:33.870 —> 00:08:33.880 align:start position:0% in particular, knowing about TCP versus
00:08:33.880 —> 00:08:36.630 align:start position:0%
in particular, knowing about TCP versus
UDP<00:08:34.880>
00:08:36.630 —> 00:08:36.640 align:start position:0% UDP for example and the request life
00:08:36.640 —> 00:08:38.790 align:start position:0%
UDP for example and the request life
cycle<00:08:36.959>
00:08:38.790 —> 00:08:38.800 align:start position:0% cycle is going to be really important.
00:08:38.800 —> 00:08:40.310 align:start position:0%
cycle is going to be really important.
And<00:08:39.039>
00:08:40.310 —> 00:08:40.320 align:start position:0% And then lastly, when it comes to the
00:08:40.320 —> 00:08:41.750 align:start position:0%
And then lastly, when it comes to the
network<00:08:40.800>
00:08:41.750 —> 00:08:41.760 align:start position:0% network layer, you should have some
00:08:41.760 —> 00:08:43.430 align:start position:0%
network layer, you should have some
basic<00:08:42.080>
00:08:43.430 —> 00:08:43.440 align:start position:0% basic understanding at least of load
00:08:43.440 —> 00:08:46.550 align:start position:0%
basic understanding at least of load
balancing<00:08:44.240>
00:08:46.550 —> 00:08:46.560 align:start position:0% balancing and maybe understand firewalls
00:08:46.560 —> 00:08:49.269 align:start position:0%
balancing and maybe understand firewalls
or<00:08:46.880>
00:08:49.269 —> 00:08:49.279 align:start position:0% or access control lists, but unless it’s
00:08:49.279 —> 00:08:52.150 align:start position:0%
or access control lists, but unless it’s
a<00:08:49.440>
00:08:52.150 —> 00:08:52.160 align:start position:0% a a specific type of interview, this is
00:08:52.160 —> 00:08:54.710 align:start position:0%
a a specific type of interview, this is
maybe<00:08:52.399>
00:08:54.710 —> 00:08:54.720 align:start position:0% maybe less likely to come up. Now, just
00:08:54.720 —> 00:08:56.470 align:start position:0%
maybe less likely to come up. Now, just
like<00:08:54.880>
00:08:56.470 —> 00:08:56.480 align:start position:0% like with consistent hashing, we have a
00:08:56.480 —> 00:08:58.790 align:start position:0%
like with consistent hashing, we have a
really<00:08:56.720>
00:08:58.790 —> 00:08:58.800 align:start position:0% really excellent detailed video on all
00:08:58.800 —> 00:09:01.509 align:start position:0%
really excellent detailed video on all
thing<00:08:59.040>
00:09:01.509 —> 00:09:01.519 align:start position:0% thing networking essentials. And so, if
00:09:01.519 —> 00:09:03.190 align:start position:0%
thing networking essentials. And so, if
you<00:09:01.760>
00:09:03.190 —> 00:09:03.200 align:start position:0% you don’t have this already down, that’s
00:09:03.200 —> 00:09:04.550 align:start position:0%
you don’t have this already down, that’s
the<00:09:03.360>
00:09:04.550 —> 00:09:04.560 align:start position:0% the first thing I would do. Head over to
00:09:04.560 —> 00:09:06.550 align:start position:0%
the first thing I would do. Head over to
that<00:09:04.720>
00:09:06.550 —> 00:09:06.560 align:start position:0% that video and check it out. Fourth is
00:09:06.560 —> 00:09:09.430 align:start position:0%
that video and check it out. Fourth is
latency,<00:09:07.279>
00:09:09.430 —> 00:09:09.440 align:start position:0% latency, throughput, and performance.
00:09:09.440 —> 00:09:10.790 align:start position:0%
latency, throughput, and performance.
And<00:09:09.600>
00:09:10.790 —> 00:09:10.800 align:start position:0% And so there’s a decent chance that
00:09:10.800 —> 00:09:11.829 align:start position:0%
And so there’s a decent chance that
you’re<00:09:10.959>
00:09:11.829 —> 00:09:11.839 align:start position:0% you’re going to be tasked with
00:09:11.839 —> 00:09:13.430 align:start position:0%
you’re going to be tasked with
optimizing<00:09:12.399>
00:09:13.430 —> 00:09:13.440 align:start position:0% optimizing performance somewhere in your
00:09:13.440 —> 00:09:14.949 align:start position:0%
optimizing performance somewhere in your
interview.<00:09:14.000>
00:09:14.949 —> 00:09:14.959 align:start position:0% interview. And so you should be able to
00:09:14.959 —> 00:09:17.190 align:start position:0%
interview. And so you should be able to
recall<00:09:15.440>
00:09:17.190 —> 00:09:17.200 align:start position:0% recall approximate latency numbers for
00:09:17.200 —> 00:09:19.030 align:start position:0%
recall approximate latency numbers for
common<00:09:17.519>
00:09:19.030 —> 00:09:19.040 align:start position:0% common operations, things like memory
00:09:19.040 —> 00:09:21.829 align:start position:0%
common operations, things like memory
access,<00:09:19.760>
00:09:21.829 —> 00:09:21.839 align:start position:0% access, disk reads, or network calls.
00:09:21.839 —> 00:09:22.949 align:start position:0%
access, disk reads, or network calls.
And<00:09:22.000>
00:09:22.949 —> 00:09:22.959 align:start position:0% And then when discussing your
00:09:22.959 —> 00:09:24.230 align:start position:0%
And then when discussing your
requirements<00:09:23.440>
00:09:24.230 —> 00:09:24.240 align:start position:0% requirements in the beginning of the
00:09:24.240 —> 00:09:25.350 align:start position:0%
requirements in the beginning of the
interview,<00:09:24.720>
00:09:25.350 —> 00:09:25.360 align:start position:0% interview, you’re going to want to
00:09:25.360 —> 00:09:27.030 align:start position:0%
interview, you’re going to want to
demonstrate<00:09:25.839>
00:09:27.030 —> 00:09:27.040 align:start position:0% demonstrate your ability to understand
00:09:27.040 —> 00:09:29.110 align:start position:0%
demonstrate your ability to understand
some<00:09:27.279>
00:09:29.110 —> 00:09:29.120 align:start position:0% some throughput limitations and maybe
00:09:29.120 —> 00:09:31.030 align:start position:0%
some throughput limitations and maybe
perform<00:09:29.440>
00:09:31.030 —> 00:09:31.040 align:start position:0% perform some basic capacity planning
00:09:31.040 —> 00:09:33.030 align:start position:0%
perform some basic capacity planning
estimations.<00:09:32.320>
00:09:33.030 —> 00:09:33.040 align:start position:0% estimations. And so you should be
00:09:33.040 —> 00:09:35.430 align:start position:0%
estimations. And so you should be
prepared<00:09:33.279>
00:09:35.430 —> 00:09:35.440 align:start position:0% prepared to identify also performance
00:09:35.440 —> 00:09:37.430 align:start position:0%
prepared to identify also performance
bottlenecks,<00:09:36.399>
00:09:37.430 —> 00:09:37.440 align:start position:0% bottlenecks, maybe even proposing
00:09:37.440 —> 00:09:38.870 align:start position:0%
bottlenecks, maybe even proposing
solutions<00:09:38.000>
00:09:38.870 —> 00:09:38.880 align:start position:0% solutions in your distributed
00:09:38.880 —> 00:09:40.949 align:start position:0%
solutions in your distributed
architecture.<00:09:39.680>
00:09:40.949 —> 00:09:40.959 align:start position:0% architecture. For example, adding a
00:09:40.959 —> 00:09:43.670 align:start position:0%
architecture. For example, adding a
cache<00:09:41.279>
00:09:43.670 —> 00:09:43.680 align:start position:0% cache to lower latency. And so I’ve
00:09:43.680 —> 00:09:45.350 align:start position:0%
cache to lower latency. And so I’ve
linked<00:09:43.920>
00:09:45.350 —> 00:09:45.360 align:start position:0% linked down below an article that should
00:09:45.360 —> 00:09:47.030 align:start position:0%
linked down below an article that should
cover<00:09:45.600>
00:09:47.030 —> 00:09:47.040 align:start position:0% cover everything that you need to know
00:09:47.040 —> 00:09:48.949 align:start position:0%
cover everything that you need to know
about<00:09:47.360>
00:09:48.949 —> 00:09:48.959 align:start position:0% about performance optimizations as well.
00:09:48.959 —> 00:09:50.870 align:start position:0%
about performance optimizations as well.
Second<00:09:49.200>
00:09:50.870 —> 00:09:50.880 align:start position:0% Second to last, we have fault tolerance
00:09:50.880 —> 00:09:53.509 align:start position:0%
Second to last, we have fault tolerance
and<00:09:51.640>
00:09:53.509 —> 00:09:53.519 align:start position:0% and redundancy. And so this is
00:09:53.519 —> 00:09:55.110 align:start position:0%
and redundancy. And so this is
relatively<00:09:54.000>
00:09:55.110 —> 00:09:55.120 align:start position:0% relatively basic. You should be able to
00:09:55.120 —> 00:09:56.550 align:start position:0%
relatively basic. You should be able to
recognize<00:09:55.519>
00:09:56.550 —> 00:09:56.560 align:start position:0% recognize and communicate to your
00:09:56.560 —> 00:09:58.870 align:start position:0%
recognize and communicate to your
interviewer<00:09:56.959>
00:09:58.870 —> 00:09:58.880 align:start position:0% interviewer that failures are inevitable
00:09:58.880 —> 00:10:00.870 align:start position:0%
interviewer that failures are inevitable
in<00:09:59.200>
00:10:00.870 —> 00:10:00.880 align:start position:0% in distributed systems. And so you
00:10:00.880 —> 00:10:02.790 align:start position:0%
in distributed systems. And so you
should<00:10:00.959>
00:10:02.790 —> 00:10:02.800 align:start position:0% should be ready to discuss things like
00:10:02.800 —> 00:10:04.710 align:start position:0%
should be ready to discuss things like
replication<00:10:03.440>
00:10:04.710 —> 00:10:04.720 align:start position:0% replication strategies and failure
00:10:04.720 —> 00:10:06.870 align:start position:0%
replication strategies and failure
detection<00:10:05.200>
00:10:06.870 —> 00:10:06.880 align:start position:0% detection mechanisms. And your design
00:10:06.880 —> 00:10:08.470 align:start position:0%
detection mechanisms. And your design
should<00:10:07.120>
00:10:08.470 —> 00:10:08.480 align:start position:0% should incorporate redundancy at the
00:10:08.480 —> 00:10:10.710 align:start position:0%
should incorporate redundancy at the
appropriate<00:10:08.880>
00:10:10.710 —> 00:10:10.720 align:start position:0% appropriate levels, servers, racks,
00:10:10.720 —> 00:10:12.470 align:start position:0%
appropriate levels, servers, racks,
maybe<00:10:10.959>
00:10:12.470 —> 00:10:12.480 align:start position:0% maybe data centers, so that you can
00:10:12.480 —> 00:10:14.790 align:start position:0%
maybe data centers, so that you can
recover<00:10:12.800>
00:10:14.790 —> 00:10:14.800 align:start position:0% recover from these failures gracefully.
00:10:14.800 —> 00:10:16.389 align:start position:0%
recover from these failures gracefully.
Last<00:10:15.040>
00:10:16.389 —> 00:10:16.399 align:start position:0% Last up is cap theorem. You’re going to
00:10:16.399 —> 00:10:17.750 align:start position:0%
Last up is cap theorem. You’re going to
talk<00:10:16.560>
00:10:17.750 —> 00:10:17.760 align:start position:0% talk about cap theorem earlier in your
00:10:17.760 —> 00:10:18.949 align:start position:0%
talk about cap theorem earlier in your
interview,<00:10:18.079>
00:10:18.949 —> 00:10:18.959 align:start position:0% interview, oftent times in the
00:10:18.959 —> 00:10:20.710 align:start position:0%
interview, oftent times in the
non-functional<00:10:19.600>
00:10:20.710 —> 00:10:20.720 align:start position:0% non-functional requirements, and you’re
00:10:20.720 —> 00:10:22.150 align:start position:0%
non-functional requirements, and you’re
going<00:10:20.800>
00:10:22.150 —> 00:10:22.160 align:start position:0% going to want to make sure that your
00:10:22.160 —> 00:10:24.550 align:start position:0%
going to want to make sure that your
system<00:10:22.800>
00:10:24.550 —> 00:10:24.560 align:start position:0% system upholds whatever decision you
00:10:24.560 —> 00:10:26.870 align:start position:0%
system upholds whatever decision you
make<00:10:24.880>
00:10:26.870 —> 00:10:26.880 align:start position:0% make in as it pertains to cap theum. And
00:10:26.880 —> 00:10:29.030 align:start position:0%
make in as it pertains to cap theum. And
so<00:10:27.040>
00:10:29.030 —> 00:10:29.040 align:start position:0% so Capum of course is consistency,
00:10:29.040 —> 00:10:31.269 align:start position:0%
so Capum of course is consistency,
availability,<00:10:29.680>
00:10:31.269 —> 00:10:31.279 align:start position:0% availability, and partition tolerance.
00:10:31.279 —> 00:10:33.190 align:start position:0%
availability, and partition tolerance.
Your<00:10:31.600>
00:10:33.190 —> 00:10:33.200 align:start position:0% Your system can only have two of the
00:10:33.200 —> 00:10:35.430 align:start position:0%
Your system can only have two of the
three.<00:10:34.000>
00:10:35.430 —> 00:10:35.440 align:start position:0% three. Partition tolerance is a
00:10:35.440 —> 00:10:37.829 align:start position:0%
three. Partition tolerance is a
guarantee.<00:10:36.240>
00:10:37.829 —> 00:10:37.839 align:start position:0% guarantee. And so your only decision is
00:10:37.839 —> 00:10:40.550 align:start position:0%
guarantee. And so your only decision is
should<00:10:38.079>
00:10:40.550 —> 00:10:40.560 align:start position:0% should my system prioritize availability
00:10:40.560 —> 00:10:43.110 align:start position:0%
should my system prioritize availability
or<00:10:41.160>
00:10:43.110 —> 00:10:43.120 align:start position:0% or consistency? And now if this is
00:10:43.120 —> 00:10:44.550 align:start position:0%
or consistency? And now if this is
foreign<00:10:43.440>
00:10:44.550 —> 00:10:44.560 align:start position:0% foreign to you, you don’t know what I’m
00:10:44.560 —> 00:10:46.630 align:start position:0%
foreign to you, you don’t know what I’m
talking<00:10:44.800>
00:10:46.630 —> 00:10:46.640 align:start position:0% talking about, don’t stress it. We have
00:10:46.640 —> 00:10:48.710 align:start position:0%
talking about, don’t stress it. We have
a<00:10:46.880>
00:10:48.710 —> 00:10:48.720 align:start position:0% a really detailed video on Cap theorem
00:10:48.720 —> 00:10:50.310 align:start position:0%
a really detailed video on Cap theorem
as<00:10:48.880>
00:10:50.310 —> 00:10:50.320 align:start position:0% as well. I think it’s less than 10
00:10:50.320 —> 00:10:52.230 align:start position:0%
as well. I think it’s less than 10
minutes<00:10:50.560>
00:10:52.230 —> 00:10:52.240 align:start position:0% minutes long. Should go quick. And
00:10:52.240 —> 00:10:56.949 align:start position:0%
minutes long. Should go quick. And
that’s<00:10:52.480>
00:10:56.949 —> 00:10:56.959 align:start position:0%
00:10:56.959 —> 00:10:58.949 align:start position:0%
And<00:10:57.120>
00:10:58.949 —> 00:10:58.959 align:start position:0% And then we have our database. And so
00:10:58.959 —> 00:11:00.550 align:start position:0%
And then we have our database. And so
this<00:10:59.120>
00:11:00.550 —> 00:11:00.560 align:start position:0% this is where your data lives when the
00:11:00.560 —> 00:11:02.550 align:start position:0%
this is where your data lives when the
power<00:11:00.800>
00:11:02.550 —> 00:11:02.560 align:start position:0% power goes off. You have options here.
00:11:02.560 —> 00:11:04.069 align:start position:0%
power goes off. You have options here.
You’ve<00:11:02.800>
00:11:04.069 —> 00:11:04.079 align:start position:0% You’ve got a traditional database like
00:11:04.079 —> 00:11:05.509 align:start position:0%
You’ve got a traditional database like
Postgress,<00:11:04.800>
00:11:05.509 —> 00:11:05.519 align:start position:0% Postgress, which is going to keep
00:11:05.519 —> 00:11:07.030 align:start position:0%
Postgress, which is going to keep
everything<00:11:05.920>
00:11:07.030 —> 00:11:07.040 align:start position:0% everything organized in these strict
00:11:07.040 —> 00:11:09.269 align:start position:0%
everything organized in these strict
little<00:11:07.360>
00:11:09.269 —> 00:11:09.279 align:start position:0% little tables with with uh clear and
00:11:09.279 —> 00:11:12.069 align:start position:0%
little tables with with uh clear and
defined<00:11:09.680>
00:11:12.069 —> 00:11:12.079 align:start position:0% defined rules. You also have maybe
00:11:12.079 —> 00:11:14.870 align:start position:0%
defined rules. You also have maybe
relatively<00:11:12.640>
00:11:14.870 —> 00:11:14.880 align:start position:0% relatively newer options like MongoDB.
00:11:14.880 —> 00:11:16.710 align:start position:0%
relatively newer options like MongoDB.
This<00:11:15.040>
00:11:16.710 —> 00:11:16.720 align:start position:0% This is going to store information more
00:11:16.720 —> 00:11:19.190 align:start position:0%
This is going to store information more
in<00:11:16.959>
00:11:19.190 —> 00:11:19.200 align:start position:0% in documents and JSON blobs. And then
00:11:19.200 —> 00:11:20.630 align:start position:0%
in documents and JSON blobs. And then
you<00:11:19.279>
00:11:20.630 —> 00:11:20.640 align:start position:0% you have other things like Reddus, which
00:11:20.640 —> 00:11:22.790 align:start position:0%
you have other things like Reddus, which
is<00:11:20.800>
00:11:22.790 —> 00:11:22.800 align:start position:0% is going to store simple key value pairs
00:11:22.800 —> 00:11:24.550 align:start position:0%
is going to store simple key value pairs
that<00:11:22.959>
00:11:24.550 —> 00:11:24.560 align:start position:0% that you can look up really quickly.
00:11:24.560 —> 00:11:26.710 align:start position:0%
that you can look up really quickly.
Now,<00:11:25.279>
00:11:26.710 —> 00:11:26.720 align:start position:0% Now, importantly, and I see this mistake
00:11:26.720 —> 00:11:28.550 align:start position:0%
Now, importantly, and I see this mistake
a<00:11:26.880>
00:11:28.550 —> 00:11:28.560 align:start position:0% a lot, don’t get caught up in the old
00:11:28.560 —> 00:11:31.190 align:start position:0%
a lot, don’t get caught up in the old
SQL<00:11:28.959>
00:11:31.190 —> 00:11:31.200 align:start position:0% SQL versus NoSQL debate. Most modern
00:11:31.200 —> 00:11:33.670 align:start position:0%
SQL versus NoSQL debate. Most modern
databases<00:11:31.920>
00:11:33.670 —> 00:11:33.680 align:start position:0% databases can scale well and can
00:11:33.680 —> 00:11:35.590 align:start position:0%
databases can scale well and can
maintain<00:11:34.079>
00:11:35.590 —> 00:11:35.600 align:start position:0% maintain data integrity. And so, the
00:11:35.600 —> 00:11:37.590 align:start position:0%
maintain data integrity. And so, the
real<00:11:35.839>
00:11:37.590 —> 00:11:37.600 align:start position:0% real question isn’t SQL versus NoSQL.
00:11:37.600 —> 00:11:39.030 align:start position:0%
real question isn’t SQL versus NoSQL.
It’s<00:11:37.760>
00:11:39.030 —> 00:11:39.040 align:start position:0% It’s how does your app need to read and
00:11:39.040 —> 00:11:40.550 align:start position:0%
It’s how does your app need to read and
write<00:11:39.200>
00:11:40.550 —> 00:11:40.560 align:start position:0% write data? And then you should choose
00:11:40.560 —> 00:11:42.230 align:start position:0%
write data? And then you should choose
the<00:11:40.720>
00:11:42.230 —> 00:11:42.240 align:start position:0% the option that makes those common
00:11:42.240 —> 00:11:44.389 align:start position:0%
the option that makes those common
operations<00:11:43.040>
00:11:44.389 —> 00:11:44.399 align:start position:0% operations fast and simple for your use
00:11:44.399 —> 00:11:45.910 align:start position:0%
operations fast and simple for your use
case.<00:11:44.720>
00:11:45.910 —> 00:11:45.920 align:start position:0% case. For your cache, you can think of
00:11:45.920 —> 00:11:47.670 align:start position:0%
case. For your cache, you can think of
this<00:11:46.160>
00:11:47.670 —> 00:11:47.680 align:start position:0% this like your systems short-term
00:11:47.680 —> 00:11:50.470 align:start position:0%
this like your systems short-term
memory.<00:11:48.480>
00:11:50.470 —> 00:11:50.480 align:start position:0% memory. And so caches, Reddus being a
00:11:50.480 —> 00:11:52.470 align:start position:0%
memory. And so caches, Reddus being a
popular<00:11:50.800>
00:11:52.470 —> 00:11:52.480 align:start position:0% popular example, they store frequently
00:11:52.480 —> 00:11:54.470 align:start position:0%
popular example, they store frequently
accessed<00:11:52.800>
00:11:54.470 —> 00:11:54.480 align:start position:0% accessed data so that you don’t have to
00:11:54.480 —> 00:11:56.550 align:start position:0%
accessed data so that you don’t have to
keep<00:11:54.720>
00:11:56.550 —> 00:11:56.560 align:start position:0% keep hitting your database. Now, they’re
00:11:56.560 —> 00:11:59.269 align:start position:0%
keep hitting your database. Now, they’re
way<00:11:56.800>
00:11:59.269 —> 00:11:59.279 align:start position:0% way faster um but they do come with
00:11:59.279 —> 00:12:00.870 align:start position:0%
way faster um but they do come with
their<00:11:59.440>
00:12:00.870 —> 00:12:00.880 align:start position:0% their own challenges mainly around
00:12:00.880 —> 00:12:02.949 align:start position:0%
their own challenges mainly around
keeping<00:12:01.200>
00:12:02.949 —> 00:12:02.959 align:start position:0% keeping data fresh. And so you need to
00:12:02.959 —> 00:12:04.310 align:start position:0%
keeping data fresh. And so you need to
decide,<00:12:03.279>
00:12:04.310 —> 00:12:04.320 align:start position:0% decide, for example, how long
00:12:04.320 —> 00:12:06.310 align:start position:0%
decide, for example, how long
information<00:12:05.120>
00:12:06.310 —> 00:12:06.320 align:start position:0% information stays valid. When do you
00:12:06.320 —> 00:12:08.389 align:start position:0%
information stays valid. When do you
kick<00:12:06.560>
00:12:08.389 —> 00:12:08.399 align:start position:0% kick it out of the cache? The main thing
00:12:08.399 —> 00:12:09.590 align:start position:0%
kick it out of the cache? The main thing
to<00:12:08.560>
00:12:09.590 —> 00:12:09.600 align:start position:0% to remember when you’re introducing
00:12:09.600 —> 00:12:11.030 align:start position:0%
to remember when you’re introducing
caches<00:12:10.160>
00:12:11.030 —> 00:12:11.040 align:start position:0% caches is that they’re going to make
00:12:11.040 —> 00:12:13.190 align:start position:0%
caches is that they’re going to make
your<00:12:11.279>
00:12:13.190 —> 00:12:13.200 align:start position:0% your system lightning fast for repeated
00:12:13.200 —> 00:12:16.230 align:start position:0%
your system lightning fast for repeated
requests,<00:12:14.079>
00:12:16.230 —> 00:12:16.240 align:start position:0% requests, but managing them adds some
00:12:16.240 —> 00:12:17.590 align:start position:0%
requests, but managing them adds some
additional<00:12:16.560>
00:12:17.590 —> 00:12:17.600 align:start position:0% additional complexity to your design
00:12:17.600 —> 00:12:18.470 align:start position:0%
additional complexity to your design
that<00:12:17.839>
00:12:18.470 —> 00:12:18.480 align:start position:0% that you’re going to want to be aware
00:12:18.480 —> 00:12:19.990 align:start position:0%
that you’re going to want to be aware
of.<00:12:18.720>
00:12:19.990 —> 00:12:20.000 align:start position:0% of. Message cues are how different parts
00:12:20.000 —> 00:12:21.829 align:start position:0%
of. Message cues are how different parts
of<00:12:20.160>
00:12:21.829 —> 00:12:21.839 align:start position:0% of your system can talk to each other
00:12:21.839 —> 00:12:23.829 align:start position:0%
of your system can talk to each other
without<00:12:22.240>
00:12:23.829 —> 00:12:23.839 align:start position:0% without having to wait around. And so
00:12:23.839 —> 00:12:26.150 align:start position:0%
without having to wait around. And so
instead<00:12:24.160>
00:12:26.150 —> 00:12:26.160 align:start position:0% instead of making direct calls, one
00:12:26.160 —> 00:12:28.230 align:start position:0%
instead of making direct calls, one
service<00:12:26.560>
00:12:28.230 —> 00:12:28.240 align:start position:0% service can drop a message into a queue.
00:12:28.240 —> 00:12:30.629 align:start position:0%
service can drop a message into a queue.
Popular<00:12:28.560>
00:12:30.629 —> 00:12:30.639 align:start position:0% Popular ones are like Kafka, Rabbit MQ,
00:12:30.639 —> 00:12:33.110 align:start position:0%
Popular ones are like Kafka, Rabbit MQ,
maybe<00:12:30.880>
00:12:33.110 —> 00:12:33.120 align:start position:0% maybe SQS, and then another service can
00:12:33.120 —> 00:12:34.949 align:start position:0%
maybe SQS, and then another service can
pick<00:12:33.360>
00:12:34.949 —> 00:12:34.959 align:start position:0% pick it up and process it when it’s
00:12:34.959 —> 00:12:37.030 align:start position:0%
pick it up and process it when it’s
ready.<00:12:35.600>
00:12:37.030 —> 00:12:37.040 align:start position:0% ready. And so you can think of this like
00:12:37.040 —> 00:12:38.949 align:start position:0%
ready. And so you can think of this like
texting<00:12:37.519>
00:12:38.949 —> 00:12:38.959 align:start position:0% texting instead of calling. You don’t
00:12:38.959 —> 00:12:41.030 align:start position:0%
texting instead of calling. You don’t
need<00:12:39.120>
00:12:41.030 —> 00:12:41.040 align:start position:0% need both sides available at the same
00:12:41.040 —> 00:12:43.990 align:start position:0%
need both sides available at the same
time.<00:12:41.440>
00:12:43.990 —> 00:12:44.000 align:start position:0% time. It can happen asynchronously. Now,
00:12:44.000 —> 00:12:45.910 align:start position:0%
time. It can happen asynchronously. Now,
this<00:12:44.240>
00:12:45.910 —> 00:12:45.920 align:start position:0% this helps your system handle traffic
00:12:45.920 —> 00:12:47.829 align:start position:0%
this helps your system handle traffic
spikes<00:12:46.320>
00:12:47.829 —> 00:12:47.839 align:start position:0% spikes and it keeps things running,
00:12:47.839 —> 00:12:49.350 align:start position:0%
spikes and it keeps things running,
particularly<00:12:48.240>
00:12:49.350 —> 00:12:49.360 align:start position:0% particularly if one service were to
00:12:49.360 —> 00:12:51.190 align:start position:0%
particularly if one service were to
crash,<00:12:49.680>
00:12:51.190 —> 00:12:51.200 align:start position:0% crash, for example. But the main
00:12:51.200 —> 00:12:53.350 align:start position:0%
crash, for example. But the main
challenge<00:12:51.440>
00:12:53.350 —> 00:12:53.360 align:start position:0% challenge is making sure that messages
00:12:53.360 —> 00:12:54.550 align:start position:0%
challenge is making sure that messages
actually<00:12:53.680>
00:12:54.550 —> 00:12:54.560 align:start position:0% actually get delivered in the first
00:12:54.560 —> 00:12:56.069 align:start position:0%
actually get delivered in the first
place.<00:12:55.040>
00:12:56.069 —> 00:12:56.079 align:start position:0% place. And so sometimes they get
00:12:56.079 —> 00:12:57.990 align:start position:0%
place. And so sometimes they get
delivered<00:12:56.320>
00:12:57.990 —> 00:12:58.000 align:start position:0% delivered once, sometimes potentially
00:12:58.000 —> 00:12:59.829 align:start position:0%
delivered once, sometimes potentially
they<00:12:58.240>
00:12:59.829 —> 00:12:59.839 align:start position:0% they get delivered multiple times. And
00:12:59.839 —> 00:13:01.269 align:start position:0%
they get delivered multiple times. And
you’re<00:13:00.000>
00:13:01.269 —> 00:13:01.279 align:start position:0% you’re going to need strategies in order
00:13:01.279 —> 00:13:02.710 align:start position:0%
you’re going to need strategies in order
to<00:13:01.440>
00:13:02.710 —> 00:13:02.720 align:start position:0% to handle this. You can think of a load
00:13:02.720 —> 00:13:04.470 align:start position:0%
to handle this. You can think of a load
balancer<00:13:03.120>
00:13:04.470 —> 00:13:04.480 align:start position:0% balancer as the traffic control for your
00:13:04.480 —> 00:13:06.790 align:start position:0%
balancer as the traffic control for your
system.<00:13:05.279>
00:13:06.790 —> 00:13:06.800 align:start position:0% system. And so load balancers take
00:13:06.800 —> 00:13:09.030 align:start position:0%
system. And so load balancers take
incoming<00:13:07.279>
00:13:09.030 —> 00:13:09.040 align:start position:0% incoming requests and they direct them
00:13:09.040 —> 00:13:11.350 align:start position:0%
incoming requests and they direct them
to<00:13:09.360>
00:13:11.350 —> 00:13:11.360 align:start position:0% to different servers so that no single
00:13:11.360 —> 00:13:13.829 align:start position:0%
to different servers so that no single
machine<00:13:11.760>
00:13:13.829 —> 00:13:13.839 align:start position:0% machine gets overwhelmed. So this server
00:13:13.839 —> 00:13:15.829 align:start position:0%
machine gets overwhelmed. So this server
box<00:13:14.160>
00:13:15.829 —> 00:13:15.839 align:start position:0% box here typically will horizontally
00:13:15.839 —> 00:13:17.190 align:start position:0%
box here typically will horizontally
scale<00:13:16.079>
00:13:17.190 —> 00:13:17.200 align:start position:0% scale it. Meaning we’ll need more than
00:13:17.200 —> 00:13:18.790 align:start position:0%
scale it. Meaning we’ll need more than
just<00:13:17.360>
00:13:18.790 —> 00:13:18.800 align:start position:0% just one computer. We’ll need multiple
00:13:18.800 —> 00:13:20.790 align:start position:0%
just one computer. We’ll need multiple
servers.<00:13:19.519>
00:13:20.790 —> 00:13:20.800 align:start position:0% servers. And then the load balancer is
00:13:20.800 —> 00:13:22.710 align:start position:0%
servers. And then the load balancer is
going<00:13:20.959>
00:13:22.710 —> 00:13:22.720 align:start position:0% going to be determining when a new
00:13:22.720 —> 00:13:24.629 align:start position:0%
going to be determining when a new
request<00:13:23.120>
00:13:24.629 —> 00:13:24.639 align:start position:0% request comes in which of those servers
00:13:24.639 —> 00:13:26.790 align:start position:0%
request comes in which of those servers
it<00:13:24.800>
00:13:26.790 —> 00:13:26.800 align:start position:0% it should route that request to. That
00:13:26.800 —> 00:13:28.710 align:start position:0%
it should route that request to. That
simple.<00:13:27.200>
00:13:28.710 —> 00:13:28.720 align:start position:0% simple. Your database is designed for
00:13:28.720 —> 00:13:31.269 align:start position:0%
simple. Your database is designed for
organized<00:13:29.600>
00:13:31.269 —> 00:13:31.279 align:start position:0% organized structured data like user
00:13:31.279 —> 00:13:33.269 align:start position:0%
organized structured data like user
accounts<00:13:31.519>
00:13:33.269 —> 00:13:33.279 align:start position:0% accounts or product information. It’s
00:13:33.279 —> 00:13:35.110 align:start position:0%
accounts or product information. It’s
not<00:13:33.440>
00:13:35.110 —> 00:13:35.120 align:start position:0% not designed for storing large files,
00:13:35.120 —> 00:13:37.509 align:start position:0%
not designed for storing large files,
things<00:13:35.360>
00:13:37.509 —> 00:13:37.519 align:start position:0% things like images or videos. And so
00:13:37.519 —> 00:13:39.110 align:start position:0%
things like images or videos. And so
trying<00:13:37.760>
00:13:39.110 —> 00:13:39.120 align:start position:0% trying to cram those things into your
00:13:39.120 —> 00:13:41.030 align:start position:0%
trying to cram those things into your
database<00:13:39.600>
00:13:41.030 —> 00:13:41.040 align:start position:0% database is like forcing a square peg
00:13:41.040 —> 00:13:42.310 align:start position:0%
database is like forcing a square peg
into<00:13:41.200>
00:13:42.310 —> 00:13:42.320 align:start position:0% into a round hole. It’s going to bloat
00:13:42.320 —> 00:13:43.829 align:start position:0%
into a round hole. It’s going to bloat
your<00:13:42.480>
00:13:43.829 —> 00:13:43.839 align:start position:0% your database and it’s going to slow
00:13:43.839 —> 00:13:44.949 align:start position:0%
your database and it’s going to slow
down<00:13:43.920>
00:13:44.949 —> 00:13:44.959 align:start position:0% down all of your queries and make
00:13:44.959 —> 00:13:47.110 align:start position:0%
down all of your queries and make
backups<00:13:45.279>
00:13:47.110 —> 00:13:47.120 align:start position:0% backups a nightmare. And so that’s why
00:13:47.120 —> 00:13:49.910 align:start position:0%
backups a nightmare. And so that’s why
services<00:13:47.519>
00:13:49.910 —> 00:13:49.920 align:start position:0% services like blob storage services, S3
00:13:49.920 —> 00:13:52.310 align:start position:0%
services like blob storage services, S3
being<00:13:50.079>
00:13:52.310 —> 00:13:52.320 align:start position:0% being a popular example, exist. They’re
00:13:52.320 —> 00:13:54.230 align:start position:0%
being a popular example, exist. They’re
specifically<00:13:52.880>
00:13:54.230 —> 00:13:54.240 align:start position:0% specifically built to handle these types
00:13:54.240 —> 00:13:56.949 align:start position:0%
specifically built to handle these types
of<00:13:54.480>
00:13:56.949 —> 00:13:56.959 align:start position:0% of unstructured data. This is typically
00:13:56.959 —> 00:14:00.310 align:start position:0%
of unstructured data. This is typically
media,<00:13:57.760>
00:14:00.310 —> 00:14:00.320 align:start position:0% media, large text files, etc. and they
00:14:00.320 —> 00:14:02.870 align:start position:0%
media, large text files, etc. and they
can<00:14:00.480>
00:14:02.870 —> 00:14:02.880 align:start position:0% can host them at a much cheaper cost.
00:14:02.880 —> 00:14:04.389 align:start position:0%
can host them at a much cheaper cost.
And<00:14:03.040>
00:14:04.389 —> 00:14:04.399 align:start position:0% And so always keep your structured data
00:14:04.399 —> 00:14:06.069 align:start position:0%
And so always keep your structured data
in<00:14:04.560>
00:14:06.069 —> 00:14:06.079 align:start position:0% in your database and you keep your
00:14:06.079 —> 00:14:08.629 align:start position:0%
in your database and you keep your
unstructured<00:14:06.800>
00:14:08.629 —> 00:14:08.639 align:start position:0% unstructured data in your blog storage.
00:14:08.639 —> 00:14:10.790 align:start position:0%
unstructured data in your blog storage.
Your<00:14:08.800>
00:14:10.790 —> 00:14:10.800 align:start position:0% Your CDN or your content delivery
00:14:10.800 —> 00:14:14.069 align:start position:0%
Your CDN or your content delivery
network<00:14:11.920>
00:14:14.069 —> 00:14:14.079 align:start position:0% network um it’s just a cache. The CDN
00:14:14.079 —> 00:14:15.430 align:start position:0%
network um it’s just a cache. The CDN
confuses<00:14:14.399>
00:14:15.430 —> 00:14:15.440 align:start position:0% confuses a lot of people, but it’s just
00:14:15.440 —> 00:14:17.590 align:start position:0%
confuses a lot of people, but it’s just
a<00:14:15.600>
00:14:17.590 —> 00:14:17.600 align:start position:0% a cache. Uh and it serves as your global
00:14:17.600 —> 00:14:19.430 align:start position:0%
a cache. Uh and it serves as your global
distribution<00:14:18.160>
00:14:19.430 —> 00:14:19.440 align:start position:0% distribution system. And so you can
00:14:19.440 —> 00:14:21.509 align:start position:0%
distribution system. And so you can
place<00:14:19.680>
00:14:21.509 —> 00:14:21.519 align:start position:0% place your content closer to users
00:14:21.519 —> 00:14:23.750 align:start position:0%
place your content closer to users
around<00:14:21.760>
00:14:23.750 —> 00:14:23.760 align:start position:0% around the world. So popular CDNs are
00:14:23.760 —> 00:14:26.949 align:start position:0%
around the world. So popular CDNs are
like<00:14:24.040>
00:14:26.949 —> 00:14:26.959 align:start position:0% like Cloudfare uh is is one and they can
00:14:26.959 —> 00:14:28.710 align:start position:0%
like Cloudfare uh is is one and they can
store<00:14:27.199>
00:14:28.710 —> 00:14:28.720 align:start position:0% store the copies of the images and the
00:14:28.720 —> 00:14:30.550 align:start position:0%
store the copies of the images and the
videos<00:14:28.959>
00:14:30.550 —> 00:14:30.560 align:start position:0% videos and other static files oftent
00:14:30.560 —> 00:14:31.990 align:start position:0%
videos and other static files oftent
times<00:14:30.800>
00:14:31.990 —> 00:14:32.000 align:start position:0% times that you’re hosting in your blob
00:14:32.000 —> 00:14:33.750 align:start position:0%
times that you’re hosting in your blob
storage<00:14:32.720>
00:14:33.750 —> 00:14:33.760 align:start position:0% storage but they’re going to store them
00:14:33.760 —> 00:14:35.430 align:start position:0%
storage but they’re going to store them
closer<00:14:34.079>
00:14:35.430 —> 00:14:35.440 align:start position:0% closer to the user and so it’s going to
00:14:35.440 —> 00:14:37.430 align:start position:0%
closer to the user and so it’s going to
make<00:14:35.600>
00:14:37.430 —> 00:14:37.440 align:start position:0% make it a lot faster for users to
00:14:37.440 —> 00:14:39.269 align:start position:0%
make it a lot faster for users to
download<00:14:37.760>
00:14:39.269 —> 00:14:39.279 align:start position:0% download these resources because they
00:14:39.279 —> 00:14:40.949 align:start position:0%
download these resources because they
don’t<00:14:39.360>
00:14:40.949 —> 00:14:40.959 align:start position:0% don’t have to go all the way to for
00:14:40.959 —> 00:14:43.350 align:start position:0%
don’t have to go all the way to for
example<00:14:41.440>
00:14:43.350 —> 00:14:43.360 align:start position:0% example America if they’re in India they
00:14:43.360 —> 00:14:45.350 align:start position:0%
example America if they’re in India they
can<00:14:43.440>
00:14:45.350 —> 00:14:45.360 align:start position:0% can just pull in these images and files
00:14:45.360 —> 00:14:47.910 align:start position:0%
can just pull in these images and files
directly<00:14:45.839>
00:14:47.910 —> 00:14:47.920 align:start position:0% directly from a CDN server in their
00:14:47.920 —> 00:14:51.990 align:start position:0%
directly from a CDN server in their
native<00:14:48.240>
00:14:51.990 —> 00:14:52.000 align:start position:0%
00:14:52.000 —> 00:14:54.150 align:start position:0%
Okay,<00:14:52.320>
00:14:54.150 —> 00:14:54.160 align:start position:0% Okay, finally the most important part.
00:14:54.160 —> 00:14:55.590 align:start position:0%
Okay, finally the most important part.
So,<00:14:54.399>
00:14:55.590 —> 00:14:55.600 align:start position:0% So, if you’re thinking that everything
00:14:55.600 —> 00:14:57.509 align:start position:0%
So, if you’re thinking that everything
that<00:14:55.839>
00:14:57.509 —> 00:14:57.519 align:start position:0% that I just talked about was not foreign
00:14:57.519 —> 00:14:59.590 align:start position:0%
that I just talked about was not foreign
to<00:14:57.680>
00:14:59.590 —> 00:14:59.600 align:start position:0% to you, then you are already ready to
00:14:59.600 —> 00:15:00.870 align:start position:0%
to you, then you are already ready to
start<00:14:59.760>
00:15:00.870 —> 00:15:00.880 align:start position:0% start working through the problems. Even
00:15:00.880 —> 00:15:02.389 align:start position:0%
start working through the problems. Even
if<00:15:00.959>
00:15:02.389 —> 00:15:02.399 align:start position:0% if you weren’t an expert on everything
00:15:02.399 —> 00:15:04.470 align:start position:0%
if you weren’t an expert on everything
that<00:15:02.560>
00:15:04.470 —> 00:15:04.480 align:start position:0% that we just described for anything that
00:15:04.480 —> 00:15:06.310 align:start position:0%
that we just described for anything that
was<00:15:04.639>
00:15:06.310 —> 00:15:06.320 align:start position:0% was maybe less clear, I’ve added a bunch
00:15:06.320 —> 00:15:08.069 align:start position:0%
was maybe less clear, I’ve added a bunch
of<00:15:06.480>
00:15:08.069 —> 00:15:08.079 align:start position:0% of links below as you know, and you can
00:15:08.079 —> 00:15:09.590 align:start position:0%
of links below as you know, and you can
go<00:15:08.240>
00:15:09.590 —> 00:15:09.600 align:start position:0% go either watch the videos or read the
00:15:09.600 —> 00:15:11.509 align:start position:0%
go either watch the videos or read the
written<00:15:09.839>
00:15:11.509 —> 00:15:11.519 align:start position:0% written resources in order to help close
00:15:11.519 —> 00:15:14.389 align:start position:0%
written resources in order to help close
that<00:15:11.760>
00:15:14.389 —> 00:15:14.399 align:start position:0% that gap for you. But in reality, most
00:15:14.399 —> 00:15:15.910 align:start position:0%
that gap for you. But in reality, most
of<00:15:14.560>
00:15:15.910 —> 00:15:15.920 align:start position:0% of your learning is going to come from
00:15:15.920 —> 00:15:18.629 align:start position:0%
of your learning is going to come from
working<00:15:16.399>
00:15:18.629 —> 00:15:18.639 align:start position:0% working through core problems. And so I
00:15:18.639 —> 00:15:19.750 align:start position:0%
working through core problems. And so I
recommend<00:15:18.800>
00:15:19.750 —> 00:15:19.760 align:start position:0% recommend that you work through these
00:15:19.760 —> 00:15:21.350 align:start position:0%
recommend that you work through these
problems<00:15:20.000>
00:15:21.350 —> 00:15:21.360 align:start position:0% problems that you see on the screen here
00:15:21.360 —> 00:15:23.590 align:start position:0%
problems that you see on the screen here
in<00:15:21.680>
00:15:23.590 —> 00:15:23.600 align:start position:0% in this order, starting with Bitly, then
00:15:23.600 —> 00:15:25.670 align:start position:0%
in this order, starting with Bitly, then
Dropbox,<00:15:24.160>
00:15:25.670 —> 00:15:25.680 align:start position:0% Dropbox, Ticket Master, and then all the
00:15:25.680 —> 00:15:27.350 align:start position:0%
Dropbox, Ticket Master, and then all the
way<00:15:25.760>
00:15:27.350 —> 00:15:27.360 align:start position:0% way around until you end with Post
00:15:27.360 —> 00:15:29.509 align:start position:0%
way around until you end with Post
Search.<00:15:28.000>
00:15:29.509 —> 00:15:29.519 align:start position:0% Search. There’s just 10 problems here,
00:15:29.519 —> 00:15:31.590 align:start position:0%
Search. There’s just 10 problems here,
and<00:15:29.760>
00:15:31.590 —> 00:15:31.600 align:start position:0% and they cover the overwhelming majority
00:15:31.600 —> 00:15:33.030 align:start position:0%
and they cover the overwhelming majority
of<00:15:31.839>
00:15:33.030 —> 00:15:33.040 align:start position:0% of concepts that you’re going to see in
00:15:33.040 —> 00:15:35.110 align:start position:0%
of concepts that you’re going to see in
a<00:15:33.199>
00:15:35.110 —> 00:15:35.120 align:start position:0% a system design interview. And so with
00:15:35.120 —> 00:15:36.870 align:start position:0%
a system design interview. And so with
each<00:15:35.519>
00:15:36.870 —> 00:15:36.880 align:start position:0% each with each one of these problems,
00:15:36.880 —> 00:15:38.389 align:start position:0%
each with each one of these problems,
excuse<00:15:37.120>
00:15:38.389 —> 00:15:38.399 align:start position:0% excuse me, you’re going to be introduced
00:15:38.399 —> 00:15:40.069 align:start position:0%
excuse me, you’re going to be introduced
to<00:15:38.639>
00:15:40.069 —> 00:15:40.079 align:start position:0% to techniques and patterns that are
00:15:40.079 —> 00:15:42.470 align:start position:0%
to techniques and patterns that are
going<00:15:40.160>
00:15:42.470 —> 00:15:42.480 align:start position:0% going to continue to reappear in
00:15:42.480 —> 00:15:44.710 align:start position:0%
going to continue to reappear in
problems<00:15:43.040>
00:15:44.710 —> 00:15:44.720 align:start position:0% problems later on in this list, which is
00:15:44.720 —> 00:15:46.629 align:start position:0%
problems later on in this list, which is
going<00:15:44.800>
00:15:46.629 —> 00:15:46.639 align:start position:0% going to help reaffirm these concepts to
00:15:46.639 —> 00:15:48.870 align:start position:0%
going to help reaffirm these concepts to
you.<00:15:47.519>
00:15:48.870 —> 00:15:48.880 align:start position:0% you. Now, Stephan and I have written
00:15:48.880 —> 00:15:51.189 align:start position:0%
you. Now, Stephan and I have written
detailed<00:15:49.279>
00:15:51.189 —> 00:15:51.199 align:start position:0% detailed breakdowns and recorded videos
00:15:51.199 —> 00:15:53.670 align:start position:0%
detailed breakdowns and recorded videos
for<00:15:51.600>
00:15:53.670 —> 00:15:53.680 align:start position:0% for each of these 10 problems, as well
00:15:53.680 —> 00:15:56.550 align:start position:0%
for each of these 10 problems, as well
as<00:15:54.000>
00:15:56.550 —> 00:15:56.560 align:start position:0% as over 15 others. And so, you have
00:15:56.560 —> 00:15:59.069 align:start position:0%
as over 15 others. And so, you have
something<00:15:56.880>
00:15:59.069 —> 00:15:59.079 align:start position:0% something to guide you throughout this
00:15:59.079 —> 00:16:02.470 align:start position:0%
something to guide you throughout this
journey.<00:16:00.079>
00:16:02.470 —> 00:16:02.480 align:start position:0% journey. If for bitly and Dropbox and
00:16:02.480 —> 00:16:04.710 align:start position:0%
journey. If for bitly and Dropbox and
maybe<00:16:02.720>
00:16:04.710 —> 00:16:04.720 align:start position:0% maybe even Ticket Master, you can start
00:16:04.720 —> 00:16:06.790 align:start position:0%
maybe even Ticket Master, you can start
by<00:16:04.959>
00:16:06.790 —> 00:16:06.800 align:start position:0% by just passively consuming the video. I
00:16:06.800 —> 00:16:09.269 align:start position:0%
by just passively consuming the video. I
think<00:16:06.959>
00:16:09.269 —> 00:16:09.279 align:start position:0% think that’s reasonable. But after those
00:16:09.279 —> 00:16:12.150 align:start position:0%
think that’s reasonable. But after those
three,<00:16:10.160>
00:16:12.150 —> 00:16:12.160 align:start position:0% three, the key, and this is so so so so
00:16:12.160 —> 00:16:13.590 align:start position:0%
three, the key, and this is so so so so
important,<00:16:12.480>
00:16:13.590 —> 00:16:13.600 align:start position:0% important, the key is to try it
00:16:13.600 —> 00:16:15.670 align:start position:0%
important, the key is to try it
yourself.<00:16:14.560>
00:16:15.670 —> 00:16:15.680 align:start position:0% yourself. And so, open an online
00:16:15.680 —> 00:16:18.150 align:start position:0%
yourself. And so, open an online
whiteboard,<00:16:16.560>
00:16:18.150 —> 00:16:18.160 align:start position:0% whiteboard, start a timer, and work
00:16:18.160 —> 00:16:20.870 align:start position:0%
whiteboard, start a timer, and work
through<00:16:18.480>
00:16:20.870 —> 00:16:20.880 align:start position:0% through the problem. At the end, you’re
00:16:20.880 —> 00:16:22.470 align:start position:0%
through the problem. At the end, you’re
going<00:16:20.959>
00:16:22.470 —> 00:16:22.480 align:start position:0% going to know exactly where you were
00:16:22.480 —> 00:16:24.710 align:start position:0%
going to know exactly where you were
confused.<00:16:23.279>
00:16:24.710 —> 00:16:24.720 align:start position:0% confused. These are what we call your
00:16:24.720 —> 00:16:27.030 align:start position:0%
confused. These are what we call your
known<00:16:25.279>
00:16:27.030 —> 00:16:27.040 align:start position:0% known unknowns. And so, you can open up
00:16:27.040 —> 00:16:28.790 align:start position:0%
known unknowns. And so, you can open up
Google,<00:16:27.360>
00:16:28.790 —> 00:16:28.800 align:start position:0% Google, you can open up ChatGBT, and you
00:16:28.800 —> 00:16:30.470 align:start position:0%
Google, you can open up ChatGBT, and you
can<00:16:28.959>
00:16:30.470 —> 00:16:30.480 align:start position:0% can start searching and filling in those
00:16:30.480 —> 00:16:32.030 align:start position:0%
can start searching and filling in those
blanks<00:16:30.800>
00:16:32.030 —> 00:16:32.040 align:start position:0% blanks that you have in your
00:16:32.040 —> 00:16:34.870 align:start position:0%
blanks that you have in your
understanding.<00:16:33.040>
00:16:34.870 —> 00:16:34.880 align:start position:0% understanding. And then, and only then,
00:16:34.880 —> 00:16:37.350 align:start position:0%
understanding. And then, and only then,
should<00:16:35.120>
00:16:37.350 —> 00:16:37.360 align:start position:0% should you fire up YouTube uh or open
00:16:37.360 —> 00:16:39.350 align:start position:0%
should you fire up YouTube uh or open
the<00:16:37.600>
00:16:39.350 —> 00:16:39.360 align:start position:0% the website and watch the video or read
00:16:39.360 —> 00:16:41.189 align:start position:0%
the website and watch the video or read
the<00:16:39.519>
00:16:41.189 —> 00:16:41.199 align:start position:0% the breakdown. And this is going to show
00:16:41.199 —> 00:16:43.590 align:start position:0%
the breakdown. And this is going to show
you<00:16:41.360>
00:16:43.590 —> 00:16:43.600 align:start position:0% you then all of the unknown unknowns or
00:16:43.600 —> 00:16:45.269 align:start position:0%
you then all of the unknown unknowns or
the<00:16:43.759>
00:16:45.269 —> 00:16:45.279 align:start position:0% the things that you didn’t even know you
00:16:45.279 —> 00:16:47.509 align:start position:0%
the things that you didn’t even know you
were<00:16:45.440>
00:16:47.509 —> 00:16:47.519 align:start position:0% were missing. And then rinse and repeat
00:16:47.519 —> 00:16:49.350 align:start position:0%
were missing. And then rinse and repeat
the<00:16:47.759>
00:16:49.350 —> 00:16:49.360 align:start position:0% the cycle through all 10 of these
00:16:49.360 —> 00:16:51.509 align:start position:0%
the cycle through all 10 of these
questions.<00:16:50.160>
00:16:51.509 —> 00:16:51.519 align:start position:0% questions. And I promise you that after
00:16:51.519 —> 00:16:53.990 align:start position:0%
questions. And I promise you that after
doing<00:16:51.759>
00:16:53.990 —> 00:16:54.000 align:start position:0% doing so, you are going to have a really
00:16:54.000 —> 00:16:55.509 align:start position:0%
doing so, you are going to have a really
solid<00:16:54.320>
00:16:55.509 —> 00:16:55.519 align:start position:0% solid understanding of system design
00:16:55.519 —> 00:16:57.110 align:start position:0%
solid understanding of system design
concepts<00:16:56.000>
00:16:57.110 —> 00:16:57.120 align:start position:0% concepts and feel really comfortable
00:16:57.120 —> 00:16:58.470 align:start position:0%
concepts and feel really comfortable
going<00:16:57.279>
00:16:58.470 —> 00:16:58.480 align:start position:0% going into your interviews. Now, if you
00:16:58.480 —> 00:17:01.509 align:start position:0%
going into your interviews. Now, if you
happen<00:16:58.639>
00:17:01.509 —> 00:17:01.519 align:start position:0% happen to be a Hello Premium user, then
00:17:01.519 —> 00:17:03.430 align:start position:0%
happen to be a Hello Premium user, then
we’ve<00:17:01.759>
00:17:03.430 —> 00:17:03.440 align:start position:0% we’ve made this iterative cycle really
00:17:03.440 —> 00:17:05.429 align:start position:0%
we’ve made this iterative cycle really
easy<00:17:03.600>
00:17:05.429 —> 00:17:05.439 align:start position:0% easy for you and hopefully kind of fun.
00:17:05.439 —> 00:17:07.590 align:start position:0%
easy for you and hopefully kind of fun.
So<00:17:05.679>
00:17:07.590 —> 00:17:07.600 align:start position:0% So for each of these 25 problems, you
00:17:07.600 —> 00:17:09.909 align:start position:0%
So for each of these 25 problems, you
can<00:17:07.760>
00:17:09.909 —> 00:17:09.919 align:start position:0% can open up what we call guided practice
00:17:09.919 —> 00:17:12.150 align:start position:0%
can open up what we call guided practice
and<00:17:10.160>
00:17:12.150 —> 00:17:12.160 align:start position:0% and you can work through problems in
00:17:12.160 —> 00:17:14.069 align:start position:0%
and you can work through problems in
order<00:17:12.559>
00:17:14.069 —> 00:17:14.079 align:start position:0% order in the delivery framework that we
00:17:14.079 —> 00:17:16.710 align:start position:0%
order in the delivery framework that we
just<00:17:14.240>
00:17:16.710 —> 00:17:16.720 align:start position:0% just showed. And then in each, for
00:17:16.720 —> 00:17:18.630 align:start position:0%
just showed. And then in each, for
example,<00:17:17.439>
00:17:18.630 —> 00:17:18.640 align:start position:0% example, answering this deep dive
00:17:18.640 —> 00:17:20.549 align:start position:0%
example, answering this deep dive
question,<00:17:19.360>
00:17:20.549 —> 00:17:20.559 align:start position:0% question, we’re going to analyze your
00:17:20.559 —> 00:17:22.230 align:start position:0%
question, we’re going to analyze your
whiteboard<00:17:20.959>
00:17:22.230 —> 00:17:22.240 align:start position:0% whiteboard as well as whatever your text
00:17:22.240 —> 00:17:24.549 align:start position:0%
whiteboard as well as whatever your text
response<00:17:22.640>
00:17:24.549 —> 00:17:24.559 align:start position:0% response is and then give you inline
00:17:24.559 —> 00:17:27.029 align:start position:0%
response is and then give you inline
feedback<00:17:25.360>
00:17:27.029 —> 00:17:27.039 align:start position:0% feedback to teach you concepts and help
00:17:27.039 —> 00:17:30.150 align:start position:0%
feedback to teach you concepts and help
you<00:17:27.280>
00:17:30.150 —> 00:17:30.160 align:start position:0% you improve as you go. So try guided
00:17:30.160 —> 00:17:31.830 align:start position:0%
you improve as you go. So try guided
practice.<00:17:30.559>
00:17:31.830 —> 00:17:31.840 align:start position:0% practice. Ticket Master is actually free
00:17:31.840 —> 00:17:34.150 align:start position:0%
practice. Ticket Master is actually free
to<00:17:32.080>
00:17:34.150 —> 00:17:34.160 align:start position:0% to everybody, but for premium users,
00:17:34.160 —> 00:17:36.549 align:start position:0%
to everybody, but for premium users,
this<00:17:34.400>
00:17:36.549 —> 00:17:36.559 align:start position:0% this is probably even a better way to
00:17:36.559 —> 00:17:38.710 align:start position:0%
this is probably even a better way to
handle<00:17:36.880>
00:17:38.710 —> 00:17:38.720 align:start position:0% handle that practice iteration than
00:17:38.720 —> 00:17:41.070 align:start position:0%
handle that practice iteration than
opening<00:17:38.960>
00:17:41.070 —> 00:17:41.080 align:start position:0% opening up just a raw whiteboard
00:17:41.080 —> 00:17:43.350 align:start position:0%
opening up just a raw whiteboard
yourself.<00:17:42.080>
00:17:43.350 —> 00:17:43.360 align:start position:0% yourself. So, there you have it, folks.
00:17:43.360 —> 00:17:44.789 align:start position:0%
yourself. So, there you have it, folks.
That<00:17:43.520>
00:17:44.789 —> 00:17:44.799 align:start position:0% That is how I would prepare for a system
00:17:44.799 —> 00:17:46.630 align:start position:0%
That is how I would prepare for a system
design<00:17:45.120>
00:17:46.630 —> 00:17:46.640 align:start position:0% design interview today. You have all the
00:17:46.640 —> 00:17:48.789 align:start position:0%
design interview today. You have all the
links<00:17:46.960>
00:17:48.789 —> 00:17:48.799 align:start position:0% links below. Go through them, especially
00:17:48.799 —> 00:17:50.310 align:start position:0%
links below. Go through them, especially
in<00:17:48.960>
00:17:50.310 —> 00:17:50.320 align:start position:0% in the concepts that are less clear to
00:17:50.320 —> 00:17:51.430 align:start position:0%
in the concepts that are less clear to
you,<00:17:50.559>
00:17:51.430 —> 00:17:51.440 align:start position:0% you, and make sure that you’re
00:17:51.440 —> 00:17:53.270 align:start position:0%
you, and make sure that you’re
practicing.<00:17:52.240>
00:17:53.270 —> 00:17:53.280 align:start position:0% practicing. The only last thing that I
00:17:53.280 —> 00:17:54.710 align:start position:0%
practicing. The only last thing that I
would<00:17:53.440>
00:17:54.710 —> 00:17:54.720 align:start position:0% would add, of course, is that a system
00:17:54.720 —> 00:17:55.909 align:start position:0%
would add, of course, is that a system
design<00:17:54.960>
00:17:55.909 —> 00:17:55.919 align:start position:0% design interview is also about
00:17:55.919 —> 00:17:58.230 align:start position:0%
design interview is also about
presentation.<00:17:56.960>
00:17:58.230 —> 00:17:58.240 align:start position:0% presentation. So make sure that you are
00:17:58.240 —> 00:18:00.470 align:start position:0%
presentation. So make sure that you are
actually<00:17:58.640>
00:18:00.470 —> 00:18:00.480 align:start position:0% actually audibly practicing ideally with
00:18:00.480 —> 00:18:02.390 align:start position:0%
actually audibly practicing ideally with
somebody<00:18:00.720>
00:18:02.390 —> 00:18:02.400 align:start position:0% somebody else. This could be friends,
00:18:02.400 —> 00:18:04.549 align:start position:0%
somebody else. This could be friends,
colleagues,<00:18:03.000>
00:18:04.549 —> 00:18:04.559 align:start position:0% colleagues, co-workers, peer mock
00:18:04.559 —> 00:18:06.950 align:start position:0%
colleagues, co-workers, peer mock
interviews.<00:18:05.440>
00:18:06.950 —> 00:18:06.960 align:start position:0% interviews. We at Hello Interview also
00:18:06.960 —> 00:18:08.789 align:start position:0%
interviews. We at Hello Interview also
have<00:18:07.280>
00:18:08.789 —> 00:18:08.799 align:start position:0% have professional mock interviews where
00:18:08.799 —> 00:18:10.950 align:start position:0%
have professional mock interviews where
you<00:18:08.960>
00:18:10.950 —> 00:18:10.960 align:start position:0% you can interview with an interviewer
00:18:10.960 —> 00:18:12.630 align:start position:0%
you can interview with an interviewer
from<00:18:11.200>
00:18:12.630 —> 00:18:12.640 align:start position:0% from your target company. So for
00:18:12.640 —> 00:18:14.630 align:start position:0%
from your target company. So for
example,<00:18:13.280>
00:18:14.630 —> 00:18:14.640 align:start position:0% example, an interviewer who’s actively
00:18:14.640 —> 00:18:16.789 align:start position:0%
example, an interviewer who’s actively
an<00:18:14.799>
00:18:16.789 —> 00:18:16.799 align:start position:0% an interviewer at Meta. Um, consider
00:18:16.799 —> 00:18:19.430 align:start position:0%
an interviewer at Meta. Um, consider
that.<00:18:17.440>
00:18:19.430 —> 00:18:19.440 align:start position:0% that. But I hope this was useful to you.
00:18:19.440 —> 00:18:20.789 align:start position:0%
that. But I hope this was useful to you.
Feel<00:18:19.600>
00:18:20.789 —> 00:18:20.799 align:start position:0% Feel free to leave any comments,
00:18:20.799 —> 00:18:22.470 align:start position:0%
Feel free to leave any comments,
questions.<00:18:21.120>
00:18:22.470 —> 00:18:22.480 align:start position:0% questions. I’ll try to get to those. And
00:18:22.480 —> 00:18:24.150 align:start position:0%
questions. I’ll try to get to those. And
I’ll<00:18:22.640>
00:18:24.150 —> 00:18:24.160 align:start position:0% I’ll see you guys again soon. Good luck
00:18:24.160 —> 00:18:27.919 align:start position:0%
I’ll see you guys again soon. Good luck
with<00:18:24.320>