<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Edu</title>
    <description>The latest articles on DEV Community by Edu (@ecaselles).</description>
    <link>https://dev.to/ecaselles</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F541468%2Fc4c2d469-58df-4f3f-8813-627cb8d4152d.png</url>
      <title>DEV Community: Edu</title>
      <link>https://dev.to/ecaselles</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ecaselles"/>
    <language>en</language>
    <item>
      <title>How to write the perfect Android Developer resume</title>
      <dc:creator>Edu</dc:creator>
      <pubDate>Sat, 28 Oct 2023 15:01:21 +0000</pubDate>
      <link>https://dev.to/ecaselles/how-to-write-the-perfect-android-engineer-resume-and-stand-out-with-ten-simple-tricks-385n</link>
      <guid>https://dev.to/ecaselles/how-to-write-the-perfect-android-engineer-resume-and-stand-out-with-ten-simple-tricks-385n</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Nail your next interview with the &lt;strong&gt;&lt;a href="https://themobileinterview.com/"&gt;The Mobile Interview&lt;/a&gt;&lt;/strong&gt;. The missing guide to prepare the technical interview for iOS and Android developers.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I have been the hiring manager and interviewer for small start-ups and Big Tech companies in the USA and Europe. I have interviewed hundreds of Android and iOS developers, Tech Leads and Engineering Managers. Whenever I have to fill a new role, I get to review more than 50 candidate resumes. In big companies, this number grows exponentially. &lt;/p&gt;

&lt;p&gt;I have seen many candidates make the common mistake of thinking the interview process starts with the first call. In reality, it starts earlier, when your resume lands in the inbox of a recruiter. &lt;/p&gt;

&lt;p&gt;Your resume (or LinkedIn profile) is the key to opening the door to that dream job. It won't land you the job, but it is undoubtedly decisive in whether you get offered a chance. So, trust me, it's worth investing time in refining your resume to stand out from the rest of hundreds (thousands in BigTech) candidates.&lt;/p&gt;

&lt;p&gt;Let's boost your resume with &lt;strong&gt;ten simple tricks&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Focus on technical skills and experience.
&lt;/h3&gt;

&lt;p&gt;Most recruiters and hiring managers do not read your resume. They SCAN it. They are looking for specific technologies, skills and levels of experience to identify which candidates are worth considering for a role quickly. &lt;/p&gt;

&lt;p&gt;Make sure your resume highlights your experience and skills with concrete and specific examples. So, a reader can easily pick them up by scanning through it.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Don't describe the role. Highlight your direct contributions instead.
&lt;/h3&gt;

&lt;p&gt;Most companies, and therefore people hiring for them, are already familiar with the roles (e.g. iOS Developer, Senior Android Engineer, Tech Lead, etc.). Please save your readers time describing the role for them.&lt;/p&gt;

&lt;p&gt;Instead, highlight in a few bullet points (or sentences) what you achieved and learned during that time.&lt;/p&gt;

&lt;p&gt;From&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Senior Android Engineer @ Acme LLC (Sep 2020 to Present)&lt;/p&gt;

&lt;p&gt;I was a senior Android engineer in the payments team. I worked on the company's Android app, developing new features following scrum and agile methodologies. I worked closely with other engineers, designers and product managers to define and implement new requirements. I proactively contributed to tech improvements in the codebase and documentation. Fixed several bugs to keep the app stable and helped improve technical documentation&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Senior Android Engineer @ Acme LLC (Sep 2020 to Present)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developed business-critical features in the payments team, like the redesign of the paywall, which I led&lt;/li&gt;
&lt;li&gt;Increased the robustness of our networking layer by refactoring it to use Retrofit with Coroutines&lt;/li&gt;
&lt;li&gt;Documented the MVVM architecture followed with guidelines and examples&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  3. Back it up with data.
&lt;/h3&gt;

&lt;p&gt;Help the reader understand the actual impact and value your direct contributions brought to the app, the team and the business by using quantitative data points. Doing something great is fantastic but meaningless if you don't help the reader understand why. Please explain what you achieved and why it was important for you, the team and the business.&lt;/p&gt;

&lt;p&gt;From&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Senior Android Engineer @ Acme LLC (Sep 2020 to Present)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developed business-critical features in the payments team, like the redesign of the paywall, which I led&lt;/li&gt;
&lt;li&gt;Increased the robustness of our networking layer by refactoring it to use Retrofit with Coroutines&lt;/li&gt;
&lt;li&gt;Documented the MVVM architecture followed with guidelines and examples&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;To&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Senior Android Engineer @ Acme LLC (Sep 2020 to Present)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Led business-critical features for the app's payments team (XM MAU, &amp;gt;$Yk monthly)&lt;/li&gt;
&lt;li&gt;Delivered a redesigned paywall to reduce friction. Increased paid subscription conversions by 30% (+$Zk monthly)
&lt;/li&gt;
&lt;li&gt;Reduced app crashes by 20% by simplifying the networking layer with Retrofit and Coroutines&lt;/li&gt;
&lt;li&gt;Documented the app architecture (MVVM), creating more than 10 high-quality guidelines and several code examples and templates&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  4. Keep it brief and to the point.
&lt;/h3&gt;

&lt;p&gt;A well-known rule is to &lt;strong&gt;limit your resume to one page&lt;/strong&gt;. I'm not joking. I know hiring managers first-hand who do not read past the first page.&lt;/p&gt;

&lt;p&gt;For more senior folks with 15+ years of experience, cover your last 2-3 positions or the last 8-10 years, focusing on your roles and experience most relevant to the job. If you're applying for a Director of Engineering role, don’t list your summer internship 20 years ago (despite how much fun it was and all the fantastic things you learned, I get it 😛)&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Real estate is expensive; use it wisely.
&lt;/h3&gt;

&lt;p&gt;Now that we have established the one-page rule. If you are having issues adjusting the length to the above rule, here are a few tips and common mistakes to avoid: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For each role, mention your &lt;strong&gt;top achievements.&lt;/strong&gt; List only the most relevant achievements you had in each role (3-4 bullet points per role).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reduce details for older roles and education.&lt;/strong&gt; This is particularly true with seniority. When you're a recent graduate or have less experience, it's okay to have details on your degrees and school projects. It becomes less relevant as you accumulate hands-on, on-the-job experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Push down and prune the rest&lt;/strong&gt;. Side Projects, Certifications, Open Source Contributions, Interests and Hobbies are relevant as long as you can highlight clearly why. Keep them to the most relevant and tailored to the job spec. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. Tailor it to the role and company.
&lt;/h3&gt;

