How many of you who are interviewing have done the dreadful system design interview? Probably only a few. In my experience, most companies do not have system design interviews. They usually focus more on Leetcode-like questions and other problem-solving skills. Well, guess what, I have one coming up at the beginning of March. So, I am going to use this post as a chance to review and also share information about system design with you.
To be honest, I am not very confident or comfortable with system design concepts. But with the help of Google and the newest contender ChatGPT, I was able to understand the concepts better.
Here is my understanding of the general steps approaching system design:
- Requirements Gathering: The first step is to gather information about the application and its users, stakeholders, and other involved parties. Then try to define functional and non-functional requirements for the system. (This is something we did in the Oregon State University Software Engineering I course)
- System Analysis: Here you also want to identify any potential challenges and constraints the system might have.
- Architecture Design: Based on your gathered requirements and considerations, this is where you identify the major components of the system and how they relate to each other.
- Component Selection: After the high-level architecture is defined, this is where you select what components you want to use to build the system. For example, a specific web server to host the user interface or a database management system to store data. We should evaluate different options with consideration of cost, scalability, reliability, and performance.
- Communication Design: After selecting the components, you might also want to consider the specific ways the component will be communicating with each other. This involved specifying the communication protocols, data formats, and APIs that will be used.
While the listed steps seem straightforward, different people have variations of approaches to system design. Here are some video links showing how different software engineers approach system design.
Of course, all this information is no use unless you practice them. Find a friend and google some easy system-design interview questions and practice with them. Or, you can also use Pramp, which is also part of Exponent. Pramp provides a platform to conduct a free mock interview with a random peer: https://www.pramp.com/
Hopefully, all this system design information helps you prepare! This certainly helped me review the concepts! Good luck!
Leave a Reply