Contratación técnica

La mejor prueba de React Native para contratar: lo que de verdad funciona

ClarityHire Team(Editorial)6 min read

Por qué fallan los tests estándar de JavaScript para React Native

Muchas empresas contratan ingeniería React Native con evaluaciones de JavaScript o tests de frontend genéricos. Es un error. React Native comparte sintaxis con React, pero las restricciones, las trampas y los patrones de diseño son distintos.

Una candidatura que aprueba un test de coding frontend puede fracasar en React Native. No por mala, sino porque RN fuerza otros trade-offs.

Qué hace distinto contratar para RN

El problema del bridge

En React Native piensas en la frontera entre JavaScript y código nativo. La web nunca lo hace. Una RN engineer necesita entender:

  • Cómo llamar módulos nativos desde JS
  • Qué pasa al bloquear el hilo principal (la app se congela al instante)
  • Cómo funciona el layout (sin CSS, otro modelo de caja)
  • Depurar entre dos runtimes (Chrome DevTools para JS, Xcode/Android Studio para nativo)

Ese hueco entre JS y nativo es donde nacen las malas incorporaciones.

El rendimiento es más difícil

En la web puedes ser lento y vivir. RN corre en móviles con la mitad de RAM de una laptop. El rendimiento importa:

  • Renderizar 1.000 ítems con flat list es lento sin optimizar
  • El cacheo de imágenes es crítico
  • El bundle size afecta al arranque
  • La serialización del bridge es cara (demasiadas llamadas nativas = latencia)

Una web brillante que nunca ha pensado en rendimiento escribirá RN lenta.

El testing es distinto

Web: jsdom, Jest, RTL. RN: el testing específico de plataforma es más complicado. Muchas RN engineers apenas testean. Una evaluación que no mide actitud para testear pierde señal.

Estructura ideal de evaluación

Fase 1: cribado (30 minutos en vivo)

Dale una app a medio construir con un bug específico. Ejemplo:

«Esta app muestra un listado paginado de usuarias desde una API. Al hacer scroll abajo carga la siguiente página, pero la lista se entrecorta al cargar. Encuentra el cuello de botella y explica el arreglo».

Qué evalúa

  • ¿Razona sobre rendimiento de RN?
  • ¿Conoce FlatList, keyExtractor y optimizaciones?
  • ¿Entiende el bridge?
  • ¿Diagnostica sin ejecutar?

Una web puede sugerir memoización. Una RN engineer sabe que la respuesta real es optimizar FlatList.

Fase 2: take-home (90 minutos)

«Construye una app de notas. Crea, edita y elimina notas. Persistencia en el dispositivo. Requisitos:

  • AsyncStorage para persistencia
  • Estado de carga al cargar notas
  • Manejar storage lleno
  • Navegación entre lista y detalle»

Qué evalúa

  • ¿Construye una feature completa?
  • ¿Piensa en persistencia?
  • ¿Casos límite (storage lleno, datos corruptos)?
  • ¿React Navigation?
  • ¿Código organizado y testeable?

Rúbrica:

  • ¿Funciona? (50 %)
  • ¿Cumple requisitos? (30 %)
  • ¿Mantenible? (20 %)

No esperes perfección. Espera código pensado y funcionando.

Fase 3: walk-through (30 minutos)

Pregunta:

  • «Cuéntame cómo se guarda la nota. Flujo desde input hasta storage».
  • «¿Qué pasa si la usuaria cierra la app mientras se guarda?»
  • «¿Cómo lo testearías? ¿Qué testearías?»
  • «¿Qué cambiarías si tuviéramos que sincronizar a la nube?»

Esto revela:

  • ¿Entiende su código o lo copió?
  • ¿Pensó en modos de fallo?
  • ¿Razona sobre arquitectura?

El bridge a fondo

El filtro más importante. En el walk-through:

«Necesitas guardar un fichero grande en el dispositivo. Escribes un módulo nativo (Objective-C o Kotlin) eficiente. Tu JS llama a ese módulo. Cuéntame cómo lo estructuras. ¿Qué pasa si el fichero es demasiado grande? ¿Cómo manejas el progreso?»

La respuesta revela si entiende:

  • Estructura de módulos nativos
  • Límites de serialización del bridge
  • Patrones async entre dos runtimes
  • Manejo de errores cross-language

Una web no piensa en eso. Una RN engineer sí.

Disciplina de testing

«¿Cómo escribirías un test para la lógica de guardado? ¿Qué testearías? ¿Qué es difícil de testear?»

Buena respuesta: verificaría que se llama AsyncStorage, que se manejan errores, que la UI se actualiza. Lo difícil: comportamiento real del storage del dispositivo.

Respuesta débil: «Tests con Jest. Mockeo todo y compruebo llamadas».

Banderas rojas

Demasiado código nativo

Si la evaluación pide Kotlin o Swift, mides experiencia de plataforma, no RN. Una RN engineer debe usar módulos nativos, no necesariamente escribirlos.

Demasiados rasgos web

«Construye un sistema completo de auth con OAuth» no testea RN. Testea si ya hizo OAuth.

Casos límite ausentes

Sin offline, persistencia o permisos, está incompleta.

Sin restricciones de rendimiento

«Haz una app» sin pensar en rendimiento es demasiado fácil.

Comparar soluciones

Dos pueden funcionar. ¿Cómo distingues?

Candidatura A:

  • FlatList con keyExtractor
  • AsyncStorage envuelto en service layer
  • Maneja errores
  • Sin tests
  • Código defensivo y organizado

Candidatura B:

  • FlatList correcto
  • AsyncStorage con wrapper que maneja serialización JSON
  • Maneja errores y bordes
  • Tests (Jest + AsyncStorage mockeado)
  • Código limpio, pequeño, testeable

B gana. No porque la app funcione (ambas), sino porque pensó en mantenibilidad.

Background React web

Si tiene buen React pero ninguna experiencia RN, ajusta:

  • Sintaxis y component thinking se trasladan
  • Patrones de estado (Redux, Zustand) también
  • Patrones de testing en su mayoría

Pero penará con:

  • Navegación (React Router ≠ React Navigation)
  • Tuning de rendimiento
  • Integración nativa
  • Restricciones de memoria

Sé más comprensiva con la curva pero evalúa razonamiento que se trasladará.

Implementación

Si evalúas mobile a escala, RN tiene herramientas y trade-offs distintos a iOS o Android nativos. No mezcles. RN merece su pipeline.

Tres fases (cribado en vivo, take-home, walk-through) ~2,5 h candidatura y 1,5 h entrevistadora. Adecuado para mid-level.

Para sénior, añade 30 min de arquitectura: «Construyes una app que pide datos a una API, cachea local y sincroniza offline. ¿Cómo la estructuras? ¿Qué librerías?»

Errores comunes

  • No testees frameworks web (React DOM, Next.js)
  • No exijas conocer una librería específica de estado
  • No hagas la evaluación sobre CSS o estilo
  • No asumas que ha usado todas las plataformas (Android, iOS, Web)

Foco en:

  • Fundamentos React
  • Fundamentos JS
  • Patrones específicos RN (FlatList, AsyncStorage, Navigation, Bridge)
  • Restricciones de dispositivo y rendimiento

Usa este marco para interpretar resultados con justicia.

mobile-developmentreact-nativejavascriptdiseño de evaluacióncontratación

Artículos relacionados