Skip to main content

Pinterest

Mobile engineer at Pinterest

The typical process shape, common mobile engineer interview questions, and a market salary band for this role.

Process timeline

  1. 1

    Recruiter screen

    A conversation about your background, motivation, and logistics, plus a first check that your experience lines up with the mobile engineer opening.

  2. 2

    Technical phone

    A remote session on the core skills of the role, worked through live with an interviewer rather than answered as trivia.

  3. 3

    Onsite

    A longer block of back-to-back interviews with the team, mixing deeper skill exercises with behavioral questions about how you work.

  4. 4

    Decision

    Interviewers pool their feedback, the hiring manager makes the call, and the recruiter comes back with an outcome or next steps.

Interview questions

Common mobile engineer interview questions that come up across companies like Pinterest.

As asked

Design the data architecture for an offline-first mobile app that syncs with a server when connected. Cover conflict resolution and the user experience.

Sample answer outline

Local store (SQLite, Realm, WatermelonDB) as the source of truth for reads. Writes go to the local store first and queue for sync. Sync protocol: a sync log of operations or a CRDT, sent in batches with a server-assigned version. Conflict resolution: last-write-wins is simplest and sometimes wrong (for collaborative documents use a CRDT, for inventory use server-authoritative reconciliation). UX: show pending state on records that have not synced, give users a way to see and resolve conflicts, never silently overwrite. Discuss the cold-start sync for a new device and the partial-sync case.

Expect these follow-ups

  • What if a user deletes a record offline while another user edits it online?
  • How would you handle media (photos, video) in the same sync framework?
  • When is offline-first too expensive to bother with?
offlinesyncmobile-architecture

As asked

A React Native feed screen drops frames when scrolling because it sends frequent events between JavaScript and native code. How do you diagnose and fix it?

Sample answer outline

Start with measurement in Flipper, React DevTools, native profilers, and frame timing rather than assuming React is the bottleneck. Look for expensive renders, oversized serialized payloads crossing the bridge, synchronous native calls, image decode work, and layout thrash. Fixes include moving high-frequency work to native or JSI, reducing event payloads, memoising row components, using FlatList correctly, and pre-sizing media. A senior answer explains the old bridge versus the new architecture without pretending migration alone fixes bad rendering. Candidates often miss that JavaScript can be idle while the UI thread is blocked.

Expect these follow-ups

  • What changes under Fabric and TurboModules?
  • How do you separate JavaScript thread stalls from UI thread stalls?
  • When would you write a native module instead of staying in JavaScript?
performancenative-bridgemobile

As asked

Can you walk me through the five UIApplicationDelegate lifecycle states in iOS, what triggers each transition, and where you'd place expensive setup or teardown work in a typical production app?

Sample answer outline

A strong answer names Not Running, Inactive, Active, Background, and Suspended, explains the delegate callbacks (willFinishLaunching, didBecomeActive, willResignActive, didEnterBackground, willTerminate), and notes that background time is limited. Candidate should mention moving heavy init out of didFinishLaunching to avoid slow launch, and doing state-save in didEnterBackground before the 5-second window closes.

Expect these follow-ups

  • How does SceneDelegate change this picture on iOS 13 and later?
  • What happens if your app is suspended and a push arrives while the device has Low Power Mode on?
iosapp-lifecycleuiapplicationdelegatebackground-execution

As asked

Explain how Android's Activity back stack works, what task affinity does, and describe a real scenario where misunderstanding task affinity caused a navigation bug in an app you might build.

Sample answer outline

A strong answer covers the task and back stack model, explains how launch modes (standard, singleTop, singleTask, singleInstance) interact with the back stack, and describes taskAffinity to group activities across packages. The scenario should mention something like a deep-link opening an activity in a new task, causing the back button to exit instead of returning to the parent screen.

Expect these follow-ups

  • How does Fragment back stack differ from Activity back stack?
  • With Jetpack Navigation, how do you replicate singleTop behavior?
androidactivityback-stacknavigationjetpack-navigation

As asked

How does Automatic Reference Counting work in Swift, and what are the three most common patterns that produce retain cycles in iOS apps? How do you detect and fix them?

Sample answer outline

Candidate should explain that ARC deallocates objects when retainCount hits zero, then name delegate cycles (strong delegate property), closure captures of self, and parent-child object graphs. Detection via Xcode Memory Graph Debugger and Instruments Leaks template. Fix with weak/unowned references in closures and delegate declarations, with a note on when unowned is safe versus when it causes a crash.

Expect these follow-ups

  • When would you choose unowned over weak, and what crash does a wrong choice cause?
  • How do Combine subscribers interact with ARC?
swiftarcmemory-managementretain-cycleinstruments

As asked

Describe how structured concurrency works in Kotlin coroutines. What guarantees does it provide, and how does a CoroutineScope tied to an Android ViewModel prevent memory leaks that you would have seen with raw threads or AsyncTask?

Sample answer outline

Strong answer explains that a parent coroutine's scope outlives all children, cancellation propagates down, and exceptions propagate up through SupervisorJob versus Job. For ViewModel: viewModelScope is cancelled in onCleared(), so in-flight network calls are cancelled when the user leaves the screen, avoiding stale callbacks writing to a dead UI.

Expect these follow-ups

  • What is the difference between launch and async in terms of exception handling?
  • How would you test a suspend function that calls a network layer?
kotlincoroutinesstructured-concurrencyviewmodelandroid

Salary band

Use the salary page linked below for mobile engineer bands by city, modeled from BLS, ONS, and Levels.fyi reference medians.

View salary detail

Similar companies