&lt;p&gt;The perfect resume should tell a story that matches the specific job spec and the hiring company's values. It usually works best to create a template and produce different versions for each role and company you apply to. That way, you can ensure it highlights the key technologies, practices and experiences they seek.&lt;/p&gt;

&lt;p&gt;For example, &lt;strong&gt;don't list all the technologies, tools, and languages you have ever used&lt;/strong&gt;. Instead, only mention relevant technologies you are confident with (whiteboard-coding-interview confident) that you could go deep into if requested in the interview.&lt;/p&gt;

&lt;p&gt;From&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Experienced with the following technologies, programming languages and tools: Kotlin, Java, C#, Rust, Jira, GitHub, CircleCI, Android Studio, Ruby, Rails, Fastlane, Gradle, Amazon AWS, Firebase, Retrofit, Coroutines, MVP, MVVM, JSON, Visual Studio, SQLite, Trello, Sketch, Adobe Photoshop, Sublime, Git, Jetpack, XML&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Experience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Languages&lt;/strong&gt;: Kotlin, Java, C#&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Technologies&lt;/strong&gt;: Retrofit, Combine, Firebase, AWS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Other&lt;/strong&gt;: Modular Architectures, E2E Testing, RESTful API Design, Relational DBs &lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you are applying to an Android developer role:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Everyone expects you to have experience with Android Studio.&lt;/li&gt;
&lt;li&gt;You did C# in school but have yet to use it since? Toyed with Rust on your side project? Unless listed as a job requirement, do not mention them.&lt;/li&gt;
&lt;li&gt;Remove all star dare tools and skills that anyone can pick up (e.g. GitHub, Jira, Sketch, CircleCI, JSON, etc)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even better, inline the technologies with the projects. It helps understand recency and better show expertise with real examples.&lt;/p&gt;

&lt;p&gt;Oh! Talking about expertise. Please &lt;strong&gt;do not rate yourself&lt;/strong&gt;. I've seen many candidates adding a section with scores, rating themselves stars in each technology. Let me tell you a secret: &lt;strong&gt;interviewers don't care how good you think you are&lt;/strong&gt;. Their job is to assess that by themselves. &lt;/p&gt;

&lt;p&gt;Self-rating your skills is likely to harm you more than help you.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you rate yourself as an expert or 5/5 stars on a technology. Many managers will doubtfully read this. If you've spent enough time in the industry, it is hard to know everything&lt;/li&gt;
&lt;li&gt;If you rate yourself in technologies as proficient or 3-4 stars, it is probably a good sign that you should not be mentioning this technology at all. Plus, if this technology happens to be essential to the job, the recruiter may see it as a gap and disqualify you.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7. Format for readability.
&lt;/h3&gt;

&lt;p&gt;Optimise for a format that lets the reader find out the information they are looking for quickly. For example, the latest role, years of experience, career progression, etc. &lt;/p&gt;

&lt;p&gt;Small tricks like keeping all job titles, dates, and company info aligned can make a huge difference. I encourage you to check &lt;a href="https://blog.pragmaticengineer.com/the-pragmatic-engineers-resume-template/"&gt;The Pragmatic Engineer's template&lt;/a&gt; as a fantastic example of a clean, clear and easy-to-read resume (&amp;gt;6,500 downloads).&lt;/p&gt;

&lt;h3&gt;
  
  
  8. Quality Matters. Avoid typos and other clumsy mistakes.
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Don't do them, period&lt;/strong&gt;. Use a spell-checker like &lt;a href="https://grammarly.com"&gt;Grammarly&lt;/a&gt; and ensure you are not giving the impression of being careless by easy-to-make clumsy typos. Oh! And double check all links work and take the reader where you want them.&lt;/p&gt;

&lt;h3&gt;
  
  
  9. Ask for a second opinion
&lt;/h3&gt;

&lt;p&gt;Ask a friend with a relevant background to review your resume and give you honest, constructive feedback. Take it on board!&lt;/p&gt;

&lt;h3&gt;
  
  
  10. Iterate
&lt;/h3&gt;

&lt;p&gt;If you are not receiving callbacks to the jobs you are applying for, the resume is not doing its job. Review it and iterate over it, trying different ideas to see what improves conversion as you would do with any other app or product.&lt;/p&gt;

&lt;p&gt;Happy job hunting!&lt;/p&gt;

</description>
      <category>android</category>
      <category>interview</category>
      <category>resume</category>
      <category>mobile</category>
    </item>
    <item>
      <title>I'd like to help prepare your Android or iOS interview</title>
      <dc:creator>Edu</dc:creator>
      <pubDate>Tue, 30 Mar 2021 16:46:05 +0000</pubDate>
      <link>https://dev.to/ecaselles/i-d-like-to-help-prepare-your-android-or-ios-interview-2aab</link>
      <guid>https://dev.to/ecaselles/i-d-like-to-help-prepare-your-android-or-ios-interview-2aab</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Do you want to learn &lt;strong&gt;how to approach the mobile system design interview&lt;/strong&gt;? Please read my previous post: &lt;a href="https://themobileinterview.com/cracking-the-mobile-system-design-interview/"&gt;"Cracking the Mobile System Design Interview"&lt;/a&gt; (also available here at &lt;a href="https://dev.to/ecaselles/cracking-the-mobile-system-design-interview-ios-android-4kfi"&gt;dev.to&lt;/a&gt;).&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I am starting a new publication with the sole purpose to help fellow Android and iOS engineers prepare for their next technical interview. This is a very personal post about my background and the journey that led me to start writing about technical interview processes for Android and iOS developers. Hope you like it! ♥️&lt;/p&gt;

&lt;h1&gt;
  
  
  Who am I?
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;I sometimes wish I had a romantic background.&lt;/strong&gt; I would love to tell you that I started coding in &lt;a href="https://en.wikipedia.org/wiki/BASIC"&gt;BASIC&lt;/a&gt; when I was ten on my dad's &lt;a href="https://en.wikipedia.org/wiki/Intel_80386"&gt;i386 computer&lt;/a&gt;. That I was selling my games to high-school mates by the age of fourteen, or that I had created a killer website before starting University.&lt;/p&gt;

&lt;p&gt;Truthfully, my background is quite far from the classic hacker story. I was raised in a pretty average household in the 1980s. &lt;strong&gt;I was never a geek nor particularly passionate about computers&lt;/strong&gt;. My parents were quite conservative regarding screens: TV, video games, or computers. They tried to limit the time I spent in front of them and encouraged me to play football (soccer) outside, read a book or build stuff (I loved to make things: race tracks for my remote control car, villages of mini houses with streets and lights, etc.).&lt;/p&gt;

