Live data from Hacker News

Ask HN: What is best way to do hands-on practice for system design?

news.ycombinator.com

11–20 of 98 posts

Re: Ask HN: What is best way to do hands-on practice for system design?

#11
Here are some tips which most of distributed systems follow :

1. Almost all distributed systems has a global load balancer sitting in front, which will distribute your traffic to nearest possible server.

2. Decide how do you want to make your DB replication to happen. Is it active/active, active/passive, P2P, etc ?

3. What do you choose between Consistency and Availability when Network Partition happen? Some databases like Cassandra are eventual consistent.

4. Any asynchronous tasks will need to use queuing service.

5. Any performant API will need to use Caching and CDN.

Re: Ask HN: What is best way to do hands-on practice for system design?

#12
Hmm. I think you might be getting at two different questions.

One: How do you get better at systems design? Build stuff -- lots of stuff. If you're interested in designing particular kinds of systems (say, planet-scale web services...), then get a job at a company that does that kind of thing.

Two: How do you get better at systems design interviews? That's much easier; you can just throw money at the problem. Use one of those paid mock-interviewing platforms where you can hire FAANG interviewers to anonymously interview you and give you feedback.

I just went through this interview prep and got the offers I wanted, so I can offer you a data point. It took me There are some common resources recommended for this sort of thing if you want to also make sure you've read the right content. The most helpful resources for me were the DDIA book [1] and the "Systems Design Interview" YouTube channel [2]. Both are great for breadth and getting exposure to a ton of different concepts -- after that, you can follow your nose (or the book's bibliography) to get depth on whatever you're most interested in.

Good luck with it! It's a deep and really fun rabbit hole. I suggest you find a particular type of system that you're really interested in; start pulling on that thread, and you'll inevitably find your way to all kinds of other fascinating systems-design topics as you go.

[1]: https://www.amazon.com/gp/product/1449373321/

[2]: https://www.youtube.com/c/SystemDesignInterview

Re: Ask HN: What is best way to do hands-on practice for system design?

#13
Maybe on my experiens,I learn the system design by think about how to build the system or software in our life ,just like how to build a Uber or an Amazon. If you feel like it's a little hard to do, just try some simple things like a lift or a parking.

As you said ,you have a lot of small apps, mabey you could do something to link them together, and build a middle layer service for all the apps. In this progress, you should consider all the part of designing a distrubuted system, it could help you a lot, I guess.

Perhaps it's not the best way to improve the ablity for system design, it works a lot on me at least.

Re: Ask HN: What is best way to do hands-on practice for system design?

#14
Don't underestimate how much what you can learn building small apps will scale up to bigger ones.

The great thing about smaller projects is that you can take risks with them.

Build something small that uses a message queue. Then do a project that integrates with some web APIs. Then try building something that implements GraphQL. Then try integrating full text search.

When you get the chance to work on something bigger I guarantee you'll find this experience incredibly valuable. Larger systems tend to look a lot like smaller systems, but messier and more complicated because more people have been involved in helping grow them as their requirements have changed over time.

Re: Ask HN: What is best way to do hands-on practice for system design?

#16
I started a blog to explore this idea! I've built Pokemon Games to learn how to do things on a large scale. I've done Kubernetes, Redis Caching, nearly every flavor of Database (NoSQL, SQL, Graph, etc), and microservices, monoliths, you name it.

I'm going to be exploring how to go about it, how to massively over-engineer things for the sake of learning, as well as build minimalistic aspects of the games.

There will be `Main Quests` where we build a simple game, and `Side Quests` where we go off the wall and explore new tech.

I just started tonight! So it's definitely a WIP

https://mikercampbell.gitbook.io/gotta-code-them-all/

Re: Ask HN: What is best way to do hands-on practice for system design?

#18
You can pretend a small web app is a bigger one with a load testing tool like locusts[0]. If your design is good, it should be able to scale and handle more load. There are some more testing approaches listed here[1].

[0] https://locust.io/

[1] https://github.com/asatarin/testing-distributed-systems

Re: Ask HN: What is best way to do hands-on practice for system design?

#19
Practical ideas off the top off my head:

Take a fast moving input data stream, and map it to some slower moving output streams.

Use a message queue, a web tier, a worker, and implement private and public caching internally in something like Redis. Implement HTTP caching.

Implement backups, failover, and recovery. Create runbooks and checklists.

Secure everything with MFA auth for admin-type users and design and implement lesser privileged user access.

Design and implement RBAC.

Add reporting, logging, fault-tolerance.

Make it platform agnostic and support multi-tenancy, i18n, and WCAG.

Support and test for HIPAA and GDPR compliance.

Document the whole thing.

Figure out how to write automated tests for all of these aspects.

Re: Ask HN: What is best way to do hands-on practice for system design?

#20

You get hands on experience at a place 1. That has a functioning app AND 2. Business is growing rapidly bringing more customers than the system can handle. In other words you learn on the job by getting your hands burnt. I got lucky to have joined such a startup. Learnt a lot, from fixing DB queries, designing asynchronous order processor, using CDN etc. I worked on scaling up the full stack including stuff like conn…

To add something further to this excellent comment:

Join a start up with a legacy code base, e.g. dodgy old PHP that they’re pulling out into modern domain services.

Within a year you’ll be able to analyse performance and scalability issues and refactor them in your sleep.

Post reply on HN