Mobile App Development Interview Questions for 7 Years Experience
40 questions with answers for candidates with 7 years of experience — 1 easy, 23 medium, 16 hard.
What interviewers expect: 7 years experience
With seven years, roles are typically lead or staff level. Interviews assess how you choose frameworks, set coding standards, plan release processes and measure app quality across teams. Expect discussions about build infrastructure, white-label or multi-app setups, cost of decisions and aligning mobile roadmaps with product goals. Your influence on team outcomes matters more than individual coding speed.
This set is weighted towards Testing, Performance and CI/CD (8), React Native Navigation, State and Native Modules (8), App Store and Play Store Publishing (7), Flutter State Management and Architecture (7).
Technology strategy Release and quality processes Cross-functional leadership Hiring and team growth
Solved at this levelStart practicing
3 QUESTIONS FREESign up to unlock the full question bank and track your progress.Unlock every question and answer, then continue practising company-wise and package-wise.
✓ 3 questions free • Unlock the rest in seconds
01
What are versionName, versionCode and build numbers?
On Android, versionName is the user-visible version like 2.3.1 and versionCode is an integer that must increase with every upload. On iOS, CFBundleShortVersionString is the marketing version and CFBundleVersion is the build number, which must be unique per version upload. In Flutter, the pubspec version 2.3.1+45 sets both; in Expo, version and the platform build numbers are set in app config and can auto-increment with EAS.
02
How do you reduce app size for Flutter and React Native apps?
Publish Android App Bundles so users download only their architecture and density resources. In Flutter, use --split-debug-info and --obfuscate, remove unused packages and fonts, compress images and use tree-shaken icons. In React Native, enable Hermes, R8 minification and resource shrinking, and remove heavy libraries. For both, analyse size with tools like flutter build --analyze-size or APK Analyzer and lazy-load large assets.
03
Integration tests pass locally but fail randomly in CI. How do you make them reliable?
Flaky tests usually come from timing assumptions, shared state, network dependence or slow emulators. Replace fixed delays with waiting for specific conditions, mock or stub network calls with predictable responses, reset app data between tests, and use stable selectors like keys or test IDs instead of text that changes. Give CI emulators enough resources, retry only as a temporary measure, and track flaky tests separately to fix them.
04
Users get logged out randomly. The access token refresh seems to fail sometimes. What could be wrong?
A common cause is a race condition: several requests receive 401 at once and each triggers a refresh, so later refreshes use an already rotated refresh token and fail, logging the user out. Fix it by allowing only one refresh at a time and queueing other requests until it completes, then retrying them with the new token. Also check device clock issues, token expiry settings and secure storage read failures.
05
How would you plan a staged rollout for a major redesign?
Release to internal testers and beta users first and collect feedback. Then roll out to 5 percent of production users, monitoring crash-free rate, ANRs, key conversion metrics and reviews for a few days, before moving to 20, 50 and 100 percent. Keep the redesign behind a remote flag to switch back without a release. Define rollback criteria in advance and communicate the plan to support teams.
06
What are privacy declarations required by the app stores?
The Play Store requires a data safety form describing what data is collected, shared, encrypted and deletable, plus a privacy policy link and account deletion option for apps with accounts. The iOS App Store requires privacy nutrition labels, a privacy manifest file for the app and listed third-party SDKs describing data use and required reason APIs, and App Tracking Transparency permission before tracking users across apps.
The New Architecture, enabled by default since React Native 0.76, replaces the old asynchronous bridge. JSI lets JavaScript hold references to C++ objects and call native methods synchronously. Fabric is the new renderer supporting concurrent React features and synchronous layout. TurboModules load native modules lazily with typed interfaces generated by Codegen. Bridgeless mode removes the bridge entirely. Together they improve startup, responsiveness and type safety.
08
A Bloc emits the same state twice and the UI does not update. Why?
Bloc and Cubit skip emitting a state that is equal to the current one. If you mutate a list inside the existing state and emit the same object, equality holds and nothing rebuilds. Always emit a new state with copied collections, for example state.copyWith(items: [...state.items, newItem]), and implement equality with Equatable or freezed. Avoid mutable fields in state classes.
09
What would you do if you joined a project and found the codebase poorly structured?
I would first understand why it is that way, since deadlines and changing requirements often explain it. I would document the main pain points with examples, such as frequent bugs in a module, and propose small improvements tied to upcoming features rather than a rewrite. I would add tests around risky areas first. Showing measurable wins, like fewer bugs, builds trust for larger refactors later.
10
Your app must show live delivery partner location on a map. How would you design it?
The partner app sends location updates every few seconds through a foreground service to the backend, which publishes them to a real-time channel like WebSockets or Firestore documents. The customer app subscribes only while the tracking screen is open and smoothly animates the marker between points. Throttle updates, reconnect on network changes, and fall back to polling. Stop tracking when the delivery completes to save battery.
11
How do you detect and fix memory leaks in cross-platform apps?
Leaks usually come from subscriptions, timers, controllers and listeners that are never disposed, or global caches that grow without limits. In Flutter, dispose controllers and cancel stream subscriptions in dispose, and check the DevTools memory view for growing instances. In React Native, return cleanup functions from useEffect and remove event listeners. Repeatedly open and close a screen while profiling to confirm memory returns to baseline.
12
An over-the-air update crashed the app for users on an older native build. What went wrong and how do you prevent it?
The update probably used a native module or API that the older binary did not have, so JavaScript called missing native code. Prevent this by setting runtime versions tied to native code fingerprints, so updates only reach compatible builds. Roll out updates gradually, monitor crashes per update ID, and keep a rollback by republishing the previous update. Test updates on the oldest supported build before release.
freezed generates immutable data classes with copyWith, equality, toString and union types or sealed classes, and integrates with json_serializable for fromJson and toJson. It removes boilerplate when modelling state such as loading, data and error variants. You annotate a class, run build_runner, and get generated code in a part file. With Dart 3 sealed classes and records, some teams need it less, but it is still widely used.
14
Tell me about a time you had to learn a new framework under a deadline.
Situation: my team decided to build a client app in Flutter, and I had only React Native experience. Task: deliver the login and dashboard screens in three weeks. Action: I completed the official codelabs in the first week, mapped concepts I knew like components and hooks to widgets and state, and asked for early code reviews. Result: the screens shipped on time, and I later wrote a short guide for other React Native developers moving to Flutter.
15
A user reports that they cannot find your app in the store on their old phone. Why could this happen?
The app may not be available for their device because the minimum OS version is higher than theirs, the device lacks a required hardware feature declared in the manifest, the app is not released in their country, or the device architecture is excluded. Check the device catalogue in Play Console and the deployment target on iOS. Decide whether supporting that segment is worth lowering requirements.
16
How do you decide which devices to test on for an Indian user base?
Use analytics from the existing app or market data to identify the most common manufacturers, OS versions, screen sizes and RAM levels among your users. Cover a budget device with 3 to 4 GB RAM, a mid-range phone, a recent flagship, an older OS version you still support, and at least one iPhone and tablet. Use cloud device farms for wider coverage and add devices that generate many crashes.
17
How would you set quality gates before a mobile release?
Define clear criteria: all automated tests pass, no open critical or high bugs, crash-free rate in beta above an agreed threshold like 99.5 percent, performance budgets for startup time and app size met, accessibility checks on new screens, and security review for sensitive changes. Run smoke tests on the release build on real devices. Release with a staged rollout and monitor metrics before expanding.
18
The product team wants the same app on mobile and web from one codebase. What would you propose?
With React Native, Expo with Expo Router and React Native Web lets one codebase target Android, iOS and web, with file-based routes working as URLs. With Flutter, the web target exists but suits app-like experiences more than SEO-heavy pages. I would share business logic and most screens, keep SEO landing pages on a web framework, and plan for platform-specific tweaks like hover states and keyboard navigation.
19
The cart total shows stale values on the checkout screen after items are removed on the cart screen. How do you fix it?
Each screen probably holds its own copy of cart data. Move cart state into a single shared state object, such as a Riverpod notifier or a Cubit provided above both screens, and have both screens watch it. All mutations go through that object, which emits a new immutable state. Derived values like total should be computed from the state, not stored separately, so they can never become inconsistent.
Choose a strategy based on data. Last write wins, using server timestamps, is simple but can lose edits. Field-level merging keeps non-conflicting changes. For lists, treat each item as a separate record with its own version so edits rarely clash. For collaborative content, CRDT-based approaches merge automatically. Always let the server decide final order, and show users when their change was overwritten.
22
How do you handle pressure when a production issue affects many users?
I stay calm and focus on reducing impact first: confirm the issue, communicate status to the team, and look for the fastest safe mitigation such as a remote config switch, server-side fix or pausing a rollout. Then I find the root cause, ship a proper fix and write a short postmortem. Clear, regular updates to stakeholders reduce panic and let others plan around the issue.
23
A global Redux store causes the whole app to re-render on every small change. How do you fix it?
Components are probably selecting large parts of state or creating new objects in selectors. Select only the fields each component needs with useSelector, memoise derived data with createSelector, and keep state normalised. Move server data to RTK Query or TanStack Query and local UI state back into components. Verify improvements with the React profiler, checking which components render after each action.
24
What is app signing and why must you protect the keys?
Signing proves the app comes from you and that updates are from the same developer. On Android, you sign uploads with an upload key and Play App Signing re-signs with the app signing key held by the store; a lost upload key can be reset, but losing a self-managed app key meant you could never update the app. On iOS, signing uses certificates and provisioning profiles. Store keys in a secure vault and CI secrets, never in the repository.
25
How do you write a Fabric native component or use one in React Native?
A Fabric component wraps a native view for use in JavaScript. You write a TypeScript spec using codegenNativeComponent with typed props, run Codegen to generate C++ and platform interfaces, and implement the view in Kotlin and Objective-C or Swift. With Expo, the Expo Modules API lets you define a native view in Kotlin and Swift with less boilerplate. Use this for maps, video players or custom SDK views.
Impeller is Flutter's rendering engine that replaced Skia as the default on iOS and on modern Android devices. It precompiles a smaller set of shaders at build time instead of compiling them at runtime, which removes the shader compilation jank that first-time animations used to cause. It provides more predictable frame times. Developers rarely interact with it directly, but they should test on real devices when upgrading Flutter.
27
Parsing a 10 MB JSON file freezes the Flutter UI for two seconds. How do you fix it?
JSON decoding is CPU-bound and runs on the main isolate, blocking frames. Move it to a background isolate with Isolate.run(() => parseProducts(jsonString)) or compute. Also consider whether the API can paginate or return less data, and parse lazily. Test in profile mode with DevTools performance view to confirm the frame time improvement, since debug mode exaggerates slowness.
28
How do you think about mobile system design for a chat feature?
Start with requirements: one-to-one or group, media, read receipts, offline sending. The client keeps a local database as source of truth, shows sent messages instantly with a pending status, and syncs over a WebSocket while foregrounded, using push notifications in background. Handle reconnection, ordering by server timestamps, pagination of history, and retries with idempotent message IDs. Encrypt sensitive data and limit media size before upload.
29
What is Supabase and how does it compare to Firebase?
Supabase is an open-source backend platform built on PostgreSQL, offering authentication, a relational database with auto-generated APIs, row level security, storage, edge functions and real-time subscriptions. Firebase uses NoSQL databases like Firestore. Supabase suits apps with relational data and SQL needs, and can be self-hosted, while Firebase has a richer mobile ecosystem including Crashlytics, Remote Config and FCM. Many apps combine them.
30
The app needs a bottom navigation bar where each tab keeps its own navigation history. How do you implement it?
Use go_router's StatefulShellRoute.indexedStack, which creates a separate navigator branch for each tab and keeps their stacks alive with an IndexedStack. The scaffold shows a NavigationBar and switches branches with navigationShell.goBranch(index). This preserves scroll positions and nested pages when switching tabs, and deep links can open a specific tab and page. Handle tapping the active tab to pop to its root.
31
How do you manage form state and validation across multiple steps in a Flutter onboarding flow?
Keep the onboarding data in one state object owned by a notifier or cubit scoped to the flow, with each step updating its part. Validate per step before moving forward and again on final submit. Save progress locally so users can resume if they leave. Keep validation rules in pure functions that are unit tested. Dispose the state when the flow completes so data does not leak into later sessions.
32
Your Flutter codebase mixes setState, Provider and get_it randomly across screens. How would you clean it up?
Agree on one approach with the team, for example Riverpod for app state and setState only for local widget state, and document examples. Migrate gradually, starting with the most buggy or most changed features, and write tests before moving logic. Add lint rules and pull request checklists so new code follows the standard. Avoid a big-bang rewrite that blocks feature work for weeks.
33
The Play Store flagged your app because a third-party SDK collects data not declared in the data safety form. How do you handle it?
Identify the SDK and what it collects using its documentation and the Play SDK Index. Update the data safety form to declare that data accurately, or configure the SDK to stop collecting it, or replace it if its behaviour is unacceptable. Update the privacy policy too. Then submit a new build if code changed. Keep an inventory of SDKs and their data practices to avoid future surprises.
createState creates the State. initState runs once for setup like controllers and subscriptions; do not use inherited widgets there. didChangeDependencies runs after initState and when inherited data changes. build runs on every rebuild. didUpdateWidget runs when the parent rebuilds with new configuration. dispose runs when removed permanently, where you cancel streams, dispose controllers and timers to avoid memory leaks.
35
Tell me about a time you improved app performance in a cross-platform app.
Situation: our React Native order history screen took three seconds to render and scrolled poorly. Task: make it smooth. Action: I profiled with React Native DevTools, replaced ScrollView with FlashList, memoised rows, moved date formatting into the API layer and switched images to a caching library. Result: render time dropped below 600 milliseconds, and frame drops nearly disappeared on budget phones.
36
QA reports the app becomes slower the longer it is used. How do you investigate?
This suggests a memory leak or growing work. Reproduce by repeating a flow many times while profiling memory and CPU. Look for listeners, timers or subscriptions that accumulate, caches without limits, lists that keep growing, or screens kept in the navigation stack. Fix by disposing resources, limiting cache sizes and replacing screens instead of pushing endlessly. Confirm memory returns to baseline after fixes.
37
Write a go_router configuration with an auth redirect.
Use react-native-gesture-handler, which processes gestures on the native side, often with Reanimated for smooth animations. For swipe to delete, the Swipeable or ReanimatedSwipeable component renders action buttons behind a row. Define gestures with the Gesture API, such as Gesture.Pan, and compose them when needed. Wrap the app root in GestureHandlerRootView. Provide an accessible alternative like a long-press menu for screen reader users.
39
How do animations work in React Native and why use Reanimated?
The built-in Animated API can run animations on the native thread with useNativeDriver for transform and opacity, but not for layout properties. Reanimated runs animation logic in worklets on the UI thread, so animations stay smooth even if JavaScript is busy, and supports gestures, layout animations and shared element transitions. Combined with react-native-gesture-handler, it is the standard for complex interactive animations.
40
What is a performance budget and how do you enforce it?
A performance budget sets limits on metrics like cold start time, app download size, frame rendering time and memory usage. Enforce it by measuring in CI, for example tracking release build size per pull request and running startup benchmarks on a reference device, and failing or flagging builds that exceed limits. Budgets make performance a shared responsibility rather than something fixed only after users complain.
Frequently asked questions
What is asked in Mobile App Development interviews for 7 years of experience?
With seven years, roles are typically lead or staff level. Interviews assess how you choose frameworks, set coding standards, plan release processes and measure app quality across teams. Expect discussions about build infrastructure, white-label or multi-app setups, cost of decisions and aligning mobile roadmaps with product goals. Your influence on team outcomes matters more than individual coding speed.
How many questions should I practise before a Mobile App Development interview?
Work through all 40 questions here, then the company-wise sets for the employers you are targeting. Quality matters more than count: be able to explain why each answer is right.
Which topics matter most for 7 years of experience?
Focus first on Technology strategy, Release and quality processes, Cross-functional leadership, Hiring and team growth.