# System Design Interview Tips

## Jiuzhang 4S Approach

#### Ask before design

问清楚再动手设计不要一上来就冲着一个巨牛的方案去设计切忌不要做关键词大师

#### No more no less

不要总想着设计最牛的系统要设计够用的系统

#### Work solution first

先设计一个基本能工作的系统，然后再逐步优化 Done is better than perfect! —— Mark Zuckerberg

#### Analysis is important than solution

系统设计没有标准答案记住答案是没用的 通过分析过程展示知识储备 权衡各种设计方式的利弊

## 5 Tips for System Design interviews

\-- by [Gaurav Sen](https://www.youtube.com/channel/UCRPMAqdtSgd0Ipeef7iFsKw)

**1) Don't get into details prematurely**

**2) Avoid fitting requirements to a set architecture in mind**

**3) Keep it simple, stupid! Remember to look at the big picture and avoid too many hacks when solving.**

**4) Have justifications for the points you make.** Don't use buzz words or half hearted thoughts in your design.

**5) Be aware of the current solutions and tech practices.** A lot of solutions can be purchased off the shelf which simplify implementation. You should be able to argue for a custom implementation with it's pros and cons.

### Here are three major points evaluated during the interview:

#### (1) Clarity of Thought

**a) Express your thoughts in a clear manner.**

**b) Justify your decisions.** Critical reasoning and argument are key to a successful software design.

**c) When faced with a problem, use standard approaches to mitigate it**. For example, say you are faced with an availability problem. State that replication and partitioning help increase availability in general, and move on to offer a solution. d) Don’t make points without thinking them through. Half-hearted attempts at solving problems are frowned upon heavily.

#### (2) Knowledge

**a) Stay up to date with the current solutions in the market**. This includes products and design practices. If NoSQL is being adopted left right and center, you need to be aware of it.

**b) Know when to pick a solution vs. building something custom**. If you name a product, you should be (generally) aware of the features it provides.

**c) Design practices enable you to meet custom requirements**. Examples are decoupling systems, load balancing, sticky sessions, etc…

#### (3) Flexibility

**a) Switch your targets as the requirements shift.** If the interviewer wants to know about one particular part of the system, do it first.

**b) Never have a set architecture in mind**. We all try to fit requirements to a system, but only after it has been shaped by the initial ones. A rigid attitude creates a brittle architecture. It will break before you do.

**c) Take a step back at times to make adjustments to the general architecture.** Being focused on one part can narrow our vision and bloat those areas. There will be components which can be extracted out and extended to the rest of the system.
