How to find great practice systems design questions
hackpack.io
hackpack.io
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.
It's ok to ask basic details about previous projects but then change the requirements and ask the candidate to update the design on the spot multiple times.
If you're someone who likes browsing a lot of the engineering blog posts that come across HN, reddit, etc, there is a treasure trove of questions to be had.
Just look up a large company tech blog and read through one of their articles. Whether it's well written (you get to learn a lot from the trenches) or not (you have to think about the gaps that aren't explained) you win.
One thing I like to do is take a post-mortem or breakdown of a service (say messaging at slack, which has quite a few blogposts about it), read until they say "since we did not have X as a constraint", then mentally rewrite the rest of the article with that constraint put in.
One can usually find tons of these implicitly, or some explicitly stated.
Depending on the technology, you can also search specific forums to see other problems that things run into at scale. Which leads me to another fun source of system design problems:
* Find people talking about pushing the bounds of configuration values in production.
There are a _ton_ of config values in many pieces of software. Go check the software forums to see why the heck someone would be setting the value so high/low/strangely. An example of this are the elasticsearch or kafka forums. Find someone storing lots of very small things in elasticsearch and hitting scaling issues, or someone trying to maximize storing some very large things, and how they work around it.
1. https://notes.thundergolfer.com/system-design/case-studies
Perhaps I just don't know system design though.
BETA - be gentle!