Entrevista de Desarrollador Mobile Senior
Android, iOS/SwiftUI, tradeoffs multiplataforma, performance y system design mobile — de básico a nivel senior, con diagramas y animaciones donde el código solo no alcanza para explicar.
- Arquitectura Android y Jetpack
- Básico
MVC vs MVP vs MVVM vs MVI en Android: ¿cuál y por qué?
Todo patrón de arquitectura promete código de UI testeable y desacoplado — con esta pregunta los entrevistadores comprueban si entiendes los tradeoffs detrás de las siglas, no solo las siglas.
Ver pregunta - Intermedio
¿Cómo se ve Clean Architecture en una app Android real?
Los diagramas de círculos concéntricos son fáciles de dibujar; la pregunta de entrevista es si puedes señalar los archivos, interfaces y dirección de dependencias reales que hacen que la arquitectura exista de verdad.
Ver pregunta - Intermedio
¿Cómo sobrevive el ViewModel a los cambios de configuración, y qué ocurre realmente durante la muerte del proceso?
Esta pregunta separa a quienes solo han visto sobrevivir una rotación de quienes entienden que la muerte del proceso destruye el ViewModel por completo y depende de un mecanismo totalmente distinto para recuperarse.
Ver pregunta - Básico
Jetpack Compose vs el sistema de Views: ¿qué tradeoffs debe saber articular un ingeniero senior?
Todo el mundo coincide en que Compose es el futuro — la señal en la entrevista es si sabes nombrar los tradeoffs concretos de build, interoperabilidad y rendimiento en lugar de repetir una diapositiva de marketing.
Ver pregunta - Avanzado
¿Qué dispara realmente una recomposición en Jetpack Compose, y cómo evitás las innecesarias?
La recomposición no es volver a renderizar todo el árbol — es Compose decidiendo, función por función, si tus parámetros siguen iguales, y la estabilidad es lo que chequea.
Ver pregunta - Intermedio
Explicá el state hoisting y el flujo de datos unidireccional en Compose
Compose no tiene data binding bidireccional: el estado baja como parámetros, los eventos suben como lambdas, y elevar el estado solo lo mueve a donde ambos lados se encuentran.
Ver pregunta - Intermedio
remember vs rememberSaveable vs derivedStateOf — ¿cuándo usás cada uno?
Los tres cachean un valor entre recomposiciones, pero resuelven problemas distintos — sobrevivir una rotación, sobrevivir la muerte del proceso, o evitar trabajo desperdiciado.
Ver pregunta - Intermedio
Hilt vs Koin vs DI manual en Android — ¿cómo elegís para una app real?
La inyección de dependencias va desde simples constructores hasta generación de código en compilación — Hilt, Koin y la DI manual negocian velocidad de build, seguridad en runtime y cuánta magia aceptás.
Ver pregunta - Intermedio
¿Por qué y cómo dividirías una app Android en crecimiento en múltiples módulos de Gradle?
Un módulo :app monolítico compila todo como un solo bloque y deja que cualquier pantalla toque cualquier otra — modularizar es cómo los equipos grandes de Android recuperan velocidad de build y límites claros.
Ver pregunta - Básico
Navigation Compose vs. un setup de una sola Activity con múltiples Fragments — ¿qué cambió?
Fragments, el XML del nav graph y Safe Args resolvieron durante una década lo de 'una sola Activity, muchas pantallas' — Navigation Compose reemplaza el grafo, los argumentos y hasta el ciclo de vida de Fragment por funciones y rutas tipadas.
Ver pregunta - Básico
Explicá el patrón Repository y la "única fuente de verdad" en Android
Un Repository esconde de dónde viene el dato; la única fuente de verdad decide en qué copia de ese dato puede confiar realmente la UI — juntas, son la razón por la que las apps offline-first no se caen a pedazos.
Ver pregunta - Intermedio
Coroutines + Flow vs. LiveData — ¿cuándo usás realmente cada uno en 2025?
LiveData no está muerto, pero ya no es de donde arranca el manejo de estado nuevo en Android — esta es la regla de decisión real entre trabajo greenfield en Compose y pantallas legacy basadas en Views.
Ver pregunta - Avanzado
¿Qué pasa con SavedStateHandle y el estado de tu UI durante la muerte del proceso?
La muerte del proceso borra tu ViewModel en silencio — SavedStateHandle es el puente angosto que sobrevive, y conocer sus límites separa una respuesta senior de un encogimiento de hombros.
Ver pregunta - Intermedio
¿Cómo modelás el estado de la UI con sealed classes/interfaces en vez de un montón de booleanos?
Un montón de booleanos deja que tu UI llegue a estados imposibles — las sealed classes hacen que el compilador decida cuáles pueden existir.
Ver pregunta - Avanzado
¿Qué hace que un Composable sea 'skippable' y 'stable', y por qué importa para la performance?
No toda recomposición vuelve a ejecutar tu Composable — la estabilidad y la skippability deciden si Compose reutiliza el último frame o paga por reconstruirlo.
Ver pregunta - Intermedio
¿Cómo estructurás los feature flags en una app Android grande y modularizada?
Conectar cada módulo de feature directo a Firebase Remote Config acopla toda tu app a un proveedor — un pequeño módulo de API de flags es lo que la mantiene intercambiable.
Ver pregunta - Fundamentos de iOS y SwiftUI
- Básico
UIKit vs SwiftUI — ¿en qué casos seguiría un ingeniero senior de iOS eligiendo UIKit en 2025?
SwiftUI es la opción por defecto para pantallas nuevas, pero las apps en producción todavía dependen de UIKit para listas densas, control preciso de texto e interoperabilidad con código legado.
Ver pregunta - Avanzado
¿Cómo se reevalúa el body de una View de SwiftUI, y qué implica eso para el diseño del estado?
SwiftUI no actualiza una pantalla — vuelve a hacer la misma pregunta, compara la respuesta y escribe solo la diferencia; entender ese ciclo es la diferencia entre pelear contra el framework y diseñar estado que fluye con él.
Ver pregunta - Intermedio
@State vs @Binding vs @ObservedObject vs @StateObject vs @EnvironmentObject — ¿cuál es la diferencia real?
Cinco property wrappers que dicen 'esta vista depende de un estado', pero difieren en quién es dueño del almacenamiento, cuándo se crea y hasta dónde se propaga un cambio — confundirlos es un tropiezo muy común en entrevistas de SwiftUI.
Ver pregunta - Intermedio
Fundamentos de Combine — ¿qué es un Publisher/Subscriber, y dónde sigue siendo relevante junto a async/await?
Combine modela valores que llegan a lo largo del tiempo como un pipeline componible de operadores — y aunque async/await cubre la mayoría del trabajo de una sola vez, sigue siendo la base de @Published, la validación de formularios y la combinación de varias fuentes en vivo.
Ver pregunta - Básico
¿Cómo se ve MVVM en una app real de SwiftUI?
MVVM en SwiftUI no es una ceremonia de interfaces — es un ViewModel delgado y testeable que expone estado con @Published, una View que solo lo renderiza, y un Model que no sabe nada de ninguno de los dos.
Ver pregunta - Intermedio
¿Por qué SwiftUI prefiere structs sobre classes, y cuándo sigues necesitando una class?
Las vistas de SwiftUI son value types baratas y desechables por diseño — entender por qué desbloquea cómo funcionan realmente el diffing, el estado y la identidad.
Ver pregunta - Básico
Los optionals y el unwrapping seguro en Swift — ¿qué evita realmente un ingeniero senior?
Toda entrevista senior de iOS pone a prueba los optionals — no cuáles de las cuatro herramientas de unwrapping conoces, sino cuál indica seguridad y cuál apuesta a ciegas.
Ver pregunta - Avanzado
ARC y los ciclos de retención — recorre el weak-strong dance en un closure
Los ciclos de retención son la trampa clásica de ARC en las entrevistas — el weak-strong dance separa a quien leyó sobre gestión de memoria de quien realmente la depuró.
Ver pregunta - Intermedio
GCD vs Swift Concurrency (async/await, actors) — ¿cuándo usas cuál?
GCD no desapareció y async/await no lo reemplazó por completo — un ingeniero senior sabe qué modelo de concurrencia encaja con cada cola, condición de carrera o API heredada.
Ver pregunta - Intermedio
Core Data vs SwiftData para persistencia — ¿cómo eliges en una app nueva?
Core Data tiene una década de cicatrices en producción; SwiftData tiene una fracción del código — elegir entre ambos para una app nueva es una decisión arquitectónica real.
Ver pregunta - Intermedio
¿Cómo funciona la navegación en el SwiftUI moderno (NavigationStack) frente al antiguo NavigationView?
NavigationView empujaba pantallas mediante estado oculto en cada link, lo que rompía el deep linking y la navegación programática; NavigationStack lo sustituyó por una ruta explícita y observable que tú controlas.
Ver pregunta - Intermedio
Explica el ciclo de vida de una app iOS: AppDelegate/SceneDelegate frente al protocolo App de SwiftUI
iOS pasó de un único AppDelegate dueño de toda la app, a SceneDelegates por ventana, hasta el scenePhase de tres casos de SwiftUI — cada paso cambia granularidad por simplicidad.
Ver pregunta - Avanzado
¿Qué es la programación orientada a protocolos en Swift y por qué Apple la impulsa frente a la herencia clásica?
Los protocolos más las extensiones le dan a Swift comportamiento compartido sin las clases base frágiles, la reutilización de un solo eje y la semántica de referencia forzada de la herencia — al precio de algunas trampas de despacho estático.
Ver pregunta - Avanzado
¿Qué provoca realmente que una lista de SwiftUI se redibuje más de lo esperado, y cómo se soluciona?
Claves Identifiable inestables, un ObservableObject que publica de más y trabajo inestable dentro de body amplían el alcance del redibujado de formas distintas — y cada una tiene una solución específica y diferente.
Ver pregunta - Tradeoffs Multiplataforma
- Avanzado
¿Cómo funciona en realidad la arquitectura de React Native: el bridge frente al nuevo JSI/Fabric/TurboModules?
React Native parece un solo hilo de JS hablando con vistas nativas, pero la historia real es un sistema de mensajería que cambió por completo de forma: de un bridge asíncrono en JSON a una interfaz síncrona en C++.
Ver pregunta - Avanzado
¿Cómo renderiza Flutter la UI sin un bridge, y en qué se compila realmente el árbol de widgets?
Flutter no necesita ningún bridge porque no hay nada del otro lado a lo cual hacerle de puente: dibuja cada píxel por sí mismo, a través de tres árboles que rara vez se nombran juntos.
Ver pregunta - Intermedio
¿Qué es Kotlin Multiplatform Mobile (KMM), y qué compartirías realmente entre iOS y Android con él?
KMM no es un framework de UI disfrazado: compila un solo source set de Kotlin a código nativo real en ambas plataformas, y la respuesta honesta es qué tan acotado está pensado ese límite de lo compartido.
Ver pregunta - Intermedio
Vas a empezar una app nueva: recorré el framework de decisión entre nativo, React Native, Flutter y KMM
La mejor respuesta nunca arranca con un framework favorito: arranca con los cuatro ejes que realmente deciden el tradeoff, y después recorre un caso real a través de ellos.
Ver pregunta - Intermedio
¿Cómo se comparan realmente nativo, React Native y Flutter en rendimiento real?
Los benchmarks sintéticos miden lo que no importa — el rendimiento real depende del arranque, el jank al hacer scroll y la memoria bajo carga real.
Ver pregunta - Intermedio
¿Qué estrategias de compartir código entre iOS y Android existen más allá de 'elige un framework multiplataforma'?
React Native y Flutter no son la única forma de evitar escribir todo dos veces — muchos equipos comparten un núcleo en Kotlin, Rust o C++ debajo de interfaces totalmente nativas.
Ver pregunta - Avanzado
¿Cómo escribes un bridge de módulo nativo en React Native, y cuáles son las implicaciones de rendimiento?
Los TurboModules reemplazaron las llamadas asíncronas del bridge serializadas en JSON por bindings directos vía JSI — más rápidos, pero solo si sigues respetando los límites entre hilos.
Ver pregunta - Intermedio
¿Cómo manejas las diferencias de UI/UX específicas de cada plataforma en una app multiplataforma sin que se sienta mal en ninguna de las dos?
El objetivo no es tener pantallas idénticas en iOS y Android — es respetar las convenciones de navegación e interacción propias de cada plataforma manteniendo tu marca consistente.
Ver pregunta - Performance y Memoria
- Intermedio
¿Qué causa realmente un ANR en Android, y cómo lo evitás?
Un ANR no es un crash — es el sistema agotando un plazo porque tu hilo principal dejó de responder, y arreglarlo empieza por saber cuál plazo se cumplió.
Ver pregunta - Intermedio
¿Cuáles son las fugas de memoria más comunes en apps Android, y cómo las detectás?
La mayoría de las fugas en Android son referencias fuertes comunes —un campo estático, un listener, una lambda— que sobreviven en silencio a la Activity que señalan.
Ver pregunta - Básico
Explicá tu caja de herramientas para perfilar una app Android o iOS que anda lenta
Distintos síntomas —jank, una fuga, un arranque lento— apuntan a herramientas distintas, y elegir la correcta desde el inicio ahorra un día entero de adivinar.
Ver pregunta - Avanzado
Cold start vs warm start vs hot start — ¿cómo reducís de verdad el tiempo de arranque de una app?
Los tres tipos de arranque se saltan distinta cantidad de trabajo, así que antes de optimizar hay que saber cuál de los tres mediste en realidad.
Ver pregunta - Intermedio
¿Cómo gestionan librerías de carga de imágenes como Glide o Coil el caché en memoria frente al caché en disco, y cómo configurarías una para una app con un feed pesado en imágenes?
Glide y Coil combinan un LRU acotado en memoria, un caché en disco y un downsampling agresivo — si te equivocas en cualquiera de los tres, un feed de scroll infinito termina en un OutOfMemoryError.
Ver pregunta - Avanzado
¿Qué hace que un RecyclerView o un LazyColumn de Compose sean rápidos (o lentos)?
Ambos widgets prometen un scroll infinito fluido al no materializar nunca por completo un ítem fuera de pantalla — pero esa promesa se rompe en cuanto te saltas las keys estables, el diffing granular o el alcance de recomposición por ítem.
Ver pregunta - Intermedio
¿Cómo optimizas el trabajo en segundo plano para la batería — modo Doze, restricciones de WorkManager, JobScheduler?
Android limita agresivamente el trabajo en segundo plano una vez que el dispositivo está inactivo, así que la habilidad real no es pelear contra Doze — es declarar restricciones lo bastante precisas para que el sistema programe tu trabajo gratis.
Ver pregunta - Básico
¿Qué palancas tienes para reducir el tamaño de un APK/IPA?
Los binarios más pequeños se instalan de forma más confiable en redes limitadas y equipos de gama baja, y los mismos tres movimientos — reducir código, dividir por dispositivo, diferir assets — aparecen en Android y en iOS con nombres distintos.
Ver pregunta - Básico
¿Qué es el overdraw y cómo lo detectas y lo arreglas?
El mismo píxel se pinta tres, cuatro, cinco veces por frame — invisible en una captura de pantalla, brutal para la GPU de un teléfono gama media.
Ver pregunta - Intermedio
¿Cómo mantienes el trabajo pesado fuera del hilo principal en Android — y qué pasa si no lo haces?
El hilo principal tiene un solo trabajo —dibujar el siguiente frame a tiempo— y cada llamada bloqueante que le agregas es una deuda que se cobra como un frame perdido o un ANR.
Ver pregunta - Avanzado
¿Cómo perfilas memoria en iOS — qué te muestra Instruments realmente sobre un ciclo de retención?
Dos objetos que se mantienen con referencias fuertes entre sí nunca llegan a cero — Instruments convierte ese leak invisible en un grafo, no en una suposición.
Ver pregunta - Intermedio
¿Qué es el 'jank' y cómo se razona sobre un presupuesto de frame de 16ms (u 8ms)?
Un frame perdido no es un crash y no aparece en un stack trace — es un presupuesto que cumplís o incumplís de forma visible, sesenta (o noventa, o ciento veinte) veces por segundo.
Ver pregunta - Redes y Offline
- Intermedio
REST vs GraphQL para un cliente móvil: ¿qué cambia realmente para ti como ingeniero móvil?
No es un debate de sintaxis: REST y GraphQL trasladan compromisos completamente distintos al cacheo, el soporte offline y cuántas idas y vueltas necesita tu pantalla.
Ver pregunta - Avanzado
¿Qué significa realmente 'offline-first' a nivel arquitectónico?
Offline-first no es un botón de reintentar pegado sobre la capa de red — es hacer que la base de datos local sea la fuente de verdad y tratar la red como un escritor más.
Ver pregunta - Avanzado
¿Cómo resuelves conflictos de sincronización: last-write-wins vs CRDTs vs fusión manual?
Dos dispositivos editan el mismo registro sin conexión — la ingeniería interesante empieza en el momento en que ambos vuelven a estar en línea y no coinciden.
Ver pregunta - Intermedio
¿Qué estrategia de cacheo usas para las respuestas de API en móvil: cacheo HTTP, ETags, cache-aside?
La respuesta correcta combina tres cachés distintas — a nivel HTTP, peticiones condicionales y cache-aside a nivel de app — porque cada una resuelve un problema diferente.
Ver pregunta - Básico
¿Qué te permiten hacer realmente los interceptores de OkHttp, y cómo es una cadena de interceptores real?
Los interceptores son el único punto donde puedes ver y reescribir cada petición y respuesta que maneja OkHttp — headers de auth, logging, reintentos y cacheo viven todos ahí.
Ver pregunta - Intermedio
¿Cómo programas una sincronización en segundo plano confiable — WorkManager en Android vs BGTaskScheduler en iOS?
La ejecución en segundo plano en móviles es una negociación con el sistema operativo, no una garantía — así decide cada plataforma cuándo tu sincronización realmente se ejecuta.
Ver pregunta - Intermedio
Explica la entrega de notificaciones push de punta a punta — FCM/APNs, el sistema operativo y tu app
Tu servidor nunca le habla al dispositivo — le habla al relay de Google o Apple, que mantiene un socket abierto para el cual tu app ni siquiera necesita estar corriendo.
Ver pregunta - Avanzado
¿Cómo manejas redes inestables — reintentos, backoff exponencial y circuit breakers en un cliente mobile?
Un bucle de reintentos sin jitter ni un techo no se recupera de una red inestable — convierte una mala conexión en una denegación de servicio autoinfligida.
Ver pregunta - Intermedio
¿Qué estrategia de paginación usas para una lista mobile respaldada por un dataset enorme?
La paginación por offset parece la más simple en una demo y se rompe silenciosamente en cuanto los datos reales empiezan a cambiar debajo de tu scroll infinito.
Ver pregunta - Avanzado
¿Cómo funciona realmente el certificate pinning, y qué se rompe cuando lo haces mal?
El pinning cambia un tipo de riesgo — una CA fraudulenta suplantando tu API — por otro: rota el certificado del servidor sin un plan y puedes dejar inutilizada cada copia instalada de tu app.
Ver pregunta - Testing, CI/CD y Release
- Intermedio
¿Cómo pruebas unitariamente un ViewModel que depende de corrutinas y un repositorio?
Una respuesta senior de Android conecta un repositorio fake y un dispatcher de prueba controlado en vez de llamadas reales a Retrofit, y valida el StateFlow con Turbine.
Ver pregunta - Intermedio
Espresso/Compose Testing vs XCUITest: ¿cómo abordas las pruebas de UI en cada plataforma?
Android se apoya en los idling resources de Espresso y el árbol de semántica de Compose; iOS se apoya en los identificadores de accesibilidad de XCTest — ambos combaten la misma flakiness con herramientas distintas.
Ver pregunta - Básico
Mocks vs fakes vs stubs en testing móvil: ¿cuándo usas realmente cada uno?
Los stubs responden 'qué devolvió', los mocks responden 'se llamó', y los fakes son el único de los tres con estado real que funciona de verdad.
Ver pregunta - Intermedio
¿Cómo es en la práctica un pipeline de CI/CD móvil: Fastlane, GitHub Actions, Bitrise?
Un build firmado solo se lanza después del análisis estático, las pruebas unitarias, las pruebas de UI instrumentadas y un anillo beta — y hasta el lanzamiento a la tienda se hace por etapas, no con un interruptor.
Ver pregunta - Intermedio
¿Cómo funcionan juntos los feature flags y los staged rollouts para reducir el riesgo de un release?
Dos perillas independientes, no una: el staged rollout limita quién recibe código riesgoso, el feature flag limita quién ve comportamiento riesgoso.
Ver pregunta - Básico
Explicá el proceso de release en Play Store — tracks, staged rollout, App signing
Cuatro tracks, un modelo de firma dividido en dos claves, y un porcentaje de rollout que se puede frenar pero nunca deshacer en silencio.
Ver pregunta - Básico
¿Cuáles son los motivos de rechazo más comunes en App Store, y cómo se evitan?
Crashes, metadata que no coincide, atajos de IAP, wrappers de WebView delgados y labels de privacidad cubren casi todos los rechazos que da Apple.
Ver pregunta - Intermedio
¿Cómo configurás crash reporting y monitoreo para una app móvil en producción — Crashlytics, Sentry?
Errores fatales y no-fatales, stack traces symbolicados, y una tasa de crash-free conectada como el guardrail que habilita un staged rollout.
Ver pregunta - Intermedio
¿Cómo diseñas un test A/B para una función móvil, y qué trampas añaden los ciclos de release móviles?
Los tests A/B móviles parecen experimentos web hasta que la revisión de las stores, los rollouts escalonados y la fragmentación de versiones envenenan tu muestra y tus métricas.
Ver pregunta - Básico
¿Qué es el snapshot testing de UI, y dónde realmente vale la pena en mobile?
Los tests de snapshot vienen en dos sabores muy distintos, estructural y de píxeles, y los dos son fáciles de sobreusar hasta volverse un sello que nadie lee.
Ver pregunta - Intermedio
¿En qué se diferencia testear UI de Compose de testear el viejo sistema de Views con XML?
Espresso consulta una jerarquía de vistas por resource id y espera al hilo principal; Compose consulta un árbol de semántica por rol y texto, y en general se sincroniza solo.
Ver pregunta - Básico
TestFlight vs Play Console internal testing: ¿cómo corrés un programa de beta real?
Las dos stores te dan un nivel interno casi instantáneo y un nivel más amplio revisado; un programa de beta real es el pipeline de promoción entre ellos, no los nombres de los tracks.
Ver pregunta - Seguridad
- Intermedio
Android Keystore vs iOS Keychain: ¿cómo se guarda de verdad un secreto de forma segura en el dispositivo?
Guardar un secreto en el dispositivo no es una sola llamada a una API: es una decisión sobre claves respaldadas por hardware, biometría y qué pasa si el equipo está rooteado.
Ver pregunta - Avanzado
¿Cómo implementas certificate pinning y cómo gestionas la rotación de pines sin dejar la app inutilizable?
El pinning evita que un certificado técnicamente válido pero no confiable engañe a tu app, pero si la rotación sale mal, dejas inutilizable cada instalación sin actualizar.
Ver pregunta - Intermedio
¿Qué puede proteger realmente la ofuscación (R8/ProGuard) y qué no puede?
R8 renombra tus clases a a, b, c, pero no cifra tus strings, no detiene a Frida ni hace segura una API key hardcodeada.
Ver pregunta - Intermedio
Repasemos el OWASP Mobile Top 10: ¿cuáles importan más en una app de consumo típica?
La lista no está ordenada por severidad: lo senior es mapear sus diez categorías a los datos reales y al atacante real de tu propia app.
Ver pregunta - Intermedio
¿Cómo implementás autenticación biométrica (Face ID/huella) de forma correcta y segura?
Los prompts de Face ID y huella parecen un portón de sí/no, pero la implementación segura en realidad libera una clave respaldada por hardware — si te equivocás en esa distinción, la función de 'seguridad' se vuelve trivialmente evitable.
Ver pregunta - Avanzado
¿Qué puede salir mal con los deep links / el manejo de intents, y cómo los asegurás?
Un deep link es un punto de entrada que cualquier app del dispositivo puede intentar disparar — tratá los datos que trae con la misma sospecha que una entrada de red no confiable, no como algo que sólo produjo tu propia UI.
Ver pregunta - Intermedio
¿Cómo manejás el cifrado de datos en reposo y en tránsito en una app móvil?
El cifrado de disco completo y HTTPS son el piso, no el techo — la pregunta de la entrevista es en realidad sobre gestión de claves: dónde viven, quién puede desbloquearlas y qué pasa cuando un certificado rota.
Ver pregunta - Básico
¿Qué datos sensibles suelen filtrarse en logs y reportes de crash, y cómo lo evitás?
El bug que filtra una contraseña casi nunca es la pantalla de login — es la línea de log de debug, el interceptor HTTP y el breadcrumb del crash reporter que nadie se acordó de apagar antes de publicar.
Ver pregunta - Diseño de Sistemas Mobile
- Avanzado
Diseña una app de notas offline-first (piensa: un Notion/Evernote móvil)
Recorre una arquitectura donde la base de datos local es la fuente de verdad y la red es solo otro escritor más: sincroniza, no bloquees.
Ver pregunta - Avanzado
Diseña una librería de carga de imágenes desde cero (piensa: Glide/Coil/SDWebImage)
Esboza el pipeline de peticiones —caché en memoria, caché en disco, red, decodificación y cancelación consciente del ciclo de vida— que corre en producción cualquier cargador de imágenes real.
Ver pregunta - Avanzado
Diseña el cliente móvil de una app de chat — garantías de entrega, WebSockets, cola offline
Razona sobre la semántica de enviado/entregado/leído, la estrategia de reconexión y el orden de mensajes tal como lo hace un cliente móvil real de WhatsApp/Slack.
Ver pregunta - Avanzado
Diseña un sistema de deep-linking para una app grande con muchos módulos de features
Enruta una URI a la pantalla correcta a través de decenas de módulos con dueños independientes, sin un switch central que todos tengan que tocar.
Ver pregunta - Avanzado
Diseña un sistema de feature flags / configuración remota para una app móvil con millones de usuarios
Recorre el SDK del cliente, la entrega respaldada por CDN, el bucketing determinista y el camino del kill-switch que jamás puede esperar a una publicación en la tienda.
Ver pregunta - Avanzado
Diseña un motor de sincronización en segundo plano que envíe de forma confiable las escrituras locales al servidor
Un outbox offline-first, un worker en segundo plano con backoff exponencial y la escalera de resolución de conflictos, desde last-write-wins hasta CRDTs.
Ver pregunta - Avanzado
Diseña el grafo de dependencias de módulos para una app grande multi-módulo con más de 20 equipos de feature
Capas de app, core y feature, una separación API/impl que evita que las features se acoplen entre sí, y la regla de CI que mantiene honesto el grafo.
Ver pregunta - Avanzado
Diseña un cliente móvil de video streaming — estrategia de buffer, bitrate adaptativo y descargas offline
El bucle de decisión de ABR que combina throughput y ocupación de buffer, la máquina de estados del reproductor, y el camino separado que necesita un gestor de descargas para reproducción offline.
Ver pregunta - Avanzado
Diseña una función de rastreo de ubicación que respete tanto la batería como la privacidad del usuario
Un recorrido de nivel senior por estrategias de ubicación por niveles — cambios significativos, geocercas y ráfagas acotadas de alta precisión — que no agotan la batería ni provocan rechazos de privacidad en las tiendas.
Ver pregunta - Avanzado
Diseña un flujo de pagos móviles: tokenización, alcance de PCI y manejo de fallos
Un recorrido senior sobre cómo un cliente móvil puede aceptar pagos con tarjeta sin tocar jamás el número real — campos tokenizados del SDK, 3-D Secure, reintentos idempotentes y reconciliación.
Ver pregunta - Avanzado
Diseña el cliente móvil de una app colaborativa en tiempo real (como Google Docs)
Una inmersión senior en la sincronización móvil basada en CRDT — edición local-first, colas sin conexión, reconciliación por vectores de estado y por qué este problema no se parece en nada a un cliente REST normal.
Ver pregunta - Avanzado
Diseña un SDK de analítica/telemetría que las apps móviles integran
Un plano senior para un SDK de telemetría con cola durable y por lotes — API pública, modelo de hilos, lógica de reintentos y los controles de privacidad que lo mantienen fuera de problemas de consentimiento.
Ver pregunta - Comportamiento y Liderazgo
- Intermedio
¿Cómo mentorizas a ingenieros móviles junior en tu equipo?
Los buenos mentores de móvil no reparten arreglos en el code review — construyen criterio, una tarea bien acotada a la vez.
Ver pregunta - Avanzado
¿Cómo decides entre pagar deuda técnica y lanzar una funcionalidad?
Los ingenieros senior no ganan esta discusión con opiniones — la ganan poniendo precio a la deuda en la misma moneda que ya usa el negocio: velocidad, incidentes y tiempo.
Ver pregunta - Avanzado
Cuéntame de una vez que tuviste que tomar una decisión de arquitectura con información incompleta
La jugada senior no es eliminar la incertidumbre antes de decidir — es clasificar la decisión, poner límite de tiempo a la investigación y dejar una forma barata de revertirla si te equivocas.
Ver pregunta - Intermedio
¿Cómo manejas un desacuerdo con un PM sobre alcance vs calidad?
La jugada senior convierte 'calidad vs alcance' de una discusión de valores en una lista compartida de qué es negociable, qué no lo es, y qué dice la evidencia sobre el costo real de cada opción.
Ver pregunta - Avanzado
¿Cómo abordas una migración de plataforma importante, como mover una app grande a Jetpack Compose?
Una guía de nivel senior para escalonar una reescritura de plataforma de varios trimestres mientras el producto sigue lanzando funciones sin dejar de funcionar.
Ver pregunta - Intermedio
¿Cómo evalúas un SDK de terceros antes de adoptarlo en tu app?
Un marco práctico de diligencia debida para decidir si un SDK de terceros vale el tamaño, la exposición de privacidad y el riesgo de proveedor que trae consigo.
Ver pregunta - Avanzado
¿Cómo equilibras la paridad entre plataformas (consistencia de funciones iOS/Android) con la excelencia específica de cada plataforma?
Un marco para decidir cuándo iOS y Android deben comportarse de forma idéntica y cuándo conviene apoyarse en las convenciones propias de cada plataforma.
Ver pregunta - Avanzado
Describe cómo liderarías la respuesta a un incidente crítico por un crash que afecta a un gran porcentaje de usuarios en producción
Una guía de mando de incidentes para la primera hora de un pico de crashes: frenar la hemorragia, diagnosticar en paralelo y comunicar todo el tiempo.
Ver pregunta