&lt;p&gt;When the time came to start University, &lt;strong&gt;I wasn't even sure about studying Computer Science&lt;/strong&gt;. It was a last-minute decision. I was pretty good at maths and loved science. So I hesitated between majoring in more traditional sciences like Maths and Physics or taking a more applied option like Industrial Engineering (really hot at the time). Computer Science came into the picture by accident.&lt;/p&gt;

&lt;p&gt;That summer, a friend of mine got a book to learn to code, and we followed it together. Programming allowed me to understand the challenges behind complex problems, yet offering the skills to build things on my own. It was a great mix of theory and creativity.&lt;/p&gt;

&lt;p&gt;University started, and yet again, I would love to say that I was a natural at it, but I wasn't. I had to study hard to pass my tests. With time and practice, &lt;strong&gt;I became a good student and a fast learner.&lt;/strong&gt; I developed the ability to identify the most relevant topics and skills to learn. I became good at studying!&lt;/p&gt;

&lt;p&gt;That is the most crucial skill which has allowed me to have a pretty good and comfortable career in the Tech Industry. &lt;strong&gt;I have been a Software Engineer for almost 15 years.&lt;/strong&gt; I started doing web development with &lt;a href="https://en.wikipedia.org/wiki/JQuery"&gt;jQuery&lt;/a&gt;. Then I had the opportunity to go into lower-level challenges, programming a real-time communication middleware for embedded systems in &lt;a href="https://en.wikipedia.org/wiki/ANSI_C"&gt;ANSI C&lt;/a&gt;. Around ten years ago, I discovered mobile development, and I became instantly in love with its technical challenges and broad reach. In my career, I have worked on small projects in start-ups where I was the sole mobile engineer and in big tech companies with multiple teams and 50+ developers, supporting millions of users worldwide. &lt;/p&gt;

&lt;p&gt;On many occasions over the years, I felt overwhelmed. I believed I was not good enough, and I did not belong to this industry. My mind travelled back several times to that summer when I learned to program with my friend and wondered if I had just made the wrong choice. But many years later, &lt;strong&gt;I am still enjoying building software!&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Why am I writing &lt;a href="https://themobileinterview.com/"&gt;The Mobile Interview&lt;/a&gt;?
&lt;/h1&gt;

&lt;p&gt;Last year, after more than seven years without interviewing as a candidate, I was once again back in the arena. As you can imagine, after so long, my interviewing skills felt a bit rusty, and I had to prepare consciously. I had to refresh my coding and technical design skills for mobile applications development.&lt;/p&gt;

&lt;p&gt;I was astonished about how many materials there are nowadays to help candidates prepare for technical interviews, from coding platforms to online courses and youtube video series, together with the more classic books. There are lots of complete guides and helpful resources for anyone preparing for a technical interview.&lt;/p&gt;

&lt;p&gt;But there was something odd: all the resources I found concentrated on full-stack or backend profiles. &lt;strong&gt;When I searched for mobile-oriented content, there seemed to be a huge hole.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Frustrated with not finding enough insightful content focused on preparing for Android and iOS interviews, a quick thought ran through my brain like lightning: I certainly couldn't be the only one feeling disappointed and a bit cast aside by the broader community.&lt;/p&gt;

&lt;p&gt;So I decided to do something about it and &lt;strong&gt;that's how &lt;a href="https://themobileinterview.com/"&gt;TheMobileInterview.com&lt;/a&gt; was born&lt;/strong&gt;. Since I couldn't find the materials to help me prepare for my interviews, I decided to create my own and share them with you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My goal is to help anyone get their next iOS or Android Engineering role&lt;/strong&gt;, from anyone trying to land their first mobile development job to more seasoned developers looking to advance their careers. With the help of a few friends and my own experience, I will be compiling a complete archive of resources, helpful tips, and insightful learnings entirely focused on the technical interview process for mobile.&lt;/p&gt;

&lt;h1&gt;
  
  
  Who is &lt;a href="https://themobileinterview.com/"&gt;The Mobile Interview&lt;/a&gt; for?
&lt;/h1&gt;

&lt;p&gt;This publication is for &lt;strong&gt;anyone preparing an interview process&lt;/strong&gt; for mobile application development roles, independently of their years of experience.&lt;/p&gt;

&lt;p&gt;Any iOS and Android engineers who are already working but would like to sharpen their skills, refresh and learn new concepts regarding mobile apps architecture, performance, etc.&lt;/p&gt;

&lt;p&gt;**I will also help managers and interviewers **participating in hiring processes for Android and iOS developers. I will be sharing my learnings and insights on how to put together a fair, accurate and inclusive hiring process to find the best talent.&lt;/p&gt;

&lt;p&gt;And in particular, to anyone who ever left an interview thinking they could have done a better job if they had prepared. To anyone who has ever believed they were not smart enough, and to anyone who has ever felt they did not belong to this industry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You are good enough.&lt;/strong&gt; You are smart and can harness the skills required to excel at this job. You can be yourself and still belong to this industry. You can have a very successful career in tech. And with a bit of guidance and focused effort, you can ace your next interview!&lt;/p&gt;

</description>
      <category>career</category>
      <category>ios</category>
      <category>android</category>
      <category>interview</category>
    </item>
    <item>
      <title>Cracking the Mobile System Design Interview (iOS &amp; Android)</title>
      <dc:creator>Edu</dc:creator>
      <pubDate>Thu, 21 Jan 2021 17:10:48 +0000</pubDate>
      <link>https://dev.to/ecaselles/cracking-the-mobile-system-design-interview-ios-android-4kfi</link>
      <guid>https://dev.to/ecaselles/cracking-the-mobile-system-design-interview-ios-android-4kfi</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Nail your next mobile system design interview with the &lt;strong&gt;&lt;a href="https://themobileinterview.com/cracking-the-mobile-system-design-interview/"&gt;latest version of this guide&lt;/a&gt;&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A long-time favourite of FAANG companies, system design interviews have grown in popularity since they were initially introduced a few decades back. They are a standard part of any interview process for most backend roles. And now, they have eventually reached us, mobile engineers, who were more accustomed to demonstrating our technical design skills and architectural knowledge through take-home assignments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The system design interview focuses primarily on those two topics: design and architecture&lt;/strong&gt;. As a candidate, you will likely be tasked with the technical design of a mobile application or a feature. Something brief and vague, in the lines of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Design a photo-sharing app (i.e. Instagram)&lt;/li&gt;
