Nu es una empresa de tecnología que ofrece servicios financieros, y mientras lo hacemos, tratamos de eliminar la mayor cantidad de complejidad para nuestros clientes. Por esta razón, desde el principio trabajamos para que nuestra tecnología sea un verdadero aliado para todos, es por eso que nuestros #CodeStars siempre están encontrando las soluciones más eficientes.
Hablando desde nuestro desarrollo para plataformas móviles el trabajo comenzó con aplicaciones nativas para nuestra tarjeta de crédito, compatibles con las plataformas Android e iOS en 2013, y rápidamente adoptamos Kotlin y Swift después de que se anunciaron disponibles, de igual forma durante un tiempo, apoyamos la plataforma Windows Phone. Siempre tratamos de ser plurales pensando en nuestros usuarios, pero el crecimiento de nuestro portafolio de servicios y la llegada de nuevos clientes conllevan nuevos retos.
A medida que Nu crecía (ahora somos la empresa de tecnología en servicios financieros más grande de Latinoamérica), el desarrollo de nuevos productos se convirtió en prioridad a nivel internacional, y los equipos encargados de nuestra tecnología tuvieron que averiguar cómo se crearían soluciones innovadoras dentro de la app.
Stephany Juárez nuestra #CodeStar y Software Engineer en Nu México nos relata acerca de los criterios y los planteamientos alrededor de la utilización de flutter como tecnología base para el desarrollo.
¿Por qué no probar React Native?
Poco antes de adoptar Flutter, se comenzó con otra plataforma híbrida. El equipo se dió cuenta de que se necesitaban cada vez más desarrolladores nativos, sin embargo, se enfrentaron a una demanda cada vez más grande y a que no había suficientes especialistas móviles disponibles, lo cual abrió las puertas a distintas oportunidades; entre ellas, hacer el equipo móvil más accesible usando el desarrollo en una tecnología multiplataforma, React Native.
Usar una plataforma híbrida en el desarrollo de la ap Nu nos permitiría agilizar la implementación, además sería más sencillo incursionar en el desarrollo móvil con desarrolladores de backend, ya que los ingenieros no tendrían que aprender dos tecnologías al mismo tiempo.
En ese momento, React Native era una alternativa establecida respaldada por algunos grandes jugadores. Además de eso, nuestra cultura de ingeniería tiene que ver con el aprendizaje y la mejora continua, siempre dejamos en claro que es responsabilidad de todos aprender y experimentar en el trabajo.
“Nuestra cultura de ingeniería en Nu tiene que ver con el aprendizaje y la mejora continua”
Sin embargo, al usar React Native en algunos productos se obtuvo una primera experiencia usando plataformas híbridas, lo cual trajo diferentes aprendizajes respecto a la interfaz de usuario (UI), el uso del “hot reload“, integración con el pipeline, testing, etc. Esto ayudó a entender mejor las necesidades y algunos de los desafíos que se tendrían que enfrentar si se adoptara a una escala más grande.
La historia de React Native en Nu es algo de lo que estamos muy orgullosos y merece una publicación aparte. No importa cuán exitosa sea una herramienta o plataforma, nuestros ingenieros continúan aprendiendo y experimentando con nuevas tecnologías, por ello se comenzó una iniciativa para experimentar y probar Flutter:
Tenemos una cultura de experimentación, por lo cual uno de nuestros ingenieros propuso un Flutter Dojo, para aprender más sobre este framework, familiarizarse con los patrones, el lenguaje (Dart), pruebas, etc más que nada entender mejor esta plataforma y cómo se comporta. Para ello se decidió usar un flujo que ya existía dentro de la aplicación y ver cómo el equipo se podía adaptar a él, por supuesto siendo 100% educativo y sin ninguna expectativa de negocio o de producto ya que el código implementado no se usaría posteriormente. En este primer contacto se obtuvieron grandes experiencias y se obtuvieron grandes logros.
De esta manera Flutter fue introducida inicialmente a los ingenieros
– Atrévete a formar parte de nuestro escuadrón de #CodeStars, checa aquí las oportunidades para unirte a nuestro equipo de ingeniería. Aplica a las vacantes disponibles dando clic sobre cada una de las posiciones:
Una cultura de experimentar y aprender rápidamente
Durante el 2019, la industria ya había mostrado avances significativos en tecnologías móviles; Kotlin como el idioma preferido para Android, Swift 5, Flutter 1.0, etc.
Entonces, lo más importante era cómo respaldar mejor la productividad de nuestros ingenieros al brindar funciones para nuestra aplicación. Algunas dificultades que tuvimos fueron:
- La curva de aprendizaje para el desarrollo móvil era bastante alta, aprender Kotlin para Android, Swift para iOS y ahora también un poco de React Native.
- Sin mencionar el hecho de que la arquitectura de cada una de estas opciones es muy diferente. Nuestra hipótesis es que, al reducir la barrera de entrada para el desarrollo móvil, Nu vería a más ingenieros contribuyendo a la aplicación.
- Otro cuello de botella que encontramos al depender de desarrolladores nativos era que entregar y trabajar con 2 plataformas lanzando nuevas funciones o productos al mismo tiempo era muy difícil. Aunado a que a pesar de nuestros mayores esfuerzos de contratación, nunca hubo suficientes desarrolladores para dotar de personal completo a nuestros equipos.
Rápidamente nos dimos cuenta de que nuestros equipos eran más importantes que una pila de tecnología y que tener todas estas opciones estaba causando incomodidad y confusión. Era hora de investigar seriamente cuál de las tecnologías multiplataforma se adaptaría mejor a las necesidades de Nu.
Así que nos propusimos crear un grupo de trabajo con la misión de investigar y determinar, con el apoyo de toda la ingeniería de software, en qué tecnología deberíamos estandarizar, considerando Kotlin Native, React Native y Flutter como alternativas.
“El objetivo era tomar una decisión tal que, independientemente de la especialización de sus miembros, los equipos lograran ser autónomos y productivos para desarrollar la aplicación móvil y ofrecer valor en una única arquitectura y lenguaje de programación”.
El grupo de trabajo
Para asegurarnos de crear soluciones que se adaptaran a todos nuestros clientes, creamos un equipo diverso de desarrolladores móviles y experimentados para Nu. ¿Qué aspectos buscamos en este escuadrón?
- Experiencia del desarrollador: ¿Qué permite a un desarrollador ofrecer valor y ser productivo? Ejemplos: hot reload; visibilidad de componentes; herramientas de depuración, integración con el IDE y herramientas para realizar pruebas.
- Viabilidad a largo plazo: representa el nivel de confianza en el futuro de la plataforma. ¿Se continuará dando soporte a largo plazo (5, 10 años)? ¿Qué posibilidades hay de que la comunidad apoye el proyecto si el responsable decide abandonarlo?
- Sin especialización en plataforma: un@ ingenier@ debería poder escribir código móvil para el producto sin diferenciar entre Android e iOS. ¿El código se ve y se comporta igual en Android e iOS, con poca incidencia de problemas específicos para cada sistema operativo?
- Costo de abstracción incremental: El costo de extender la plataforma para cada producto ¿Qué tan difícil será agregar un nuevo componente? ¿Se crearía una dependencia en un equipo horizontal?
- Riesgo de abstracción no lineal: Riesgo de requerir escribir gran parte del código fuera de nuestra propia abstracción interna ¿Se necesitarían cambios sustanciales dentro del código base para poder agregar un nuevo componente dentro de nuestro sistema de diseño NuDS (Nu’s Design System)?
“Luego nos propusimos recopilar evidencia y acordar una puntuación subjetiva para cada uno de ellos mediante el uso de diferentes técnicas como:
- Probar una versión de Flutter en una de nuestras funciones en producción.
- Analizar comunidades, repositorios y recursos disponibles para cada plataforma.
- Participar en conversaciones con especialistas, equipos y empresas detrás del desarrollo de cada plataforma.
- Clonar una de nuestras funciones como una aplicación independiente en las tres plataformas diferentes, realizando una prueba de usabilidad interna, donde los ingenieros principiantes y senior realizaron cambios en cada una de las aplicaciones.
- Realizar presentaciones, debates y visitas de equipo para discutir nuestros aprendizajes, escuchar las opiniones de ingenieros y asesores senior, incorporar sus comentarios y responder a sus preguntas.
Los resultados de las pruebas de usabilidad fueron muy interesantes ya que hubo una gran respuesta y personas de todos los niveles con y sin experiencia previa en desarrollo en dispositivos móviles realizaron una prueba. Recibieron una aplicación de trabajo, el ambiente de desarrollo, documentación de la plataforma híbrida, componentes, y algunas tareas cada vez más complejas. Fueron observados por nuestro equipo durante la ejecución de las tareas, y ambos respondieron un cuestionario al final.
Se analizaron muchos y diferentes criterios, hubo ventajas y desventajas para cada una de las plataformas, para Kotlin Native sentíamos que especialmente cuando se trata de soporte para testing más especializado para ingenieros experimentados Kotlin Native no estaba listo. Nuestra cultura de ingeniería fomenta fuertemente la automatización de pruebas, por lo que Flutter brilló con sus excelentes capacidades de prueba que encajan muy bien con nuestra mentalidad (infraestructura para pruebas unitarias, de integración y end-to-end sin la necesidad de renderizar en la pantalla).
Por el contrario, React Native requiere dependencias de terceros, lo que lo hace más propenso a cambios importantes.
Descubrimos que la experiencia de desarrollo de Flutter es superior, con mejores capacidades como el hot-reload, documentación oficial sólida y una API más estable.
Así, después de un gran análisis , tomando en cuenta decidimos usar Flutter como tecnología principal de Nu para el desarrollo móvil. Lo que significaría que todas las nuevas funciones y librerías se realizarían usando Flutter”.
“Desde entonces Nu ha recorrido y continúa recorriendo un gran camino, actualmente, muchas de las librerías (ya que cada producto es un paquete independiente) y gran parte del código de la aplicación ya se encuentran implementadas usando Flutter”.
– Atrévete a formar parte de esta revolución morada, checa aquí las oportunidades para unirte a nuestro equipo de ingeniería. Aplica a las vacantes disponibles dando clic sobre cada una de las posiciones:
Por supuesto, aún se tiene cierta dependencia en algunas funciones con código nativo, y se tienen que mantener todas las tecnologías, sin embargo, esto se está reduciendo gradualmente ya que cada vez más librerías y funcionalidades se encuentran en proceso de migración.
Cabe mencionar que incluir Flutter en una aplicación en ejecución con millones de clientes y que además nuestro nuestro repositorio de la aplicación ya tenía diferentes tecnologías tanto nativas como híbridas, hubo varios desafíos, por ejemplo, cambios en los pipelines, integrar la navegación entre las distintas plataformas para mantener interoperabilidad, para esto último creamos una librería open-source llamada Nuvigator (https://github.com/nubank/nuvigator) la cual nos permite crear de una manera más sencilla las rutas que se necesiten.
Conclusión: ¿cómo es usar Flutter?
Hasta ahora, ha sido genial usar Flutter, continuamos en transición pero esperamos que muy pronto esa brecha sea mínima.
“Trabajar con Flutter ha sido una experiencia bastante agradable y enriquecedora, no sólo porque cuando entré a Nu sabía apenas lo básico sobre este framework, la curva de aprendizaje es corta y empezar a escribir código y lanzarlo a producción tomó un par de semanas. Además, Flutter nos permite agilizar y lanzar productos escalables e integrar tests para ambas plataformas más rápido, pues ya no se tiene que escribir código para ambas plataformas”
Para nuestro caso de uso, y con la transición que aún continúa, Flutter nos ha ayudado a aumentar nuestra capacidad de crear y lanzar nuevos productos para nuestros clientes de forma más rápida y sin perder calidad, además de:
- Reducir la barrera para poder contribuir en el desarrollo de la aplicación móvil, personas con casi cero conocimiento pueden comenzar a colaborar en muy poco tiempo.
- Con el uso de herramientas internas, los tiempos para construir la aplicación y hacer merge (aprobación de PR’s) se han reducido un 30% aproximadamente en comparación con nativo.
- Colaboración entre los ingenieros y equipos, ya que cada librería o package tiene un equipo responsable, si se encuentra algún error podemos avisarles fácilmente.
- Mejor infraestructura para monitoreo.
- A medida que seguimos creciendo en otros países, adaptar la internacionalización (i18n/l10n) a diferentes productos o funciones ha sido más sencillo usando Flutter.
¿Cuál es el futuro para Nu? Es tener una aplicación totalmente Flutter, enfocándonos primero en todas aquellas funcionalidades o productos con los que nuestros clientes interactúan (UI).
Si bien Flutter es nuestra tecnología principal, todavía necesitamos y valoramos a los desarrolladores nativos, porque cada plataforma tiene su conjunto de características que requieren código nativo (por ejemplo, complementos nativos como GPS, cámara, seguridad, Apple Watch, etc.). Además, a medida que crece el equipo de ingeniería de software de Nu, la especialización individual es bienvenida.
Si quieres conocer más sobre las dinámicas de trabajo en Nu o la experiencia de nuestra #CodeStar Stephanie como Ingeniera de Software haz clic aquí para contactarla directamente.
Este contenido es parte de la misión de Nu para devolver a las personas control sobre sus vidas financieras. ¿Aún no conoces Nu? Obtén más información sobre nuestro servicio y nuestra tarjeta de crédito sin complicaciones, haz clic aquí.