I work as a software engineer. However, I've never worked with databases or web technologies or distributed systems. Dont know if I should be ashamed of myself. Normally, I dont give a f.ck about that because I'm still a software developer. However, in every interview, I get system design questions and fail badly in those. My only option without changing a job is read through all of system design solutions on the web (grok, hiredintech, interviewbit etc). I did all of them but I still suck at system design. I think that I lack some foundation to grasp the catch of system design. What can you suggest for a person like me? Are there anyone in the same boat? Is there any material that can take me from zero to hero?
Do a mock interview. The interviewer will identify gaps for you and you can improve on them.
TBH there’re only 2 solutions to this (been in the same boat previously): 1) Do a side project with *all* the stuff you’d need to talk about in a system design interview. Spin up a real-time streaming app on AWS with that does something simple but uses Kafka/Spark/Cassandra etc etc. 2) Work at a company that operates at scale. Even if you’re doing front end stuff, it’s hard to escape systems at scale at companies like these. I was at Microsoft briefly and had 0 exposure to distributed systems. The harsh reality is that you’ll be dinged severely for this experience gap the more senior you get. It’s good you realize the skills gap early. Reading blogs and watching tech talks is good - but that’s all still an outsider’s perspective
Thank you for this very insightful advice, appreciate it. Doing a project is fine but arent these services (aws/gcp) handling all those complexities (consistent hashing as such) within themselves? Hands on experience is definitely good but I fear to miss what is under the hood. Working at a company that deals with such systems is maybe the best choice. But, without a reasonable performance on system design interviews, this is out of reach for me at this point.
You’re right you won’t get to implement consistent hashing with a side project, but a majority of engineers at such companies don’t get to implement it either. For eg- as an app developer at Facebook, you’d use Casandra but won’t necessarily care about the consistent hashing code, besides configuring the client to handle your use case and traffic properly. Knowing what consistent hashing is is enough for all system design interviews. Besides that I’d also read Designing data intensive applications (o’reilly) - probably the best book to get a good intro to most system design interview concepts.
How is it possible to work as a dev and not deal with databases and distributed systems? What software are you writing?
Haha another bro who thinks software is just web services that they are familiar with. Ever heard of embedded systems? Operating systems? Electronic design automation? Graphics pipelines? Applications that run on your PCs? Low level Networking stack? Software running on your home appliances? Digital signal processing?
Uber bro seems new to software development
It’s great that you've identified the gap. It's even better that you have the drive to want to fill that gap. For me side projects are where I'm best able to fill in my gaps. When you do something from absolutely scratch you really internalize all the small details and the consequences of your design decisions. Try to come up with simple achievable side projects, design them, deliver them, then show off your design/delivery to a trusted more senior engineer. Then iterate. Your definition of simple will grow. Feedback on your designs will help you figure out better questions to ask and answer about future designs. As a personal example. I designed a "simple" multiplayer matchmaking service. Sure I delivered it but in hindsight my initial design really sucked I didn't even need an external review to figure that out. I learned a lot just by playing around.
Learning by doing- wont it take many months (or maybe a year) before we will be able to crack system design interviews?
I get it. Bro, just interviewed couple companies recently and I got only one offer from a company that has lower bar, all others failed badly in system design/bq section. Algorithms is not a major issue for me now, but as an experienced developer, you can’t expect you are only asked about algorithms. I think the most stupid way to master it is to read through all those materials, make note of them and recite them. You may not understand it at the beginning but once you remember every note you made, gradually you get what it means and you can start practice by doing the mocking interview, you could find some one good at SD to do the mocking with you, or just apply many companies and practices at actual interview. I know there are many people good at SD doesn’t have to do such practice, work experience is enough for them, but if you don’t have that talent, tons of effort is the only way to get rid of this block
You may be interested in this - https://www.reddit.com/r/Systems_Design/
Join this telegram group. Lots of resources to study and you can also request for mock interviews. https://t.me/system_design_interviews
I get what you are saying. I work with web & cloud technologies & databases, but the systems owned by my team just don't get the kind of load that would give first hand exp in building/ maintaing@ massive scale. Unfortunately there's no magic potion to get better at this kind of system design. Re-read those solutions, read Kleppman's book, read notable papers on Distributed systems, follow tech blogs of major tech companies etc. Just keep honing your skills at design.
Very good advice. I'm already trying to read and understand blog posts on system design. You might know the feeling of reading something that is totally stranger to you. Before finishing the article, I get lost in Wikipedia pages looking up unknown technologies mentioned in the article. This calls for a huge foundational gap in my skills. Is there any specialization or program kind of thing that you know of? Like Coursera specialization. First take this course, then continue with this.
Yes! Thank you so much! I have the same issue at work. Nice to hear someone else deals with the same thing.