&lt;li&gt;  Design a messenger app (i.e. WhatsApp or Messenger)&lt;/li&gt;
&lt;li&gt;  Design a newsfeed feature (like in Twitter)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The aim is to let you demonstrate how you tackle the process of &lt;strong&gt;transforming an abstract set of requirements into a precise and meticulous solution&lt;/strong&gt;. It also allows your interviewer to picture the breadth of your knowledge through the different decisions you make along the way. While certainly not perfect, they have one significant benefit over take-home challenges: a considerable reduction of the time required by both candidate and interviewer.&lt;/p&gt;

&lt;p&gt;In the current competitive market to hire great talent, big tech companies and small startups are regularly looking at new ways to streamline their hiring process. As part of that effort, more and more companies are adopting this type of interview, replacing take-home challenges for Android and iOS developer roles. In fact, I did it myself when growing my last team. We reduced our time-to-hire from 3+ weeks on average to just about one week. The change worked fantastically for both candidates and interviewers, but that's probably a story for another post.&lt;/p&gt;

&lt;p&gt;System design interviews may seem a bit scary, particularly when you have never done them before or don't have much experience designing large applications serving millions of users and with dozens of engineers working on them. There is also an &lt;em&gt;aura of mystery&lt;/em&gt; around how these interviews are set for mobile. If you have searched around, you have probably realised that there is plenty of materials, courses and fantastic books explaining how backend system design interviews work and with help to prepare for them, but not so much for mobile. We are &lt;em&gt;rookies&lt;/em&gt; in the matter, and that's why I decided to share my experience tackling these interviews both as a candidate and interviewer.&lt;/p&gt;

&lt;p&gt;You will shortly discover there is no reason to be afraid. Getting yourself comfortable preparing and passing this type of interviews (as you currently do with take-home challenges) is relatively easy with a bit of guidance and practice. And perhaps you may end up even enjoying them.&lt;/p&gt;

&lt;h2&gt;
  
  
  The interview’s anatomy
&lt;/h2&gt;

&lt;p&gt;Most system design interview last around 45 minutes (sometimes they might be extended up to 1 hour) and they all follow a very similar structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  6 - 8 min: Introductions and a brief &lt;em&gt;prologue&lt;/em&gt; by your interviewer&lt;/li&gt;
&lt;li&gt;  4 - 5 min: Problem statement&lt;/li&gt;
&lt;li&gt;  25 - 30 min: Design and discuss your solution&lt;/li&gt;
&lt;li&gt;  5 min: Your time to ask questions to the interviewer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A rather typical mistake I have seen many candidates do, and I have done myself as well, is to assume you have 45 min to solve the problem since that's what the interview lasts. In reality, as you can see from the schedule above, &lt;strong&gt;you will have around 30 minutes to design your solution&lt;/strong&gt;. Therefore, keeping track of time is essential. You want to distribute those 30 minutes in the best possible way, allowing you to cover as much as you can. And even during those 30 minutes, there will be interruptions. So better to come with a clear plan and enough practice to make sure you nail it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Tip&lt;/strong&gt;: When you practice, do it with a timer and force yourself to hard-stop at 30 minutes. Then, review the topics you covered and list the ones you would have added if you had a bit more time. Go over both lists and ask yourself: have I covered the most relevant topics for this problem? Is there any topic in the second list that I feel I should have covered? If so, how would you add it to your narrative if you did the same problem again? Doing this will help you create a consistent approach and slowly develop a sense, &lt;em&gt;a feeling&lt;/em&gt;, for which topics/areas are more relevant to explore for each kind of problem and to what extent.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Your interviewer’s perspective
&lt;/h2&gt;

&lt;p&gt;Before describing the approach to grokking these interviews, we need to understand the point of view of the person (or people) on the other side of the table. What are they looking for?&lt;/p&gt;

&lt;p&gt;Interviews with an open-ended question are &lt;strong&gt;intended to find the boundaries of your knowledge&lt;/strong&gt;. Letting you choose the topics you want to cover and see how you prioritise them when developing your solution. They are designed this way to allow your interviewer to evaluate the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Your ability to &lt;strong&gt;navigate an ambiguous problem&lt;/strong&gt; by asking the right questions, shaping it into a concrete set of requirements&lt;/li&gt;
&lt;li&gt;  Your &lt;strong&gt;thinking process:&lt;/strong&gt; How you break a large problem into smaller parts while keeping the whole picture connected and meeting all requirements&lt;/li&gt;
&lt;li&gt;  How you &lt;strong&gt;make decisions&lt;/strong&gt;, evaluating different alternatives and the trade-offs&lt;/li&gt;
&lt;li&gt;  Your &lt;strong&gt;knowledge&lt;/strong&gt;, which parts of Android or iOS development you're more familiar with, which ones you are less. Can you also propose a solution for the server?&lt;/li&gt;
&lt;li&gt;  And last but not least, your &lt;strong&gt;communication and collaboration skills.&lt;/strong&gt; How you synthesise your solution and get buy-in&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is no right or wrong answer —just different alternatives. And your interviewer knows this. So please &lt;strong&gt;don't focus on finding the perfect solution&lt;/strong&gt;. Instead, focus on designing a solution as you would typically do in your day-to-day job, applying the knowledge you possess to emphasise your strengths. A piece of advice someone gave me once and I always find helpful is to focus on the bits you know. If the interviewer truly cares about helping you succeed, they would be more interested in understanding what you know instead of what you don't. Plus, you usually score extra points for proposing a solution fast and then improving it gradually. In most cases, the initial question will not be the whole exercise, and your interviewer will expect to cover a few follow-ups. That's why following an iterative approach, starting with a high-level "simpler" solution and evolving it as new requirements are added, works relatively well.&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;freedom&lt;/em&gt; to pick the areas you want to focus on your exercise is a double-edged sword. It gives you the liberty to drive the conversation and explore the parts you are more comfortable with, but at the same time, the interviewer may assume that anything you don't cover is because you don't know it. Remember that most interviewers (more so in big companies) tend to fall on the conservative side when writing their evaluation. Hence why the trickiest bit is to strike the right balance between briefly covering all topics relevant to the question asked while digging into the more relevant ones for the problem.&lt;/p&gt;

&lt;p&gt;Finding this balance is hard to master, mainly because what you and your interviewer deem relevant may not be the same. Luckily, most interviewers will give you a hand here. They may hint you when you are missing something they consider necessary or even ask you directly to cover a specific part they are interested in exploring. Therefore, the best you can do is &lt;strong&gt;listen to your interviewer and use her hints to guide your solution&lt;/strong&gt;. And if in doubt, do not be afraid of asking her as many questions as you need.&lt;/p&gt;

&lt;h2&gt;
  
  
  The approach
