Is there a way to "grind" system design or soft skills?

Profile picture
Mid-Level Software Engineer at Twitcha month ago

I'm not sure exactly how to phrase this, but to give an analogy, I love card games (ex: Legends of Runeterra, Race for the Galaxy, Hearthstone, etc). There are a fixed set of rules and a fixed set of cards. I can "grind" games and get better by noticing patterns, picking up new strategies or tactics by playing against a diverse set of players. The outcome of an interaction is usually idempotent (i.e. card 1 interaction with card 2).

In real life, things are quite complicated. Asking a certain question in a certain way to person 1 and person 2 may give wildly different responses, and may even depend on your mood, their mood, your tone, time of day, etc. It's super messy and unpredictable.

I also feel a similar way about system design. The nearly infinite possibility of inputs, outputs, TPS, throughput, scenarios make it difficult to reapply the same set of rules to different scenarios. This is just talking about one component, when we bring in N components, the interaction gets very complicated and the "rules" change" case by case. I'm sure it gets better with practice, but I also feel I have a limited opportunity to learn or practice these on the job.

Has anyone found a way to structure these learnings in terms of a repeated "grind", because oftentimes I feel overwhelmed and don't know where to start. This is a complicated question, so answers regarding either a) soft skills or b) system design separately I will treat as valid answers.



  • Jonathan Chiou
    Engineer at Robinhood
    a month ago

    You can think about real life and strategy games in the same way: there are infinite paths of how things pan out in game/project/meeting/building a system, but a lot of individual events in these broader moments are effectively repetitions of a small number of fixed events. What makes things tricky is how these events permutate. A set of 3 potential events might sound small, but if we have an arbitrary sequence of 10 of these events and each event has 10 outcomes we can see how the "what ifs" can blow up and be overwhelming to think about.

    In isolation, we can say "oh well that's just how it is gg" when confronted with the near bottomless amount of outcomes we can encounter. But in reality, we do have control of either (or both):

    • The number of events that can be sequenced within the scenario: more specifically, this refers to breaking down the scenario into smaller scenarios. There are potentially infinitely many ways a LoL game can play out and it would impossible to talk about the game if we need to be able to mentally track every outcome, but the discussion becomes much simpler if we break down the game into 3 common stages of early, mid, and late game. Each stages of the game has a much smaller set of potential events, so it becomes much easier to discuss and focus on particular details.
    • The number of outcomes within a particular event. We can think about this in exponents: if we have 2 sided 6-sided dice, we have 36 outcomes. If we have 2 4-sided dice, we have 16 outcomes. By lowering the amount of sides for each dice, we can lower the amount of potential outcomes. We want to think about individual events in the same way: by boiling them down to as simple of decision tree as possible, we can drastically reduce the outcomes that we have to track. My recommendation is to think as individual events as binary: either the outcome is <blah> or not <blah>.

    Reeling this back into system design/soft skills:

    • Break down systems into smaller, sequential milestones and focus on each milestone one a time. When we have to think about what work is needed to move a milestone forwards, ask yourself "what is the smallest amount of work needed to say we've progressed". Once you have some thoughts/ideas, rule them in or out with "does this make sense" (only has 2 answers: "yes" or "no").
    • For discussions with people, it's not like systems where you get 1 giant thing at once to potentially break down & you have more control on where you start. Start by asking questions that can be answered by "yes"/"no" or by providing opinions that can be also supported/disagreed with with "yes" or "no".

    By thinking about things in terms of these smaller "yes"/"no" pieces, the cognitive load should be lower when interacting with systems and people and you can shift that load towards building up the muscle memory around knowing how to ask narrow questions, what questions to ask to certain people, and if there's any common themes around how certain roles react to certain questions/information.

    Hope this helps!

  • Steve Huynh
    Principal Software Engineer at Amazon
    a month ago

    The short answer is no.

    The way you described a grind is within a system. There are a fixed set of rules, inputs, and outputs. With a system design you are generating the rules, inputs, and outputs. There are cards in the games you referenced that change the rules, but the truly powerful cards, which undermine the tricky balance that makes the game fun, are quickly banned or removed. Describing a system is a different game then working within a system.

    The best advice I have about how to get better at system design systematically is to do a retrospective design on a system you are familiar with. My guess is that at this point your understanding is at the "what" a system or service does. For the services and components you own, do you know the "why?" As you pick up these concepts you start to see them pop up everywhere, and more importantly, you start to notice places where they are missing. Usually there is a reason. Time and experience are really the only ingredients here. I've noticed very few prodigies that are able to make a contribution to a complicated system with less than 3 years of experience. Not that it can't happen, my thesis is that you have to be burned a couple of times before you really learn lessons here. It takes a while to burn yourself the requisite amount of times.

    And when it comes to soft skills, what you're really talking about is people. Humans are not deterministic robots. What I would recommend is finding resources to work on your EQ. What happens when you work on yourself is you start to become more compassionate, a better listener, and notice more social cues that you may not be picking up on today. It took me a long time because I started later in my career and I'm not where I'd like to be, but this work has done the most for me to up-level my soft skills.


  • Jordan Cutler
    Senior Software Engineer and Career Coach
    a month ago

    On the soft skills topic:

    This is something I struggled with and in a way continue to struggle with because of a very strange upbringing. I often feel like there's something I'm "missing" in a way that it doesn't feel like other people are. So I totally get you.

    The way I have learned a lot of my skills is in a way--robotic. I've watched charisma videos, social skills videos, and read tons of books.

    Now, if you were to wave a magic wand and watch and read everything that I did in 1 afternoon, it wouldn't magically make you a soft skill expert.

    What will make you a soft skill expert, or at least help you get better at it over time, is to take in these concepts and apply them over time to your day-to-day situations. Understand that change takes time to happen.

    Given that, if you're interested in the resources I've used to start applying these over time:

    • Check out the "Communication books" section here:
    • I also recommend watching the "Charisma on Command" youtube channel. They analyze celebrities and highlight their soft skills or ways they can improve, so it's a fun way to learn.