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.
Action item: I highly recommend watching our System Design Series taking a real-world project from Taro and building it out: System Design Masterclass: Taro Playlists
It's front-end focused, but a lot of the overall concepts apply to any software project (e.g. checking for messy inputs is applicable to both back-end API development and front-end). You can use the system design doc there for your actual work as well - Just clear out my content and replace it with yours.
That being said, system design isn't something that can be really fully "learned" through studying and reading (it'll get you 25% of the way there max). The system design series I just shared will help (more than almost all online resources as it's very concrete), but at the end of the day you learn system design by, well, going out there and designing systems (i.e. building stuff). After watching the series, I recommend:
I'll question the premise a bit.
Many engineers often feel imposter syndrome when it comes to system design. In my opinion, the amount of true system design thinking needed for most jobs is pretty minimal. I'd reframe the job to be done as "how can you build intuition around which questions are important to ask?"
I also wonder if you could create some sort of measuring stick for your progress? How will you track if you're getting better at system design? With Leetcode, it's easy -- just answer more problems correctly. But with system design, I'd encourage you to do more interviews (mock or real), or work with someone, to build this skill.
Adding on to what Rahul said about concretely measuring your progress, I feel like the main metric here is quite simple: Shipping a software product that doesn't suck.
When it comes to software sucking, there's so many ways this can happen:
These are just some examples of how software can suck - System design is effectively the art of doing proactive thinking to minimize the amount of ways your software sucks (there is no piece of software that is great on 100% of axes).
If you can build software where it's hard to tell how it sucks and your software operates at scale, congratulations - You are good at system design. 🙂
For folks who want to dig deeper into what truly high quality software engineering looks like, I recommend these resources:
I also highly recommend for folks to attend our upcoming free masterclass around messy/clean code: How To Stop Writing Messy Code As A Software Engineer