&lt;/h2&gt;

&lt;p&gt;Below I describe a strategy to tackle mobile system design interviews. I have developed it over the years from doing these interviews myself and seeing many successful candidates excel. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Tip&lt;/strong&gt;: Don't just take this as a &lt;em&gt;one-size-fits-all&lt;/em&gt; strategy. I would encourage you to spend the time to understand it, learn each step's importance and goal, and then &lt;strong&gt;make it yours&lt;/strong&gt;. Bend it to what feels more natural to you, at the end of the day, there aren't two equal candidates, and you are the one who will know better what works best for you. You have the skills, and you have the experience, trust yourself. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It consists of a sequence of six straightforward steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Understand the problem&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Define the scope&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identify technical requirements&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Propose a high-level design&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deep-dive into one component&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wrap up&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let’s run through the six steps into more detail.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Understand the problem
&lt;/h3&gt;

&lt;p&gt;The first step should be no surprise. Before creating a solution, we need to understand the question.&lt;/p&gt;

&lt;p&gt;It's probably the most obvious step and yet is the one where most candidates fail, myself included —multiple times. Why? Because we &lt;strong&gt;jump to conclusions too quickly&lt;/strong&gt;. But let's not be too hard on ourselves. There is a good reason for so many of us falling into the trap. It's a well-known bias, which the interview environment accentuates (the pressure to prove yourself).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"The jumping conclusion bias, also referred to as the inference-observation confusion, is a psychological term referring to making decisions without having enough information to be sure that one is right, this can give rise to poor or rash decisions that often cause more harm to something than good."&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Source: &lt;a href="https://en.wikipedia.org/wiki/Jumping_to_conclusions"&gt;Wikipedia&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So, now that you know it, just don't jump to conclusions. Slow down your wish to start designing your solution and avoid being that candidate who jumps into the solution without fully understanding the problem. Instead, concentrate on knowing what the interviewer wants you to focus on, the most relevant challenges of this type of apps, and what similar situations have you solved previously.&lt;/p&gt;

&lt;p&gt;There is a reason why the interviewer gave you a vague, open-ended problem, and this step is precisely it. Remember, she is evaluating your ability to analyse an incomplete question, identify the dark areas, and ask the right questions.&lt;/p&gt;

&lt;p&gt;Therefore, in this step, you want to ask clarifying questions to understand the problem better. Think of the information you have been given and then ask relevant questions to complete the picture.&lt;/p&gt;

&lt;p&gt;These are a few questions that I found useful to ask at this stage, depending on the problem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  What are we being asked to design?&lt;/li&gt;
&lt;li&gt;  Who is the user, and how will they use our system?&lt;/li&gt;
&lt;li&gt;  What's the initial number of users? And the expected growth?&lt;/li&gt;
&lt;li&gt;  Are we being given an initial design/wireframes, or should we produce them as well?&lt;/li&gt;
&lt;li&gt;  Are we designing an MVP or final-product?&lt;/li&gt;
&lt;li&gt;  Are we building this from scratch, or can we leverage any existing components? Any existing patterns/architecture we should follow?&lt;/li&gt;
&lt;li&gt;  How big is the team who will implement and maintain our system?&lt;/li&gt;
&lt;li&gt;  Are we expected to design just the mobile application or other parts of the overall system too (e.g. API)?&lt;/li&gt;
&lt;li&gt;  Is it iOS or Android only, or cross-platform? Shall we support smartphones, tablets, both?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don't need to ask all of them. Depending on the problem, and the information you have been provided, some of these questions might be redundant. Just prioritise the most relevant ones for the task.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Define the scope
&lt;/h3&gt;

&lt;p&gt;The second step is to figure out and agree on the functional requirements for the app or feature you will be designing.&lt;/p&gt;

&lt;p&gt;Think of similar famous apps or systems you have used in the past and how they solve a similar problem. What features they offer and what's their primary functionality. You can suggest many potential features you can think of and seek agreement with your interviewer on which features you will focus on in this particular design session. It should be quite a collaborative part of the interview.&lt;/p&gt;

&lt;p&gt;Once the scope is clear and agreed with your interviewer, you are ready to move to the next step and slowly unfold your solution.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Identify technical requirements
&lt;/h3&gt;

&lt;p&gt;This is when the real fun begins! Once the functional requirements are clarified, you should switch hats and start thinking on the technical considerations necessary to build a solution capable of providing the desired user experience you and your interviewer just agreed.&lt;/p&gt;

&lt;p&gt;Let's jump straight into what are usually the most common aspects to consider when designing a mobile app:&lt;/p&gt;

&lt;h4&gt;
  
  
  Networking
&lt;/h4&gt;

&lt;p&gt;Most apps nowadays either share or retrieve their state from a backend. Spend a bit of time thinking about how this backend might look like. For most cases, a REST API will do. Is this API provided? If so, how does it look?&lt;/p&gt;

&lt;p&gt;May any features require low latency to simulate &lt;em&gt;live&lt;/em&gt; updates? If so, how will you push this information to the client? You may need to use a more sophisticated approach than plain HTTP requests. You could use push notifications, WebSockets, polling, etc. Each option has trade-offs for you to consider.&lt;/p&gt;

&lt;h4&gt;
  
  
  Security
&lt;/h4&gt;

&lt;p&gt;If above we said most apps require to communicate with other systems. Then it's obvious we will need to secure those communications. Think of the following topics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Authentication:&lt;/strong&gt; How will your solution verify who is the user of your app (authentication) and how will it guarantee the correct level of access is provided (authorisation) &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Storing sensitive data:&lt;/strong&gt; Will you need to save the user's credentials? Yes! Unless you want to offer quite a poor experience where the users will have to sign-in every time. Which credentials (e.g. access tokens, refresh tokens)? Do we have to handle Personally Identifiable Information (PII)? How will you store them securely? (e.g. &lt;a href="https://developer.apple.com/documentation/security/keychain_services"&gt;Keychain&lt;/a&gt;, &lt;a href="https://developers.google.com/identity/smartlock-passwords/android"&gt;Smart Lock&lt;/a&gt;) &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Secure communications:&lt;/strong&gt; How will you ensure your communications with the backend are secure? E.g. All requests follow the HTTPS protocol and are encrypted with TLS, certificate pinning, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Availability
&lt;/h4&gt;

&lt;p&gt;Does the app have to support &lt;strong&gt;offline mode&lt;/strong&gt;? Most likely it will, as you don't want to start your app from an empty state each time the user opens it. You could use a local store to cache data (e.g. Core Data, Realm, SQLite, shared preferences, etc.), consider which one and why.&lt;/p&gt;

