Taro Logo
37

What are some good resources for learning Mobile System design?

Profile picture
Mid-Level Software Engineer [SDE 2] at Amazon2 years ago

I am looking for some good books or detailed courses on system design which are targeted for Mobile engineers specifically.

1.6K
4

Discussion

(4 comments)
  • 19
    Profile picture
    Tech Lead @ Robinhood, Meta, Course Hero
    2 years ago

    I actually made a 10-part course about that! You can watch it here: Frontend System Design Masterclass - Building Playlists

    I tried to make the content as broad as possible by covering:

    1. Mobile specific design concepts
    2. Common product angles to consider with system design
    3. Good system design process and hygiene in general (design doc, tech review meetings, etc)

    The content is largely derived from my experience working at Meta and Robinhood, so it should be largely applicable to your work at Amazon. Unless your team has a really well-defined doc format already, you could probably copy-paste my design doc style directly into your own projects (the link is in Part 3 and beyond as those are Taro Premium exclusive).

    That being said, my advice is to treat system design resources as inspiration, not prescription. There are many ways to build good software: Pretty much every FAANG company has its own way of doing things. I'm sure your org at Amazon has a certain engineering style, so do your best to weave into that as much as possible.

    If you're on the Android side of the fence, I highly recommend this discussion where I cover a lot of Android-specific design patterns: "How can I get really good at Android?"

    Here are some other great resources around system design:

    Zooming out a bit, the learning while building any software product will increase the more users it has. This is very true on mobile with its huge combination of device variety and OS versions, and it's especially true for Android.

    If you want to learn how to build mobile side projects that get 100,000+ users, check out my in-depth guides here:

  • 18
    Profile picture
    Tech Lead @ Robinhood, Meta, Course Hero
    2 years ago

    I also open-source almost all of the code I write, so if you want to get really hands-on, here's the links to my most recent repos:

    I follow Instagram's engineering philosophy of "Do the simple thing first", so both repos are native Kotlin/Swift using basic system design techniques like modularization and delegate pattern. I use MVC for Android and iOS is SwiftUI which is MVVM.

    If you're interested in learning more about Instagram's engineering culture, we made a video about it here: How To Properly Learn To Code As A Software Engineer - Do The Simple Thing First

    I heard Amazon relies more on a WebView-style though, and it doesn't have a ton of pure native mobile development. YMMV with these resources alongside online system design resources in general. This will happen a lot at Big Tech where the tech stack is so custom.

    If you're interested in the trade-offs between cross-platform and native, check out this discussion: Android (Kotlin) vs. React Native

  • 12
    Profile picture
    Mid-Level Software Engineer at Walmart
    a year ago

    I'd recommend this easy-to-read book to understand how to build an app at scale, written by an Uber Engineer: 'Building Mobile Apps at Scale' https://www.amazon.com/Building-Mobile-Apps-Scale-Engineering/dp/1638778868.

    Unfortunately, I couldn't find any detailed System Design course for Android, but I could share some resources that I found here and there and compiled them together:

    Here are topic specific links that I found very useful

    To ace any Mobile System Design interview, these are the topics I recommend studying and finding examples for:

    • Networking and communication protocols (REST, WebSockets, Server-Sent Events, Push Notifications, etc.)
    • Storage (Relational Database, Key-based, Shared Preferences)
    • Data Management (Offline storage, Caching, Pre-fetching data, Persistent/In-memory storage, Services/Work Manager)
    • Feature Development (Modularization, Dependency Injection, Testing, Accessibility)
    • Image caching (very important if you are interviewing at companies like Meta, TikTok and Snapchat)
    • Privacy and Security

    Try to find pros and cons for the following and come up with why would you go with the one over the other

    • MVVM vs MVC vs MVP vs MVI design pattern
    • Single Activity vs Multi-Activity architecture pattern
    • Different app modularization techniques
    • Push-based vs pull-based database synchronization
    • In-memory storage vs persistent storage
    • XML vs Compose

    App scalability topics (Important for apps with billions of users)

    • Battery consumption
    • Building for different network bandwidth
    • Accessibility
    • Localization
    • App profiling (CPU, Network and Battery profiling)

    This is my approach while tacking an Android System Design problem:

    • What are we building (Client app, ApI, BE or both (client plus BE))
    • Whom are we building this for (target users, target market, etc)
    • Functional Requirements
    • Non-functional requirements
    • Defining the basic principles on how the app would get data and the APIs
    • Defining the app architecture
    • Deep diving in any of the feature
    • Scalability

    Mindset that help me build an end to end system: Thinking as if I am using the app and coming up with different scenarios and then discussing possible solution like

    • What happens when the user goes on an airplane mode?
    • What happens when the user removes the app from the background and then starts it again?
    • What happens when the user uninstalls the app and re-installs it?
    • What happens when a call or an alarm interrupts the app?

    There is a lot that I could talk and I'd really be interested in taking a session if anybody is interested.

    Hope this helps. Thank you!

    • 0
      Profile picture
      Senior Software Engineer at Optus telecom
      a month ago

      Thanks for detailed reply. Do you have any solid recommendations/ sources for exploring Server Driven UIs when it comes for mobile development. Like what are the best practices, what edge cases to look out for. Basically as a part of iterating faster and releasing changes quickly, our mobile team is deciding that for some of the screens that need frequent app releases , moving all the logic to a BFF layer is much better. BFF layer will combine Ui layout along with data and then mobile front end will have a very generic renderer logic to render the json response ( ui layout + data) from this BFF layer. I can’t imagine but to think how will this ever beat native ui where ui layout is already rendered and doesn’t depend on the server api call for that. Plus problems of scaling this design to let’s say million active users in a week also adds some challenges. Do you have any suggestions/ guides that I could explore. Thanks for your time.