3 ms·
Systems design questions are tricky. There are some key principles like how you handle scaling and how you estimate resourcing. But it can really go awry. I've
by cletus 4y ago
Systems design questions are tricky. There are some key principles like how you handle scaling and how you estimate resourcing.
But it can really go awry. I've had this happen when asked to design something I have intimate knowledge of, more than my interviewer. I've had an interviewer ask what "reconiliation" meant when I brought it up in the context of a third-party payment system, for example.
Some basic advice: at least think about scaling and that really means horizontal scaling. I guess that raises the question of the difference between horizontal and vertical scaling. In case you don't know (or if anyone reading this doesn't) think of a server. Vertical scaling is buying an even beefier server. More CPUs, more storage, more RAM, that sort of thing. Horizontal servers is having more than one server and distributing the load somehow.
Horizontal scaling is what you want to concentrate on because it has a far higher upper bound on capacity than vertical scaling. So you want to think about how to distribute load. This gets into issues like sharding/partitioning, hashing, scattering, replication strategies and how to shrink or expand the pool.
I hope that helps.
- foobarbecue 4y agoDid you mean reconciliation? I'd have a really hard time explaining reconiliation...
- joshxyz 4y agoLove this. What I like about system design is being aware of things like the 12-factor app but at the same time being aware of how much you can scale vertically before you need to scale horizontally, and avoiding any form of bikeshedding, premature scaling, and premature optimization.