38

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

Profile picture
Mid-Level Software Engineer at Twitch2 years 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.

2.1K
5

Discussion

(5 comments)
  • 23
    Profile picture
    Engineer at Robinhood
    2 years 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!

  • 20
    Profile picture
    Principal Software Engineer at Amazon
    2 years 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.

    -Steve

  • 17
    Profile picture
    Senior Software Engineer and Career Coach
    2 years 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: https://bento.me/jordancutler
    • 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.
    • 1
      Profile picture
      Mid-Level Software Engineer [4] at Uber
      5 months ago

      Great recommendations here. I second the “Charisma on Command” recommendation. They have GREAT content, and while its not perfect, it is great to establish a good foundation. I actually ended up taking their course and it is pretty good too. I would also recommend their podcast “Dropping in with Charlie Houpert”. The early episodes are especially helpful to hear how they learned Charisma

  • 12
    Profile picture
    Tech Lead @ Robinhood, Meta, Course Hero
    a year ago

    I love the gamer terminology here - Very fitting given that you work at Twitch 😂

    As others have mentioned, there isn't a traditional way to "grind" these skills like you can in a single-player game by doing the same task over and over.

    However, you can improve extremely rapidly at these skills and you can indeed systematize it a bit, especially since you work at a Big Tech company like Twitch:

    • System design - For any major project you take on (i.e. >2 weeks of work), put together a technical design doc and share it. Log the amount of feedback you get each time and come up with a thorough strategy on measuring system quality after you ship it. You should be getting less negative feedback over time alongside more positive performance metrics on what you're shipping. Check out my system design series to learn more: System Design Masterclass: Taro Playlists
    • Communication - The prime "training ground" for this is the 1 on 1 meeting. As a mid-level engineer, it's in your best interest to have more recurring 1 on 1s anyways to build trust and expand scope (so one basic metric to crank up is meeting load). You can meet with senior/staff engineers to get their feedback and/or with junior engineers to mentor them. However, measuring your progress growing these skills is much harder than system design: You'll need to gauge how much more people trust you over time (maybe you can assign a personal, private score to how well you think meetings went?). I recommend these resources for all this:

    In general, you can get better at any skill by doing more of it and then having some sort of reflection system to extract maximum learning. You can always systematize things by assigning numeric scores - It doesn't need to be too scientific and can come from gut feel.

    The good news is that Big Tech companies are especially effective at building up these skills, since they're much more impactful in these environments and are more weaved into the engineering career matrix.