intro
Understanding the basic need of system design interview
Architecture is the most used and yet most misunderstood term today. There can be multiple architectures inside any system and a good architecture always has a flexibility and desire to improve. There is no one way to define or state a system, rather architecture is a view that can change over a systems’ lifetime.
Most of the cloud architecture and designs in principle take ideas from system and OS design, be it thread pool, retry, caching etc. It is useful to understand the concepts rather than names, which often find easy penetration into the common communication style among developers. Enterprise application doesn’t essentially means a very large application, but a system which helps enterprise to be productive and achieve it’s business.
System design is a crucial aspect of software development that involves designing the architecture and components of a system to meet specific requirements. It encompasses various elements such as scalability, reliability, performance, and security. By carefully considering these factors, system designers can create robust and efficient solutions that can handle large amounts of data and user traffic.
A system design or architecture for an online retailer like Amazon will be very different than that of a video streaming service like Netflix or a photo posting service like Instagram. But basics of all the important considerations while designing any service like, reliability, scale, performance etc. remains same.
Performance of your single system/ container can impact overall latency of your whole cloud. So, in principle everything is correlated. For example, for increasing performance different developers will look at different points of latency, For a cloud developer or architect, will throw away some jargons like, scaling up or load-balancer and caching etc. While a system developer will might ask to replace the NIC interfaces with high bandwidth interfaces or add more cores or update the edge-router. So, the idea of making an over all system better comes from analysing each and every point of possible improvement.
In this section, we will explore the fundamentals of system design and delve into different strategies and techniques used to design scalable and reliable systems. We will look at some popular design questions , some more specific design questions and how someone should prepare themseleves for handling those problems.
Again , individual choice of design is dependent upon various factors and no best design can be declared mere based on few points. Only after a longer run , with enough analytical data in hand a design can be evaluated for it's particular aspect.
When you are stepping a foot in an interview for design , it's rather important you relize, you are there for find a solution that is needed rather than telling a solution that you know.
Only way to achieve this is to understand the problem space, ask clarifying questions instead of making assumptions , define key constraints and boundaries , ponder on different options , think about key aspects of design , suggest a solution that works, refine or improve.
We will talk about different strategies which can help you to organize your interview process in a better flow.