This was not the typical system design interview where you have to deal with APIs / load balancers / latency / etc
I have studied that a lot, but what about these type of general interviews?
This was not the typical system design interview where you have to deal with APIs / load balancers / latency / etc
I have studied that a lot, but what about these type of general interviews?
16 comments
From there, you should be able to start laying out the different components and how they interact.
Edit: here's some areas of consideration when designing a system:
I'm sure others will have many, many more things to addIt also gives you constraints. Which are your friend.
I can't find it now (I tried but it was a year ago) but on YT there are some excellent example system designs where someone does it and then they talk about it. What was good. Why it was senior vs junior or senior vs principal.
But to give a general advice, I’d approach it by trying to break down the domain into concepts, then think about how those concepts can be turned into abstractions. Then you can think about relationships between those abstractions and engineering solutions for those relationships.
Also, systems all take inputs and produce outputs. Validating those would be another interesting aspect given its finances related.
Source - I sucked at system designs for a good 5+ years until I had a ah-ha moment thanks to a couple of questions an Uber interviewer asked me (that interview sucked but I found my mojo after that). And back in that time I did not have the plethora of resources that are available now (not even mentioning GPT's ability to come up both problems and solution formats).
The key to these interviewers isnt just study but actually practicing mock problems. There are tons of those these days. Another way to learn is to - teach. Start writing up posts for each Design X kinda problem where you would lay it out as if you were presenting it in an interview, ie Requirements, Entities, APIs, High Level Design, Scalability Barriers, Deep Dives etc. Keep at it. A few failures isnt that bad.
Details are important.
For a very big tldr, Raghu Ramakrishnans Database book and designing data intensive applications by klepman were was amazing but they need a bit of time investment.
Raghus book especially on indexes was very useful. Not so much to understand how databases but specifically how indexes work and taking a quantitative approach to know which index works for what kind of use case. So in the Uber interview as I was rambling about key value stores and caches the interviewer decided to put me out of my misery with "enough of all that, what would the first failing request's latency be". that got me thinking about how to reason about slos and latencies in a design. And then seeing which index types gave what kind of perf characteristics and so on.
Do you happen to have any good sources or lists or anything?
https://m.youtube.com/@SDFC
https://www.youtube.com/@jordanhasnolife5163
Pricer would have some kind of human interface. Even if just CLI that called API endpoint using some kind of SSO staff authentication. Then it is just a back end.
The ZeroMQ guide really takes you through it in detail, for example check out Figure 19 here for a parallel job queue with cancellation: https://zguide.zeromq.org/docs/chapter2/#Handling-Errors-and...
* Flow control - This is the logical path the software takes from input, through computation, to output.
* Division of effort - This isn’t your division of labor but the organization of parts to account for reuse, documentation, testing and so on.
With enough practice writing and refactoring original software you just build a vision for it through repeated practice. If that isn’t you then this job may not be a good fit for you.
Or study some of Peter Norvig's code for solving poker hands, sudoku etc.?
It's not obvious how to build abstractions at the right level, or to change those abstractions as requirements change.
Imagine if you got tasked with building an airport but you’ve never built an airport. Well, you’d have to first clarify requirements: What kind of planes? What’s on these planes? What kind of cargo? How many flights per year?
As you learn more about requirements, you need to start solving them, but remember to keep it at a black box level. Let’s say your airport will be moving both cargo. How will cargo come in? How will cargo get out? We probably need a “cargo movement sub-system.” A cargo conveyor sub-system is still a black box — you don’t yet know details but you do know, at this very early point in questioning, that you need “a system that moves cargo between the loading bays and the plane.” You don’t even know if it’s going to be a conveyor system or humans manually driving cargo yet. However, you are well on your way to building an airport system.
You keep at this and keep delving down deeper until you go from design to implementation. This is the process of how you build anything in any field.
The goal is not really to get an A+++ on the final product (although that’s nice) but the goal is to communicate that you work well under non-ideal conditions and you’re not a total F*ing nightmare. So take a big breath and engage that lovely neocortex and let your intellect be driven purely by curiosity, a desire to do good, and kindness, and you will get far.
Most systems are just wrappers around a database. You can tell because if you take away the database the system does nothing useful.
Financial products are exclusively priced in databases.
I personally feel you aren’t wrong but you also aren’t aligned with what they’re looking for, like I wasn’t when I failed this interview.