&lt;p&gt;And what happens with &lt;strong&gt;images (or other media)&lt;/strong&gt;? If needed, you can cache them locally, once retrieved from the network. That's a great option, but it certainly comes with a few challenges: handling multiple requests at once, cancelling expired requests, clean-up policy (e.g. LRU), limiting concurrent requests, etc.&lt;/p&gt;

&lt;h4&gt;
  
  
  Scalability
&lt;/h4&gt;

&lt;p&gt;In mobile, the scalability challenges are typically a bit different from the rest of the systems. While in backend interviews, you have to design your system to support millions of QPS and partition your Terabytes of data in multiple shards. In mobile apps, scalability is usually linked to growing the codebase and team working on the app. Therefore, think of how you could prepare your design to support new features, owned by multiple teams (dozens of devs working on the same app).&lt;/p&gt;

&lt;p&gt;You could:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Break the UI&lt;/strong&gt; into smaller independent components. Each of them with their stack so different people can work on them efficiently.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Standardise your UI&lt;/strong&gt; by building a reusable UI components library. It reduces code and ensures a consistent UX across the app.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Modularise the app&lt;/strong&gt;: Split the features in individual modules (which each team can own), and extract reusable components into shared and core modules.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Performance
&lt;/h4&gt;

&lt;p&gt;In the nowadays mobile eco-system, more and more apps differentiate themselves by offering a slick and smooth user experience. To achieve it, you have to face the challenge of hiding the need to retrieve data from the network.&lt;/p&gt;

&lt;p&gt;Some topics related to performance you may want to explore are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Are there any UI intensive operations (e.g. infinite list scrolling, heavy animations or complex transitions)? How would you support this? For example, you could pre-fetch data and create a buffer.&lt;/li&gt;
&lt;li&gt;  Does the app load heavier data like images, videos, audio? If so, we should think on how to do it asynchronously, so we keep our UI slick, while still offering the best possible user experience. For example, by having a separate service to handle the retrieval of the media data asynchronously, notifying the UI when ready. What might be the bottlenecks and challenges of your approach?&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Testing
&lt;/h4&gt;

&lt;p&gt;You could briefly mention how you plan to ensure the quality of your app. Nowadays, the default should be to create a reliable suite of tests, but how you do this will most likely depend on the requirements (e.g. are you building an MVP?). You may want to think and describe what your testing strategy will be.&lt;/p&gt;

&lt;p&gt;You may want to discuss the following briefly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Explain your testing strategy: How will you apply the different types of tests (unit tests, integration tests and UI/Functional tests to cover end-to-end the main app flows)&lt;/li&gt;
&lt;li&gt;  Highlight the strengths of your architecture explaining how easy it is to test each particular component&lt;/li&gt;
&lt;li&gt;  The use of dependency injection to make writing tests easier&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Monitoring
&lt;/h4&gt;

&lt;p&gt;You won't usually spend too long on this point unless the interviewer asks you to. It's important to consider how you plan to ensure the system’s correctness and facilitate a fast response when things go downhill. The two most important pillars are usually:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Crash reporting and logging&lt;/li&gt;
&lt;li&gt;  Analytics&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Deployment
&lt;/h4&gt;

&lt;p&gt;How do you foresee your system going live to production? It may depend on the requirements from the interviewer. The most common topics to mention are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  CI/CD pipeline with automated releases (e.g. with Fastlane _lanes _to send builds to production, QA and beta)&lt;/li&gt;
&lt;li&gt;  Leveraging remote feature flags enables rolling out changes gradually and decouple the release from the review process (e.g. ensuring the new feature is ready for a marketing campaign).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And that's all for this step!&lt;/p&gt;

&lt;p&gt;Pheww... That's a lot to cover and time is tight! But don't worry, the goal is for you to mention enough in most of them (one or two sentences), so the interviewer knows you have considered it. Without getting into detail unless it's critical for the problem, or the interviewer asks you so (remember, listen to your interviewer hints and follow the breadcrumbs).&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Propose a high-level design
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Wireframe the main flow &lt;em&gt;(if not provided)&lt;/em&gt;
&lt;/h4&gt;

&lt;p&gt;If you have not been given wireframes, the first step is to draw them before you go deeper in developing your solution. This step is vital. It will allow you and your interviewer to agree on the main screens, UI components, user interactions and navigation flow, which will later inform your technical decisions. You want to ensure you get your interviewer's buy-in for how you see the app functioning to meet all the given requirements.&lt;/p&gt;

&lt;p&gt;It should be pretty straightforward if you follow just three simple steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Draw the main screens&lt;/strong&gt; as boxes, describing the main content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Go over the flow&lt;/strong&gt;, adding arrows to represent the user journey&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add more details&lt;/strong&gt; to discuss each screen's composition: identify main UI elements, split UI components (e.g. cards/cells in a CollectionView / TableView). Think about possible reusable elements&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Tip&lt;/strong&gt;: Do not spend too long on drawing a high-fidelity wireframe. Think what matters the most: describe the user experience, focusing on the different views and their main components and how the user flow will look like.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Draw the principal systems &lt;em&gt;(if required)&lt;/em&gt;
&lt;/h4&gt;

&lt;p&gt;At this point, you should check with your interviewer if she is expecting you to cover the end-to-end design or to focus only on the client-side. Most mobile system design interviews will focus just on the app, but depending on the level, the type of engineer they are looking for and the size of the team, they may want you to at least demonstrate you have a basic understanding of what's going on outside of the app.&lt;/p&gt;

&lt;p&gt;Suppose your interviewer asks you to explore the end-to-end design. A few common elements your design will most likely need to rely on are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Mobile Clients&lt;/li&gt;
&lt;li&gt;  An API Service (the layer the clients will communicate to)&lt;/li&gt;
&lt;li&gt;  Backend App (the app which will do most of the heavy-lifting on the backend side)&lt;/li&gt;
&lt;li&gt;  Data Store (to store info in the cloud)&lt;/li&gt;
&lt;li&gt;  A Notification Service (if notifications are required)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Define basic data entities
&lt;/h4&gt;

&lt;p&gt;At this point, you should have a good idea of the flow you are designing and the functionality your app will support. It should be pretty easy to describe the most important data entities applicable to your problem.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Tip&lt;/strong&gt;: Do not go into too much detail at first. You are not designing a database schema. You just want to list the entities (e.g. users, posts, comments), mentioning their most relevant attributes and relationships. If your interviewer asks for more detail, you can always go deeper.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Describe the primary endpoint(s) &lt;em&gt;(if required)&lt;/em&gt;
&lt;/h4&gt;

