HACKER Q&A
📣 LZ_Khan

How to get more experience with system design questions (esp scaling)?


Hi HN,

I've recently gone through a few interviews where I did poorly on system design questions like "design twitter." The interviewers expressed a wish to see me go more in depth on technologies, but I simply don't have much experience in any of them, as my current role is heavily ML focused and issues of scaling were long-ago solved by my large employer.

My question is are there any recommendations for ways to get more experience on system design? For most things it'd be as simple as "start a project revolving around X" but for scaling.. you kind of need users first. Was wondering how to get around this problem.

Thanks


  👤 mdcds Accepted Answer ✓
> The interviewers expressed a wish to see me go more in depth on technologies, but I simply don't have much experience in any of them

I conduct system design interview sessions for my org. My advice is to find opportunities to work on new architectures that use pieces of infrastructure that you aren't familiar with yet. You need to know the moving parts before you can start thinking about how you'd approach designing Twitter. Theoretical knowledge can be sufficient some times, but nothing beats hands-on experience.

How to get opportunities for hands-on experience in your case?! Idk, depends on your circumstances. Maybe go for an internal transfer to work on something different. Maybe go for a less senior role and but be picky about the new tech stack. Maybe go to a less prestigious company that pays less, but offers opportunities to build new skills.

Are you trying to go for ML Engineer or SDE positions?


👤 stephenbez
I've designed large systems, given numerous system design interviews, and prepared for these interview myself. This is what I'd recommend:

1) You can read the engineering blogs from top companies such as Google, Meta, Twitter, Uber, etc. They talk about their designs. It's especially important to read the blog for the company you are interviewing with since it will give you more context for the problems they are solving.

2) I found this template to be pretty useful: https://leetcode.com/discuss/career/229177/My-System-Design-...

3) By yourself, or with a friend brainstorm how you would architect certain features from popular app. For example: Uber routing, Instagram recommendations, sending WhatsApp images, live video streaming. After you are done, look up how it is actually implemented. This is fun and you can do it a couple of times a week.

4) Research details about fundamental technologies. Your system will likely want a cache and you might say you will use Redis. You should be able to know details on how you will use Redis to accomplish your goals. For example what key will you use, what TTL, what eviction policy. Almost all of these technologies are open source. If you don't use them in your job, spend 5 hours on each going through the Quickstart guides and playing with it.

5) Once you have a pretty good idea what you are talking about, make sure you talk about tradeoffs. Companies want experienced engineers who can understand the tradeoffs between different architectures and articulate their reasoning instead of picking technologies just because they are popular.

6) Does your company have design docs? Can you read those to learn how your system was built? Maybe reach out to the author and learn what went well and didn't go well once it was implemented.

Of course the best way to learn all of this is to design systems yourself and learn from its experience with production usage.


👤 nathants
build and scale systems with artificial load on aws! scaling the load testing will be just as interesting as scaling the system under test.

start with low bottlenecks, ie a cluster of c6i.large ec2 spot. how fast can you do this? have fast can you scale that? ec2 and s3 is all you need to build anything.

use ec2 spot, avoid network egress, avoid cross region/zone traffic, create and destroy ec2 instances as needed instead of letting them sit idle. you could grow system scaling intution for the price of your streaming subscriptions.

start with something like this:

https://github.com/nathants/libaws/tree/master/examples/comp...

maybe mess around with public datasets on aws, just make sure to be in the correct region to avoid data egress.

welcome systems, friend. stay a while and contemplate. one accurate measurement is worth a thousand expert opinions. scaling is fun!


👤 tixocloud
Without experience in the field, the other alternative are some educational resources to help you understand the typical discussions: https://blog.pragmaticengineer.com/preparing-for-the-systems...

You could also look at projects where the scaling factor is something else other than users. For example, documents, files, databases, etc. The basic principles should remain the same.


👤 localy
This video does a really great breakdown of what you can expect in a real system design interview: https://www.youtube.com/watch?v=IpMFCHOxK6A

Besides that, I've watched a few other channels mostly on YouTube. If time allows, reading DDIA was also super helpful for me.


👤 raydiatian
OP, this is the website you’re looking for:

https://scaleyourapp.com/

Does in depth discussion of techniques. Additionally, check out Exponent.io (mock interviews on YouTube) as well as Oreilly books online.


👤 ilaksh
You might try integrating a commerical load testing solution into your side project development. Or try to build your own.

Maybe with a good container orchestration system or just the right curl commands you can approach the task of generating a load to verify scaling.


👤 evolvingstuff
I have found the books System Design Interview (volumes 1 and 2), to be really nice and informative reading material on this topic.