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 would like to understand how can I drive an effective Tech discovery session (just had a PRD walkthrough) with the team (remotely working) before we start writing a detailed system design document. The engineers are mostly L4 and are still learning how to effectively collaborate instead of full blown meeting.
I'm pretty good at leetcode (was able to pass some 3 to 5 rounds of interviews), I got good at by practicing and continuous learning. Now I want to be good at software engineering in general like debugging, building components, understanding complex things/systems, etc. I see one of the suggestions is to improve on fundamentals of software engineering, how do I do that? and What action items can I follow consistently? Any concrete suggested steps will be great instead of just some general bullet points. Thank you all.
Say you want to research on a topic for resolving an issue and want to share with the team by creating a Google Doc. How does one master the skill of creating an high quality Doc?
My Senior team member, top performer, is super solid at creating Google Docs and churns out one great doc almost every week. He said he just focuses on just dumping out the thoughts in the first go and fixes them later on. But I feel his velocity in getting that doc out or completely the research on it is very fast. So clearly there is something that I am not understanding.
So I am looking for opinions from experts on Taro :)
As a mid-level (not senior yet) SDE, what are the core skills I should be consistently developing to grow my career, not only for promotion within the company, but also for personal growth, and to get ready for diverse opportunities years ahead?
I know we have covered lots of topics, like DS & Algo for interviews in case you suddenly get laid off and you are looking for opportunities, communicate well with colleagues to make impact, and manage up to avoid getting into PIP, System Design skills.... But is there a list of Soft AND Hard skills that are core to a engineer's career in long term?
I am a Backend Engineer at a Platform Team.
Our team currently owns 9 micro services which serve as a platform which other teams use through the company.
5/9 of these services are actively being worked on and the rest are just running without any changes/ enhancements.
I have been working for the past 8 months on one of the services but haven’t had much exposure to others.
I want to learn about the others, how the data flows between them and how the overall system design is. I am just going through tons of design RFCs and reading code but with little understanding.
My primary motivation is to
How can I better understand at the service level?
I am a senior software engineer working primarily in Python. I consider myself a pretty good coder, being able to solve problems and deliver software on time at the necessary SLA. I understand and have worked with the major Python web frameworks such as FastAPI, Flask, and Django.
But I see a lot of things lacking in myself. I am not able to handle algorithms very well, nor am I able to efficiently use design patterns.
I see that all of these skills are part of FAANG interviews and much sought after.
I also understand that there is Leetcode, HackerRank, CodeSignal and that help better ability.
What is the best way one can upskill self given the many options?
So a few days ago I was assigned to design the architecture for a small feature, which I presented to the team on a meeting. During that meeting, a colleague of mine implied that he was directly involved with crafting the design which wasn’t the case indeed. How would you guys handle this? Personally, I believe just for a single case it doesn’t make it a reason to address it, but if it gets repeated it might need some careful consideration.
I'm an E5 at a Big Tech company. There are several loud, opinionated, dominant personalities on my team. Some of them are E6. They often talk over each other as well as the rest of the team, so the rest of the team rarely contribute to discussions anymore. When a teammate (E5) presented his RFC to our team today, the dominant personalities started questioning his design decisions and talked over him when he tried to defend them. My teammate looked so discouraged and beaten down at the end of that meeting. When I brought this up to my EM in a 1:1, he said it's a people problem -- people are not being respectful. I asked my EM if he could coach those people, but he said he prefers to invest in people like me who are interested in learning & growing.
Amazon is well-known for its design doc reviews, which appear to be small-scale system design reviews. However, I'm having trouble understanding them, let alone recommending modifications.
I'm aware of Alex Xu's Byte by Byte go course, but I'm skeptical using it as it's specifically for interview preparation. I want to learn for the workplace. I can definitely look at blog posts and current design documentation, but I'd prefer something more structured. How can a novice learn system design and grow to the advanced/intermediate level? What books or resources would you suggest?
I've seen multiple E6s point out flaws in others' proposals, but don't offer any alternatives of their own. What's a good way to navigate this? This is extra tricky when we're on the same team and they're the designated code reviewer for my work.
Example: I ran into a limitation with a 3rd-party SDK. I proposed 2 options as workarounds, but an E6 rejected both options due to their limitations. When I asked him for his recommendation, he could not provide any alternatives but still insisted that I find a solution without any limitations. Thankfully an E7 on another team helped me by providing a viable workaround after 3 E6s were stumped by this problem. What should I do if I'm not lucky enough to have an E7 help me next time?
is a nice series explaining what is wanted and talks about further iteration, but how can this happen in parallel or complementary if there is an environment that is doing SCRUM by the book?
I am mostly concerned about the time for meetings, since the ideal in this project is to make the engineers who will develop somewhat part of the design process to increase agency and accountability.
An E6 and I recently joined an existing team and are working with an E6 who has all the historical context on the project's requirements/limitations in his head. The PM is brand new to the team and the company. The EM and designer are also fairly new. The newer E6 often proposes architectural directions that the more tenured E6 shoots down due to this context. Is there a good way to extract all this context from the more tenured E6? I feel like we're often throwing things on the wall and just seeing what doesn't get shot down -- things get shot down more often than not, unfortunately. The more tenured E6 said it'll take too long to document all the context.
I have realised over the years that I have gained good amount of technical knowledge but I lack great communication skills (in terms of expressing my thoughts). This was okay till I was working as software engineer as my task involved more of coding work which does not require explaining things to large audience. Now as a Senior Engineer my task revolves around making design choices, explaining pros/cons of selecting an approach etc. I realised that even though I am confident on my technical approach, I sometimes fail to express myself and the approach in the right way during the discussion which led to times when my approach is discarded and others as selected as they express themselves better. I need some suggestions on how to improve on this aspect as this will be crucial part going forward in my career.
When software design tasks are given, I spend way too much time in keep looking for other wikis or resources to get information about similar problems.
I don't know when to reach out to senior engineers to get their input because I don't want them to think that I know nothing and how I even got this job. Even after some research, sometimes I can't choose an option over others despite listing pros and cons. I keep thinking about the designs all day and night till the design is finalized. How to take a break and allocate time when solving ambiguous problems?
I'm an E5 iOS at a Big Tech company. I'm in the process of switching teams. While they're figuring out the paperwork, I've been invited to their roadmapping and architectural discussions.
The 2 E6s are dominating the discussions. The E6 iOS has been on the project since its inception a year ago and has all the context; the E6 backend has been helping out our team with the discussions and may eventually join our team. I'm the newest team member so I have the least context. The E6 backend's proposals usually sound like great ideas to me, but the E6 iOS often shoots them down and provides historical context on why those are bad ideas.
In my 1:1, my manager asked me why I'm not participating in the discussions. When I told him I don't have context, he told me to participate anyway. How do I participate effectively when I don't have context?
I am working on a side project. I may use GCP or AWS for it.
tldr of the system : Create a web ui to process input files and generate a tabular output giving the link to the dashboard .
I have a bunch of files generated , about 2GB in size in total , Account ID is the high level directory and inside each account there 50 log files each having specific content .
I want to create a UI using Angular framework . Using the UI I will upload the files to GCS /AWS S3 . Then the backend should trigger complex backend scripts, written will be written in Python or Java and then output file is generated. Using the output file a dashboard with few images embedded is generated.
In the end the UI should have a table which should indicate status of processing to COMPLETE and in another column show point to url of the dashboard.
I want to deal with least amount of security work as I want to avoid studying Oauth 2.0 authentication .
Few additional questions , non-system design questions =>
After a certain experience there's a certain expectation from Senior Software Engineers, I think because in the beginning of my career I wasn't involved in Development and hence despite being of experience 10 years I think I may not have the design skills required to work independently on a feature.
That said, I am going through LLD questions on YouTube, to understand more about designing from scratch, while I am doing I thought if there's a way to get me upto speed even more. The reason I am asking is because apart from doing Leetcode daily I would like to spend some time daily on design aspect as well.
In summary, I want to work independently, and for that am learning from the internet. I am wondering if that's it or there's something more I can do in my free time to become better developer. Any actionable items would be great.
I was watching the system design playlist and while it's good it feels like it's frontend oriented. My question here is that let's say that we get a big epic to work on, where we have to do something similar of what is already implemented in the application, but this time we have to do something else on that similar line. The main point I want to emphasize is that we normally have screenshots from the product design side and we have to come up with models and apis and everything else(considering there are more than 10 apis to build).
What is the best way to proceed in such situations?