&lt;p&gt;Depending on whether your interviewer said the API was given to you or not when you asked her earlier, you may need to design the endpoints or not.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Tip&lt;/strong&gt;: Follow an iterative approach and do not produce a complete spec for each endpoint. List the endpoints with their HTTP method (&lt;code&gt;GET&lt;/code&gt;, &lt;code&gt;POST&lt;/code&gt;, &lt;code&gt;PUT&lt;/code&gt;, &lt;code&gt;DELETE&lt;/code&gt;) and path (e.g. &lt;code&gt;GET /post/:id/comments&lt;/code&gt;), the input parameters the endpoint requires, and the output you expect. For the output, noting the main entities will most likely be enough (no need to write the complete JSON payload). As always, please confirm this with the interviewer.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Propose the client architecture
&lt;/h4&gt;

&lt;p&gt;Back to the app, it's time to discuss and decide which architecture and common software patterns your design will follow.&lt;/p&gt;

&lt;p&gt;Recall the standard architectures you are familiar with (e.g. MVC, MVP, MVVM+C, VIPER, RIBs, etc.), as well as the most typical patterns to abstract and encapsulate logic at the different layers of your system (e.g. Repositories, Use Cases, Services, etc.). Consider their strengths and weaknesses when applied to the problem at hand. Which ones will fit better the requirements you have? Why?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Tip&lt;/strong&gt;: You will make the rest of the exercise easier by picking a &lt;strong&gt;clean architecture&lt;/strong&gt;. These architectures make it easier to break your design into small, individual components, which improves your solution's scalability, flexibility, and testability. Remember that your interviewer may start with a relatively simple problem and then ask you to evolve it to handle more complex scenarios. The more flexible your architecture is to cope with new challenges, the easier adapting your system will be when faced with them.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Unfortunately, I can't tell you the best architecture to pick. That not only depends on the problem but also your experience. Choosing a new trendy architecture may be a mistake if you don’t know it well enough. Instead, I would encourage you to rely on the one you are more familiar with. It's essential you fully understand the architecture and each component, as you may need to describe it in detail during the interview.&lt;/p&gt;

&lt;p&gt;In my case, I tend to default to using a relatively simple and &lt;em&gt;trend-agnostic&lt;/em&gt; clean architecture composed of the following pieces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Presentation Layer (UI)&lt;/strong&gt;: MVVM + Coordinator, to handle views &amp;amp; controller or activities &amp;amp; fragments and navigation logic.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Domain Layer (Business logic)&lt;/strong&gt;: Use cases, to combine data from the user and repositories.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Data layer:&lt;/strong&gt; 

&lt;ul&gt;
&lt;li&gt;  Repositories, to retrieve data from the network or the local store&lt;/li&gt;
&lt;li&gt;  Network Data: Individual endpoints on top of the typical API Client&lt;/li&gt;
&lt;li&gt;  Persisted Data: Local store (if caching)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Helper services&lt;/strong&gt;: to extract functionality that might be shared by different features, for example:

&lt;ul&gt;
&lt;li&gt;  Networking Service&lt;/li&gt;
&lt;li&gt;  Session Service (to hold a user session's info)&lt;/li&gt;
&lt;li&gt;  Credentials Store (to handle reading and writing of user credentials)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While using standard components, I find it helpful to keep the architecture &lt;em&gt;trend-agnostic&lt;/em&gt;. I prefer to be pragmatic and add the pieces I require for the problem, instead of a more opinionated option (e.g. VIPER). It's obviously a matter of preference, and you and your interviewer may differ in opinions. Therefore my suggestion is to negotiate this with her during the exercise, explaining your decisions' trade-offs.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Deep-dive in one component
&lt;/h3&gt;

&lt;p&gt;It's time to examine in more detail one of your components. While being able to solve the problem at a high-level is a great deal. Your interviewer will most likely expect you also to describe the ins and outs of one or more of the design components. &lt;/p&gt;

&lt;p&gt;Here I share the approach I follow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Choose the most interesting screen and draw its&lt;/strong&gt; &lt;strong&gt;architecture&lt;/strong&gt;: Cover all layers from the different UI components, VMs, Repos, Endpoints/Sockets, Network Layer, Local Store, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trace the dependencies&lt;/strong&gt; (draw arrows from the caller)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Walk over the flow&lt;/strong&gt; from the user's point of view: What is the user experience? What does the user see at every step? Describe the possible view states: Loading, Error, No Data, Data)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explain the Data flow&lt;/strong&gt;: Data transformations that happen along the way Network Model → Business Model → View State Model. Draw arrows to show data flow (different to the dependency arrows, e.g. use dotted arrows, another colour)&lt;/li&gt;
&lt;li&gt;And once you have covered all the above, &lt;strong&gt;go in-depth into one component&lt;/strong&gt;. Think about what might be the most challenging parts, if the design may have any bottlenecks, etc. For example:

&lt;ul&gt;
&lt;li&gt;  "Real-Time" updates&lt;/li&gt;
&lt;li&gt;  Image Caching (challenges, NSOperation Queue)&lt;/li&gt;
&lt;li&gt;  Reusing Cells (preparing VMs)&lt;/li&gt;
&lt;li&gt;  Buffering data requests to improve UX&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Tip&lt;/strong&gt;: Once again, listen to your interviewer. Most interviewers will let you choose which one(s), but some may guide you towards the components she wants you to cover in more detail. Possibly, also, if you have forgotten anything.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  6. Wrap up
&lt;/h3&gt;

&lt;h4&gt;
  
  
  A quick recap of your design
&lt;/h4&gt;

&lt;p&gt;Review the initial scope and functional requirements and how your design satisfies all of them.&lt;/p&gt;

&lt;h4&gt;
  
  
  Follow-up questions/stretch goals
&lt;/h4&gt;

&lt;p&gt;At this point, your interviewer might already be asking follow-up questions. Listen to them and explain how your design could adapt to support them. Otherwise, ask her if there any other things she would like you to expand on.&lt;/p&gt;

&lt;h4&gt;
  
  
  Further refinements and considerations
&lt;/h4&gt;

&lt;p&gt;Briefly cover some refinements you would do, if you had more time: Go over the design and technical considerations described above and think if you can expand in any of those in a bit more detail. Think of the technical considerations you may have left aside previously. Now might be a good time to mention them briefly. Some ideas for topics you could cover what would your testing strategy look like? How would you use your system's correctness with crash-reporting and analytics? How would you make your app more inclusive through accessibility?&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;h3&gt;
  
  
  General advice
&lt;/h3&gt;

&lt;p&gt;We have covered a lot while describing our approach's different steps (I hope by now, it's become your approach as well). Across all of them, you have probably noticed a common set of patterns. Let's go over them quickly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Do not be afraid to ask&lt;/strong&gt;. The question will most likely be vague, and you need to gather the information required to ensure you are solving the problem your interviewer wants you to solve. There is only one way to do this: ask your interviewer.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Validate your assumptions.&lt;/strong&gt; Check with your interviewer any assumption you are making, to ensure you are going in the right path.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Know and use your tools.&lt;/strong&gt; Get genuinely good at drawing diagrams and synthesising your solution. Time is precious, and this will boost your speed articulating your solution. Whether it's on a whiteboard or using an online tool, practice structuring your thoughts in a sharp and easy to follow manner. Learn to make your diagrams easy to modify and expand.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Share your thoughts&lt;/strong&gt;. It's vital that you continuously communicate with your interviewer to make this an effective interview. Remember she wants to understand how you think.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Get buy-in for your choices&lt;/strong&gt;. For every decision you make, mention the different alternatives you consider, their strengths and weaknesses and why you pick a particular one and the trade-offs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Practice, practice, practice
&lt;/h3&gt;

