# Backend System Design Time Allocation

A good enough framework for 60 minutes allocation looks like this:

- 10 + 15 + 25 minutes
- The 10 minutes left are buffers for introduction, minor technical problems, Q&A which usually doesn't affect your score


### 10 minutes: Clarification of the requirements

Different companies want a different thing. So you have to clarify unless they give you very detailed instructions. Some popular questions/assumptions look like

- Could we just focus on the backend?
- Are there any non-functional requirements?
- Does it make sense to assume we will have more reads than writes
- Is it ok to use 3rd party service for our payment gateway?
- Do we need to support multiple languages?

For estimation, confirm with your interviewers because not every company wants a number. Unless you are asked for, skip the estimation step to save time for other steps.

### 15 minutes: High-level design

The goal of this step is to provide a big picture to show that we fulfil the functional requirements. At the end of this step, both you and your interviewer should have a general idea of how the data flow from request to response. Some common things you could talk about are:

- An illustration of your simplest architecture (could be client -> server -> database in some cases)
- System interface
    - API (HTTP method, what your endpoint does)
- Databases
    - what kind of data do we want to store
    - what kind of databases and why (Relational, Key-Value, Graph, Search...
    - schema
    - (if you do estimation) figure out how much disk space do we need and see if that makes sense
        - For instance, storing TB sized data in a single relational database instance doesn't make sense (ref: [Amazon RDS instance types](https://aws.amazon.com/rds/instance-types/))

To save time, skip talking about optimization, scaling etc. So no load balancers, no replicas at this point.

### 25 minutes: Detailed components, optimization, all the goodness

This is where you want to spend most of your time because

- Compared to high-level design, which might look similar across different titles (think TikTok vs youtube), interviewers are most interested in how deep could you go for the current title
- a place to show off how knowledgeable you are

Always confirm with your interviewers which components are they more interested in. This is the step you want to mention:

- How to scale your read and write
- Add more logic to help your system grows:
    - compression
    - an algorithm like splitting files into chunks etc
- adding more components/logic to help your system grow. For instance, message queue, CDN etc.

### Buffers

If you have more questions than time allowed, it's ok to ask your interviewers to stay more for a few minutes. I did and so far no interviewer rejected.
