System design is the process of determining the optimal high-level technical approach to a problem. It's a staple in both the interview process and actually doing your job as a software engineer. We have created a video series to act as a system design primer for software engineers.
I am starting to prepare for system design questions. I would like to know if anyone has thought of grouping/categories when it comes to similarity among those problems?
For example, ecommerce (amazon) and service delivery platform (doordash) based problems has common trait of search, one can easily use the same solution across both the systems (to search for the products on amazon and to search for restaurants in doordash)
Also is there any list of must know system design problems for interviews at senior/staff level?
Hello, I'm currently actively interviewing and more than once, I found myself not progressing due to some knowledge gaps on things that companies seem to expect at my level.
I worked as a backend engineer for 3 years after a coding bootcamp, mostly in product features and APIs. Distributed systems is not something I did on a daily basis.
I have struggled with system design interview questions asking about databases, concurrency, search, among other things. How can I fill those gaps to the level I can pass these interviews?
Here's what I'm going to do, and I'm looking to get advice on whether I should do, stop doing, or do something else that I didn't list.
Thank you for your help!
I have been practicing for system design interviews by reading through books like System Design Interview book by Alex Xu and Grokking the System Design Interview, however I sometimes struggle to internalize the knowledge and demonstrate it in an interview setting. I have done a few mock interviews which have been helpful, however the number of mocks I can do is somewhat constrained by other people's availability. Is there a way where I can improve at system design interviews quicker/more effectively while practicing on my own?
What differentiates a Senior vs Staff engineers in terms of :
So, my job's getting outsourced this summer, and I'm deep into figuring out my game plan for interviews. I'm mostly a frontend engineer, working with Angular, SCSS, and ngRX for our app. I've dabbled in backend too, even went full-stack in my team, but my backend skills aren't great. My manager supports me marketing myself as a full stack person, but I'm wondering if going all-in on full stack jobs is worth the effort during the interview prep, especially since I'm not a big fan of backend work.
Then I wonder if the downside of applying for frontend jobs is that there are not that many and the barrier for frontend is lower (maybe because of coding bootcamps and it can be self-learned) so competition will be higher.
Now, I'm drowning in prep work - data structures, algorithms, frontend know-how, and system design. Recently got hit with a surprise system design coding round in an interview (an internal position I arrogantly thought I had in the bag) I thought was all about frontend and DSA. Did okay, but not stellar, and now I'm feeling unprepared for every interview. I feel crippled to even apply to positions. It's a bit of a mess.
Appreciate any & all feedback!!
I have a situation, can you help me on how you'd navigate it?
I have a potential project idea that has staff level scope.
There's a pain point across our company and this project would help the entire company.
I want to lead this project because it'd be a tremendous opportunity for my growth.
Given that I'm mid-level and lack of experience leading projects, I fear ownership of the project will be given to someone else to lead if I speak on it. This project shouldn’t be done in silo, this project needs to be part of the engineering priority because it will span across multiple teams.
Can you help me navigate how to maintain ownership/lead this project?
At my startup, we use Confluence to host various documentation. I'm working on a design document draft, and I have it saved within the org's Architecture and Engineering Space (basically a folder). I have some misgivings about placing it there since I've been regularly updating it, and it notifies everyone within that group whenever I do. I'm mainly putting it there for visibility, but some of the writing is half-baked. Since it's a small company, no one really cares, but I think this might reflect poorly on me if it were a bigger company. How does Big Tech generally handle this design doc process from first to final draft? Do engineers generally just keep it within their personal Space until it's ready for review?
I have a recruiter screening with Meta next week for a full-stack software engineer role. What can I expect in the recruiter screening?
This is my first interview after a very long time, I need to brush up my skills. what is latest acceptable time frame to schedule the technical interviews without being considered late?
I have been working for small companies for the past 5 years where the focus was on shipping the product fast and not necessarily on quality. I am now interviewing at big tech companies where the focus is on code quality and code scalability. I am concerned that even if I make it through the interview phase it will be hard for me to maintain my position after having bad coding practices for many years.
I was earlier part of another team, where all the monolithic apps and microservices are restarted in Production environment every weekend as part of scheduled maintenance.
In my current team, there's no automatic restarts. There are some microservices that haven't been restarted since 2+ years. Isn't this a potential problem? Won't "not restarting services" lead to increased memory consumption at some stage? Don't microservices need frequent restarts as part of maintenance?
On asking the TL, they mentioned that the microservice shouldn't be written in a way that it causes increased memory consumption.
But that's not what we can always control right? Hence we have maintenance windows.
As I read through some of the technical design docs / OKRs on the team, I've noticed some fellow engineers put out some really thoughtful comments (especially the more senior folks), however coming up with such feedback observations is not always super intuitive. As a new-hire junior, I'm looking to build up this skill of conducting an effective design / OKR review.
What do you usually look for / pinpoint when reviewing a design doc or OKR for a new project? How can I still provide good feedback despite not having the same level of exposure / experience?
I've never worked in big tech or Tier 1 companies but I'm aiming to grow as a engineer and would like to know and learn how different companies make such decisions?
Could you please share an example case study here? What does the entire process look like? Thank you.
I have been wanting improve my technical understanding on what I am working on:
What other steps can I take to enhance my technical influence, and then reach that senior level?
What skills are essential for becoming a proficient software engineer which helps them to thrive in any tech domain and adapt to various situations?
Could you provide a list of items that one should be mindful of to excel in real-time scenarios? For instance, focusing on learning front-end and back-end development, knowing basics of web something like that.
I had bought a course from interview kickstart that expires on 20 days (post extension) and they are not able to extend it further.
I have 11 interviews left with them, which is really amazing given the talented interviewers they have.
I am applying for L6 (maybe L5) at Roblox, Google, Netflix and Uber.
Given the constraints, how do I best utilize the interviews:
I was thinking of using ChatGPT for talking my mock interviews, is that a good idea? And using 10 / 11 for systems design and 1 for behavioral.
I am hitting the point in my career where I am responsible for designing newer systems to handle more novel problems. I will use my last project as an example.
I had to redesign our game engine to handle more complex scenarios. I decided to "eat the frog" and come up with a few very complex game interactions to test if any of our designs would satisfy those test cases. After about 1 month of development, we landed on a design. This design also passed all the test cases for our old engine.
I think back and wonder if I could've done it more incrementally. We didn't really ship anything during that time, just tested out different ideas in our feature branches. There are still some outstanding questions for that project that are as low level as "should we use an abstract base class or an interface for this abstraction" to "here's an even more complex interaction we don't know how to handle, but could feasibly happen".
Now I am designing a new animation pipeline and don't want to get stuck in the same 1 month long marathon with only a design doc to show for it. As a newer senior engineer and lead, a solid design doc seems like a win, but it was a tough month.
In one way, this is different than having all the work known and chunking it out. We aren't sure what we'd come up with. Maybe that's the nature of R&D. On the other hand, work is work, and I'm sure there are methodologies for making more consistent progress even in R&D.
Interested in how other people approach this dilemma. I think the crux of the issue is I wasn't sure our design would work until we built and tested it against the test cases, and I have a nagging feeling we got a little lucky.
I am trying to start a conversation to get across my technical proficiency so that the manager is likely to recommend me for an interview at the big tech company. The company has an engineering blog that I have read, but not sure what I should ask. This is for a mid-level (ideally senior) backend role. The manager has said that if I send them a list of questions they would be open to a call to discuss said questions.
Also the company is Uber ->
We are building a separate product with in a product based company most of the features are crafted just to impress the managers.
During the demo hacks are used to adjust the situation. Though I've recently realised even the API design and system design is not scalable. They are just build so that the current UX is displayed, too much hard coupling and meaningless design.
The HTTP response is dynamic as the demos were build on web and the back -end developers are not understanding that it is difficult to handle in a strictly typed languages.
I get by saying today, I'll write clean code and do my work neatly no matter what others are doing. Though I want to know how do I communicate well with them and build solid products, so that we make something re-suable and independent and sell it not just part of the current product but in terms of public APIs like Twitter, Reddit.
Lately I feel like simply discussing in these lines creates friction, but I have to speak in gentler way to get the job done effectively :)
Can I build an android app through visual studio code or do you guys strongly recommend using android studio code instead? I was considering using VS code since that’s the platform I’m used to using and heard that it works well for android apps as well.