chapter one

1 The system design interview

 

This chapter covers:

  • The importance of the system design interview.
  • Evaluating a candidate.
  • Scaling a backend service.
  • Cloud hosting vs. bare metal.

A system design interview is a discussion between the candidate and the interviewer about designing a software system that is typically provided over a network. The interviewer begins the interview with a short and vague request to the candidate to design a particular software system. Depending on the particular system, the userbase may be non-technical or technical.

System design interviews are conducted for most software engineering, software architecture, and engineering manager job interviews. (In this book, we collectively refer to software engineers, architects, and managers as simply “engineers”.) Other components of the interview process include coding and behavioral/cultural interviews.

1.1 It is a discussion about tradeoffs

The following factors attest to the importance of system design interviews and preparing well for them for as a candidate and an interviewer.

1.2 Should you read this book?

1.3 Overview of this book

1.4 Prelude – a brief discussion of scaling the various services of a system

1.4.1 The beginning - a small initial deployment of our app

1.4.2 Scaling with GeoDNS

1.4.3 Adding a caching service

1.4.4 Content Distribution Network (CDN)

1.4.5 A brief discussion of horizontal scalability and cluster management, Continuous Integration (CI) and Continuous Deployment (CD)

1.4.6 Functional partitioning and centralization of cross-cutting concerns

1.4.7 Batch and streaming extract, transform and load (ETL)

1.4.8 Other common services

1.4.9 Cloud vs bare metal

1.4.10 Serverless - Function as a Service (FaaS)

1.4.11 Conclusion - Scaling backend services

1.5 Summary