How to do effective System Design
By: Sachin Garg
Tags: System Design, System Design Interview, Software System Design, Effective System Design

Requirement Gathering

To support problem statement & its understanding, It’s essential to do proper requirement gathering which will not only help you to understand what business is trying to achieve & what should be right possible architecture and solution. Requirement gathering can be further divided into 3 steps.

Functional requirements Non-Functional requirements Extended requirements

Functional Requirement

This type of requirements will drive revenue for company. Functional requirements are based on 5Ws theory i.e. What, When, Why, Where & How. Yes, ‘How’ is part of 5Ws. The variation of using 5Ws help to identify functional requirements that we want to achieve as part of System Design. There might be cases where you will get vague requirements in that case it’s essential to clarify requirements based on 5Ws theory. It is important to understand the requirements & negotiate about possible trade-offs to think about MVP(Minimum viable product).

Some of the example of basic functional requirement and queries

What features are in scope? What capabilities are required? Does the system support CRUD(Create Read Update Delete) operation or only specific operations? How many users will use the platform? Ask questions about the customer experience How user will interact with service? What are the quality expectations? Where those features will be used or accessed to understand geographic constraint? How much data need to be stored?

Non Functional Requirements

This type of requirements will allow functional requirements to run in more effective way to help in continues increase in revenue without any disruption. It will help to understand what things needs to be taken care while architecting scalable, available & resilient system design. Most of the companies already have pre-defined parameters for non-functional requirements but it’s worth to understand why we need it & why we have to follow it. Some of basic queries to gather non-functional requirements which can be applicable to both applications/services & databases.

Does the system need to be highly available? Does the system need to be scalable? Does the system require disaster recovery plans? Does the system need to be resilient? What is the expected load or number of requests per TPS / TPM? What is the expected response time per TPS from the system? What are some of the performance bottlenecks you would consider? How would you improve performance or reliability? What will be data retention policy? Should data be purged periodically ? What steps needs to be taken in case of deletion request? Does DB require replication in different regions?

Extended Requirements

Extended requirements are part of well managed services. It is useful for observability/telemetry. It’s all about how we want to collect, track & analyze customer interactions with application by utilizing application logs & analytical tags. This is crucial for defining success/failure of application/feature, understanding customer behavior, application behavior which can lead to enhance the customer experience, machine learning applicability & many more. Some of the basic queries which we should think & ask