System Design Learning Roadmap

System Design talks about defining the architecture , design , interfaces and data flow between multiple components in a software system aimed at achieving an specific requirement.

If you are a Software Developer Mid to Senior Level ,Tech Lead, Engineering Manager ,Candidate targeting top product companies, devops or a site reliability engineer then this post is for you. In this blog we will talk about System Design Learning Roadmap in below 5 steps.

System Design Learning Roadmap

Step 1 : System Design Core Concepts : To have a strong initial understanding of System Design and architecture you shall know below concepts:

➡️System Design Introduction
➡️Distributed Systems
➡️Load Balancers
➡️Caching
➡️Data Partition vs Sharding
➡️Proxies
➡️Indexes
➡️Modern Databases
➡️CAP Theorem
➡️Consistent Hashing

Step 2: System Design Advanced Concepts :𝐃𝐨𝐧’𝐭 𝐚𝐩𝐩𝐞𝐚𝐫 𝐟𝐨𝐫 𝐒𝐲𝐬𝐭𝐞𝐦 𝐃𝐞𝐬𝐢𝐠𝐧 𝐈𝐧𝐭𝐞𝐫𝐯𝐢𝐞𝐰 𝐰𝐢𝐭𝐡𝐨𝐮𝐭 𝐫𝐞𝐚𝐝𝐢𝐧𝐠 𝐭𝐡𝐞𝐬𝐞 𝐚𝐝𝐯𝐚𝐧𝐜𝐞𝐝 𝐜𝐨𝐫𝐞 𝐜𝐨𝐧𝐜𝐞𝐩𝐭𝐬 .

➡️ Functional vs Non functional requirements
➡️ Redis and memcached
➡️ API gateway vs Load balancer
➡️ JWT vs Oauth
➡️ Stateless vs steteful
➡️ Microservices vs Monolithic architecture
➡️ Rate limiting vs throttling
➡️ DNS and Route 53
➡️ Content Delivery network and Edge nodes
➡️ Idempotency

Step 3: High Level Design : 𝟕 𝐏𝐨𝐢𝐧𝐭𝐬 𝐲𝐨𝐮 𝐬𝐡𝐚𝐥𝐥 𝐛𝐞 𝐚𝐛𝐥𝐞 𝐭𝐨 𝐝𝐢𝐬𝐜𝐮𝐬𝐬 𝐢𝐧 𝐇𝐢𝐠𝐡 𝐋𝐞𝐯𝐞𝐥 𝐒𝐲𝐬𝐭𝐞𝐦 𝐃𝐞𝐬𝐢𝐠𝐧 𝐢𝐧𝐭𝐞𝐫𝐯𝐢𝐞𝐰

➡️ Requirement gathering : In any high level system design interview , you shall be well aware of Functional requirements like authentication and non functional requirements like availability.

➡️Capacity estimate : Estimate number of users , QPS , bandwidth , storage like XYZ tb usage per month , then storage in XYZ years , cache storage required and so on.

➡️ High level architecture and flow : You shall be well aware of call flow from user to load balancers to api gateways to business logic to caches and to backend systems or databases as applicable in distributed application asked.

➡️ Database design : You shall know the kind of database you are going to use in your system.

➡️ API design : Defining Restful or grpc endpoints with request and response formats.

➡️ Security : Proper usage of security mechanisms like OAuth , JWT, encryption etc.

➡️ Scalability strategies : Address horizontal scaling via load balancers , replication and sharding concepts .

Step 4: Low Level Design : 𝟕 𝐋𝐨𝐰 𝐥𝐞𝐯𝐞𝐥 𝐬𝐲𝐬𝐭𝐞𝐦 𝐝𝐞𝐬𝐢𝐠𝐧 𝐭𝐨𝐩𝐢𝐜𝐬 𝐲𝐨𝐮 𝐦𝐮𝐬𝐭 𝐤𝐧𝐨𝐰 𝐛𝐞𝐟𝐨𝐫𝐞 𝐚𝐧𝐲 𝐒𝐲𝐬𝐭𝐞𝐦 𝐃𝐞𝐬𝐢𝐠𝐧 𝐈𝐧𝐭𝐞𝐫𝐯𝐢𝐞𝐰.

➡️ OOPS principle: Classes , interfaces , inheritance , encapsulation and polymorphism. Use and design them to avoid tight coupling.

➡️ SOLID principle: Single responsibility, Open closed , Liskov Substitution , Interface Segregation, Dependency Inversion to ensure maintainable code.

➡️ Design Patterns : Know creational pattern ( single , factory ) , structural ( adapter , decorator ) and behavioral pattern (observer and strategy ) and real life usage of these design patterns.

➡️UML Diagram : You shall know to draw class diagrams , sequence diagrams and use cases on whiteboard and explain in detail.

➡️ Requirement clarification: Get clarity from interviewer about scope , constraints and edge cases for the low level design.

➡️ Pseudocode : Implement key methods with better check on time / space complexities mostly attempt in O ( 1)

➡️ Edge cases : Discuss edge cases , verify with test cases and beyond syntax .

Step 5 : Real Life System Design Challenges : Once you are ready with above concepts the idea shall be to solve real life system design bottlenecks like below and suggest best approach :

➡️ If cache is faster than database , why not save everything in cache?

➡️ You found an API is very slow in production , how will you debug and solve it ?

➡️ How does a browser remembers your login ?

➡️ Your cache is full . you have to remove an item. How will you do it?

➡️ You click send OTP nothing happens, click Resend and suddenly both OTP arrives. Why ?

➡️ One microservice is down and entire system is failing. How will you handle it ?

➡️ How will you design an API that survive millions of request per second?