2

How to get better at Android system design?

Profile picture
Senior Software Engineer at Taro Community6 months ago

I have gone through a post in Slack about paper reading and its benefits.

As an Android developer, I did not find paper reading will be useful in my day to day job. Because the system design for a frontend Android is different.

I have this doubt from long time: How can i improve my design skills in Android? I see many people in our org come up with a good doubts and points in architecture discussions, but I am not able to do that. Could you please help me with what I can do to improve these design skills? I believe I should constantly do something to master this, but I am not sure what to do.

One way is I can learn it by doing - I am learning from my current project but that is not so scalable. I want to multiply my learning curve here.

Thank you in advance.

97
4

Discussion

(4 comments)
  • 3
    Profile picture
    Tech Lead/Manager at Meta, Pinterest, Kosei
    6 months ago

    I agree most paper reading is not that useful if you're a mobile developer (or a frontend developer generally). My advice on top of Ryan's great pointers:

    • If you're at a large enough company, go through past Android projects in detail. Read the design doc and ask yourself why they chose to chose one decision or technology over another.
    • Follow well-respected Android people in the community. e.g. Jake Wharton, Chris Banes, or developer advocates from Google.
      • Look through announcements about new libraries in detail, and ask yourself what problem they were solving. How would you solve the problem without the library?
  • 1
    Profile picture
    Tech Lead @ Robinhood, Meta, Course Hero
    6 months ago

    I'm going to be 100% honest: For most engineers, paper reading isn't super useful. I think it has value with more cutting-edge and theoretical fields like AI, but for most engineering disciplines (like Android), they're fairly well-defined now so paper reading won't have great returns for learning. In those cases, it feels intellectual and productive, but isn't actually helping you learn.

    So back to the original question: How can we get better at Android system design?

    The #1 resource I recommend is this: [Course] Frontend System Design Masterclass - Building Playlists

    It's a real system design case-study, and it's anchored to mobile (though the overall principles can be applied anywhere). If you follow the example set in that course creating technical design docs for everything you work on, you will develop that system design sense lightning fast.

    After that, I recommend my Code Quality course, specifically the lessons about edge cases:

    So after you go through these resources, you will have the principles in mind. But that's not enough for something as important and complex as system design: You need to get your hands dirty. Do the following:

    • Always have a technical design doc for your projects - This is as mentioned with the course. Invite feedback on your architecture aggressively and have them tear it apart. Your goal is to get less and less torn apart over time.
    • Find patterns in your more senior teammates' design feedback - Those engineers you keep seeing leave amazing technical design feedback? Learn from them and emulate them. See what kinds of feedback they are leaving on other people's projects, not just your own. Code review is also a place where this kind of feedback can come up: One of my favorite activities as an engineer is to go through all the rejected pull requests on my team and see why. After you crunch all this data (maybe write it down), look for patterns. When it comes to Android, there are really only so many system design patterns. For example, a very common question I asked as a mobile tech lead was "Are you sure this approach works on older OS versions?".
    • Be extremely comfortable being wrong - The fastest way by far to learn what's right is to get corrected saying something wrong. This will happen when you present your own technical designs, but you can increase the surface area here by commenting on other's designs. If you have any doubt whatsoever on someone's Android strategy, just leave a comment on their design doc or speak up in their tech review meeting. From here, 1 of 2 things will happen, both of which greatly benefit you:
      • You are right - Yay!
      • You are wrong - A more senior teammate corrects you and explains the proper way to do things instead. You now have learned 1 new system design principle, and you can bring it up yourself in future meetings (saving time for your more senior teammate as they now don't need to bring it up).
  • 1
    Profile picture
    Tech Lead @ Robinhood, Meta, Course Hero
    6 months ago

    On top of all that, you can accelerate your system design skills even further by building side projects! For us Android engineers (and mobile overall), system design is generally pretty practical (e.g. "How would you build Messenger?"). You can literally do this on your own for fun.

    For the Messenger example, I actually have gotten this system design question like 3+ times across interviews, and it was always very easy as I've built a messaging UI before in a side project for fun.

    To dive deeper into side projects, I recommend this: [Taro Top 10] Building Impressive Side Projects