&lt;p&gt;I have mentioned the importance of practising this type of interviews to increase your chances to succeed. By now, you might be wondering what the best way to do so is. Here you have a few suggestions that have worked well for me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Get familiar with different standard architectures&lt;/strong&gt;: MVC, MVVM, MVP, Redux, VIPER, etc.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Design common apps:&lt;/strong&gt; Grab your phone and think of the top apps you use and their most famous/challenging feature (e.g. Mail client, Instagram, Spotify, Twitter, Facebook, WhatsApp, Etsy) and then think how you would design it. Grab a piece of paper and start imagining how you would implement these apps. This simple exercise is what has worked best for most people I know and me. Trust me; it works!&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Read about existing solutions:&lt;/strong&gt; Check tech blog posts, recorded talks, etc., from engineers working at big companies and compare how they solve their challenges.&lt;/li&gt;
&lt;li&gt;  Review a few well-known &lt;strong&gt;open-source projects&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Ask friends and colleagues&lt;/strong&gt; to review your designs, get feedback.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Practice mock interviews&lt;/strong&gt; with colleagues or other candidates in the same boat.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Relax and enjoy the ride
&lt;/h3&gt;

&lt;p&gt;System design interviews can be difficult, and a bit overwhelming, but it's also a place to be creative and learn by imagining systems you have never worked on. Preparing any interview can be stressful, but if you learn to enjoy the preparation itself and take it as an opportunity to expand your knowledge, it can become quite an exciting experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, about that coming interview
&lt;/h2&gt;

&lt;p&gt;If you are reading this article, chances are you are preparing for an interview. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mobile system design interviews are like a puzzle&lt;/strong&gt;. One you have never built before, but you get to bring the parts to solve it. So make sure to include a broad set of parts in your toolbox and become comfortable scrutinising them and selecting the best ones for the job.&lt;/p&gt;

&lt;p&gt;In this article, I have tried to share an approach to face these interviews. But this is just my approach, the one I have compiled from doing dozens of interviews myself and interviewing hundreds of candidates. While describing it, I have purposely tried to cover as many topics as possible, so that you can then shape them to form your own strategy. &lt;strong&gt;Don't just take my approach, make it yours!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Practice before the interview to get great at it, but without memorising it. There not two equal system design interviews, as there are not two equal candidates, nor interviewers. Remember that your interviewer is there to guide you and help you succeed. Please &lt;strong&gt;pay attention to the small hints and suggestions your interviewer gives you&lt;/strong&gt; and incorporate those little nibbles of data to your solution.&lt;/p&gt;

&lt;p&gt;Thanks for reading this long. I hope you have a better understanding of what mobile system design interviews entitle: what they consist on, what your interviewer will be evaluating, plus a reliable approach to tackling them successfully. &lt;/p&gt;

&lt;p&gt;I would love to learn from your experience. If you have other tips or a different strategy, please share it in the comments.&lt;/p&gt;

&lt;p&gt;Good luck interviewing!&lt;/p&gt;




&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;p&gt;Here you have a list of suggested materials (posts, WWDC videos, courses, etc.) to dive deeper and expand your knowledge in the different topics touched in this article.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;em&gt;App Architecture - iOS Application Design Patterns in Swift&lt;/em&gt; by Chris Eidhof, Matt Gallagher, and Florian Kugler. [&lt;a href="https://www.objc.io/books/app-architecture/"&gt;Book&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;  &lt;em&gt;33 Engineering Challenges of Building Mobile Apps at Scale&lt;/em&gt; by Gergely Orosz [&lt;a href="https://blog.pragmaticengineer.com/10-engineering-challenges-due-to-the-nature-of-mobile-applications/"&gt;Post&lt;/a&gt; | &lt;a href="https://www.mobileatscale.com/"&gt;Book&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;  &lt;em&gt;System Design Interview: an Insider's Guide&lt;/em&gt; by Alex Xu [&lt;a href="https://www.amazon.com/gp/product/B08B3FWYBX/ref=dbs_a_def_rwt_hsch_vapi_tkin_p1_i0"&gt;Book&lt;/a&gt; | &lt;a href="https://courses.systeminterview.com/courses/system-design-interview-an-insider-s-guide"&gt;Course&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;  &lt;em&gt;Push technology.&lt;/em&gt; Wikipedia [&lt;a href="https://en.wikipedia.org/wiki/Push_technology"&gt;Article&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;  &lt;em&gt;Advances in Networking, Part I&lt;/em&gt;. WWDC 2019 [&lt;a href="https://developer.apple.com/videos/play/wwdc2019/712/"&gt;Video&lt;/a&gt;]&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Who am I?
&lt;/h2&gt;

&lt;p&gt;I am a Software Engineer with 15 years of experience. Around ten years ago, I switched from writing ANSI C for embedded systems to mobile development. Yeap! Those were the &lt;em&gt;good ol' days&lt;/em&gt; with iOS 3, Interface Builder, Eclipse, the iPhone 3GS, Java, and Objective-C. I have worked in small projects where I was the sole engineer, and in big apps with multiple teams and 50+ developers, supporting millions of users worldwide. I have interviewed hundreds of candidates and I have done several dozens of interviews as a candidate myself during all this time from small start-ups to Big Tech companies.&lt;/p&gt;

</description>
      <category>android</category>
      <category>ios</category>
      <category>interview</category>
      <category>career</category>
    </item>
  </channel>
</rss>
