What does HackerNews think of system-design-primer?

Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.

Language: Python

#61 in Python
#1 in Web app
See also: "The System Design Primer - Learn how to design large-scale systems"

https://github.com/donnemartin/system-design-primer (see https://hn.algolia.com/?q=system-design-primer for discussions)

I've used this amazing deck for learning Chinese: https://www.reddit.com/r/ChineseLanguage/comments/7mjmjc/bes...

This looks like a nice Anki deck for reviewing system design concepts: https://github.com/donnemartin/system-design-primer

You might also be interested in Alex Xu's System Design Interview Book.

I've certainly been where you are. It definitely sounds like you need a job change, but your next company should be selected with care.

> I don't have good grades in my undergrad

Don't furnish that information. If the company asks you, bow out - it's an absurd question when you have 5 years of experience.

A masters won't help you much and I wouldn't recommend it in your situation. It's the kind of thing a person thinks about when they feel stuck - I've had the same impulse at every career junction.

> Should I work on solving LeetCode questions, and aim to get into FAANG companies

I'd certainly recommend LeetCode, but not just for interviews. There are benefits to it that nobody mentions: your initial code correctness, your debugging skills, your communication skills, and your familiarity with your programming language all go up.

I just went through this process and the time investment has paid off quite well. I used to hate LC and thought I wasn't capable of landing any job, let alone a top tier job.

FAANG is good for compensation, but not necessarily the most exciting work, so keep that in mind. There are many non-FAANG companies that are good catches.

teamblind.com is a great resource for interview tips, if used carefully.

Expect months-long practice and to do a lot of interviews. Rejection is just part of the process. Interview with companies you haven't heard of/don't care much about first. Respond to random recruiters who reach out.

Don't forget to study for behavioral questions (STAR method) and system design (https://github.com/donnemartin/system-design-primer).

For practical LeetCode tips - expect to complete a few hundred of them if you want to get into a top-tier shop. Speak out loud and explain as if you're in an actual interview. Timegate yourself: 7.5 minutes for easy, 12.5 minutes for medium, 20 minutes for hard. These are very aggressive times. If you haven't finished in that time, look at the solution, take notes, and understand it.

Here's a Python script I wrote to help myself with this process. `pip install rich` should take care of the only external dependency. This script randomly selects LeetCode question numbers and creates a markdown file for note-taking. When I failed a question, I would stick it in `attempted` and it would come back up eventually.

    #!/usr/bin/env python

    import random
    import sys
    from pathlib import Path

    from rich.console import Console

    LC_COUNT = 2218
    TIME_LIMITS = {
        "Hard": "20:00",
        "Medium": "12:30",
        "Easy": "7:30",
    }

    crushed = {}

    mediocre = {}

    attempted = {}

    short_list = {
        # Blind 75
        76,
        102,
        105,
        124,
        128,
        143,
        152,
        153,
        198,
        207,
        208,
        211,
        212,
        213,
        230,
        238,
        252,
        269,
        271,
        295,
        300,
        322,
        323,
        371,
        417,
        422,
        424,
        435,
        449,
        1143,
    }

    all_lc = {num for num in range(1, LC_COUNT + 1)}
    untried = all_lc.difference(crushed)

    lc_options = short_list or attempted or untried or mediocre
    lc_options = lc_options.difference(crushed)

    if len(sys.argv) > 1:
        num = sys.argv[1]
    else:
        num = random.choice(list(lc_options))

    console = Console()


    def user_input() -> str:
        return console.input(prompt="[bold blue]>>>[/bold blue] ")


    console.print("LC:", num)
    base_path = Path.home() / "LC/"
    for existing_path in base_path.glob(f"*/{num}-*.md"):
        console.print("File already exists:", existing_path)
        exit()

    difficulty = ""
    while difficulty not in TIME_LIMITS:
        console.print(f"Difficulty {list(TIME_LIMITS.keys())}:")
        difficulty = user_input().strip().capitalize()

    name = ""
    while not name:
        console.print("Name:")
        name = user_input().strip().replace("  ", " ")

    url_name = name.lower().replace(" ", "-")

    path = base_path / f"{difficulty}/{num}-{url_name}.md"


    template = f"""# Problem: {name.title()}
    https://leetcode.com/problems/{url_name}/

    *Difficulty:* {difficulty}
    *Status:* Untried
    *Time:* ? left out of {TIME_LIMITS[difficulty]} minutes

    # Notes:


    # Attempts:

    ## 

    Time: O(?)

    Space: O(?)

    ```
    ```


    # Solutions:

    ## 

    Time: O(?)

    Space: O(?)


    """

    if path.exists():
        console.print("File already exists:", path)
    else:
        console.print("Creating file:", path)
        with open(path, "w") as outfile:
            outfile.write(template)

    console.print("Done", style="bold green")
Ah sorry about that. I think my comment came off as a bit rude after reading it back to myself. Backend development means so much nowadays I think it would be hard for someone to publish a general book on it. But maybe someone else has found something that I'm unaware of. I think you'll have the best luck collecting some general resources about different subjects. Here's some resources that I recommend flipping through.

- Any up to date book on the programming language of your choice

- Any up to date online course of the programming language of your choice

- https://hpbn.co/ (networking)

- Build APIs You Won't Hate (api design)

- https://github.com/donnemartin/system-design-primer (system design)

- API Design Patterns by Geewax (somewhat opinionated, but overall good resource for api design)

Best way to learn is by working with someone experienced.

Or just use mature solution like Rails for example it solves most of typical problems and has easy itegrations. If you need more flexibility then maybe Node.js or other ecosystem is better.

Generally theme about architecture is called System Design and there are resources to learn it for interviews/learning purposes but most of it only is applicable at very big scale and you might never need it. Read "Designing Data Intensive Applications" and look into [1] if still interested.

IMO better to invest time into data design/querying (caching) so that you won't think you need some vodoo to handle your traffic. Like 90%+ of sites/apps don't have 1000req/second and this should be handled by Python on Arduino so as long as your DB design is good you are fine.

For async processing it's worth taking a look into Temporal [2] as it looks as promising alternative to job ques and cronjobs.

I can also recommend [3] to learn some cloud patterns

[1] https://github.com/donnemartin/system-design-primer

[2] https://temporal.io/

[3] https://docs.microsoft.com/en-us/azure/architecture/patterns...

Work through these books, then you start looking at any random app or system and can start from there:

- System Design Interview – An insider's guide: https://smile.amazon.com/gp/product/B08CMF2CQF

- System Design Interview Vol 2: https://smile.amazon.com/System-Design-Interview-Insiders-Gu...

- Designing Data-Intensive Applications: https://smile.amazon.com/gp/product/1449373321

- System Design Primer: https://github.com/donnemartin/system-design-primer

Especially: https://github.com/donnemartin/system-design-primer#how-to-a...

- The Architecture of Open Source Applications: http://aosabook.org/

> there's no way to do a "cracking the system design interview" the way you can with coding problems

I'd disagree:

- System Design Interview – An insider's guide: https://smile.amazon.com/gp/product/B08CMF2CQF

- System Design Interview Vol 2: https://smile.amazon.com/System-Design-Interview-Insiders-Gu...

- Designing Data-Intensive Applications: https://smile.amazon.com/gp/product/1449373321

- System Design Primer: https://github.com/donnemartin/system-design-primer

Especially: https://github.com/donnemartin/system-design-primer#how-to-a...