System Design

Intel
ppp

Go to company page Intel

ppp
Jun 2, 2018 21 Comments

I work as a software engineer. However, I've never worked with databases or web technologies or distributed systems. Dont know if I should be ashamed of myself. Normally, I dont give a f.ck about that because I'm still a software developer.

However, in every interview, I get system design questions and fail badly in those. My only option without changing a job is read through all of system design solutions on the web (grok, hiredintech, interviewbit etc). I did all of them but I still suck at system design. I think that I lack some foundation to grasp the catch of system design.

What can you suggest for a person like me? Are there anyone in the same boat? Is there any material that can take me from zero to hero?

comments

Want to comment? LOG IN or SIGN UP
TOP 21 Comments
  • Uber
    lLjv00

    Go to company page Uber

    lLjv00
    How is it possible to work as a dev and not deal with databases and distributed systems? What software are you writing?
    Jun 2, 2018 4
  • Microsoft / Eng
    fawlty

    Go to company page Microsoft Eng

    fawlty
    I get what you are saying. I work with web & cloud technologies & databases, but the systems owned by my team just don't get the kind of load that would give first hand exp in building/ maintaing@ massive scale. Unfortunately there's no magic potion to get better at this kind of system design. Re-read those solutions, read Kleppman's book, read notable papers on Distributed systems, follow tech blogs of major tech companies etc. Just keep honing your skills at design.
    Jun 2, 2018 4
  • Twitter / Eng
    Allinity

    Go to company page Twitter Eng

    PRE
    Oracle, Facebook
    Allinity
    TBH there’re only 2 solutions to this (been in the same boat previously):
    1) Do a side project with *all* the stuff you’d need to talk about in a system design interview. Spin up a real-time streaming app on AWS with that does something simple but uses Kafka/Spark/Cassandra etc etc.
    2) Work at a company that operates at scale. Even if you’re doing front end stuff, it’s hard to escape systems at scale at companies like these. I was at Microsoft briefly and had 0 exposure to distributed systems. The harsh reality is that you’ll be dinged severely for this experience gap the more senior you get.

    It’s good you realize the skills gap early. Reading blogs and watching tech talks is good - but that’s all still an outsider’s perspective
    Jun 2, 2018 2
    • Intel
      ppp

      Go to company page Intel

      ppp
      OP
      Thank you for this very insightful advice, appreciate it. Doing a project is fine but arent these services (aws/gcp) handling all those complexities (consistent hashing as such) within themselves? Hands on experience is definitely good but I fear to miss what is under the hood.

      Working at a company that deals with such systems is maybe the best choice. But, without a reasonable performance on system design interviews, this is out of reach for me at this point.
      Jun 2, 2018
    • Twitter / Eng
      Allinity

      Go to company page Twitter Eng

      PRE
      Oracle, Facebook
      Allinity
      You’re right you won’t get to implement consistent hashing with a side project, but a majority of engineers at such companies don’t get to implement it either. For eg- as an app developer at Facebook, you’d use Casandra but won’t necessarily care about the consistent hashing code, besides configuring the client to handle your use case and traffic properly. Knowing what consistent hashing is is enough for all system design interviews. Besides that I’d also read Designing data intensive applications (o’reilly) - probably the best book to get a good intro to most system design interview concepts.
      Jun 2, 2018
  • Amazon
    ɹǝƃıǝƃ

    Go to company page Amazon

    ɹǝƃıǝƃ
    It’s great that you've identified the gap. It's even better that you have the drive to want to fill that gap.

    For me side projects are where I'm best able to fill in my gaps. When you do something from absolutely scratch you really internalize all the small details and the consequences of your design decisions.

    Try to come up with simple achievable side projects, design them, deliver them, then show off your design/delivery to a trusted more senior engineer. Then iterate. Your definition of simple will grow. Feedback on your designs will help you figure out better questions to ask and answer about future designs.

    As a personal example. I designed a "simple" multiplayer matchmaking service. Sure I delivered it but in hindsight my initial design really sucked I didn't even need an external review to figure that out. I learned a lot just by playing around.
    Jun 2, 2018 1
    • Amazon / Eng
      minimouse

      Go to company page Amazon Eng

      BIO
      pipmenot dot wordpress dot com
      minimouse
      Learning by doing- wont it take many months (or maybe a year) before we will be able to crack system design interviews?
      Aug 14, 2020
  • Peloton / Eng
    GAJK73

    Go to company page Peloton Eng

    GAJK73
    Do a mock interview. The interviewer will identify gaps for you and you can improve on them.
    Jun 2, 2018 0