Welcome to the System Design Practice Repository! This repository is dedicated to helping software engineers enhance their system design skills through practical exercises and educational resources. Whether you're a beginner looking to learn the basics or an experienced engineer aiming to refine your design abilities, this repository is here to support your growth.
System design is a crucial skill for software engineers, particularly when building large-scale and complex applications. This repository aims to provide a collection of system design questions, solutions, and resources that will help you practice and improve your system design abilities.
To get started with this repository, follow these steps:
- Clone the repository: Clone this repository to your local machine using the following command:
git clone [email protected]:mwithington/system-design-prompts.git
-
Choose a problem: Browse the repository to find a system design question that interests you. Each question is located in its own folder, containing a problem statement and any accompanying resources.
-
Solve the problem: Develop your own solution to the system design problem. You can use any programming language or technology stack of your choice. Feel free to explore different approaches and discuss your ideas with the community.
-
Contribute: Once you've solved a problem, contribute your solution by creating a new branch and submitting a pull request. Follow the guidelines outlined in the Contributing section below.
-
Explore and learn: Engage with the community! Review and discuss other engineers' solutions, provide feedback, and learn from their approaches. This repository aims to foster a collaborative environment where everyone can grow together.
The repository is structured as follows:
├── problem-1/
│ ├── README.md
│ └── resources/
├── problem-2/
│ ├── README.md
│ └── resources/
├── ...
├── CODE_OF_CONDUCT.md
├── LICENSE
└── README.md
- Each problem is contained within its own folder, named
problem-1
,problem-2
, and so on. - Inside each problem folder, you'll find a
README.md
file containing the description of the system design question. - Additional resources related to the problem, such as diagrams or research papers, may be included within the
resources/
subdirectory.
Contributions to this repository are welcome and encouraged! To contribute your solution to a system design problem, please follow these guidelines:
-
Fork the repository and create a new branch based on the problem you're working on.
-
Implement your solution within the problem folder, following best practices and adding any necessary documentation.
-
Create a pull request, clearly describing the problem you solved and the approach you took. Feel free to include any challenges faced during the process.
-
Engage in discussions with the community. Review and provide feedback on other pull requests. Collaborate and learn from each other's solutions.
For more detailed guidelines, please refer to the CONTRIBUTING.md file.
This repository aims to provide a comprehensive collection of resources related to system design. The following resources are recommended to enhance your understanding and improve your system design skills:
Please refer to these resources to further develop your system design knowledge.
This repository is licensed under the MIT License. Feel free to use the code and resources provided in this repository for educational purposes or to contribute to the project.