Hace poco más de un año, Alexandre Freire escribió un artículo sobre cómo decidimos estandarizar el desarrollo de nuestras aplicaciones móviles con Flutter, nuestras primeras experiencias con la plataforma, y por qué decidimos utilizarla como nuestra tecnología principal para aplicaciones multiplataforma.

En una entrevista reciente con Nóra Bézi de Bitrise, Alexandre, junto con Noe Branagan, gerente de ingeniería del equipo Flutter Core de Nubank, y otros ingenieros de Nubank, le brindan una descripción general de cómo Flutter nos ha ayudado a escalar el desarrollo de nuestras aplicaciones para respaldar nuestro hipercrecimiento.

¿Por qué Flutter?

A medida que Nubank creció hasta convertirse en el banco digital independiente más grande fuera de Asia, el desarrollo de nuevos productos más allá de la tarjeta de crédito se convirtió en una prioridad y los nuevos equipos tuvieron que encontrar una manera de enviar rápidamente aplicaciones de alta calidad.

Para comprometerse con una única tecnología, el equipo evaluó las opciones frente a un conjunto bien definido de prioridades basadas en estos cinco factores: 

1. Experiencia del desarrollador: ¿Permitirá a los desarrolladores ofrecer valor y ser más productivos?

2. Viabilidad a largo plazo: ¿La plataforma contará con el apoyo de sus creadores a largo plazo?

3. Sin especialización en plataforma: ¿El código se ve y se comporta igual en Android e iOS, con una baja incidencia de problemas específicos del sistema operativo? 

4. Costo de abstracción incremental: ¿Qué tan difícil será ampliar la plataforma y agregar nuevos componentes?

5. Riesgo de abstracción no lineal: ¿Necesitarían realizar cambios no triviales en todo el código base para admitir nuevos componentes? 

Después de recopilar evidencia, el equipo decidió adoptar Flutter, gracias a sus excelentes capacidades de prueba, como la infraestructura de prueba integrada para pruebas unitarias, de integración y de un extremo a otro sin la necesidad de renderizar en la pantalla. En general, en comparación con otras opciones, también encontraron que la experiencia de desarrollo de Flutter era superior, con mejores capacidades de recarga en caliente, documentación oficial sólida y una API más estable.

On the left, two Nubank purple plastic cards. On the right, a mobile phone showing the home screen of the Nubank app.
Tarjetas y aplicación de Nubank

Descubre las oportunidades

Un año después, ¿qué tan bien escala Flutter?

Nóra: ¿Aún estás contento con Flutter?

Alexandre Freire, Director de Ingeniería: Nos encanta Flutter en Nubank. Se ha convertido 100% en parte de nuestra cultura cuando hablamos de desarrollo móvil. También estamos experimentando con Flutter web, ya que ha demostrado muchas ventajas al usarlo para mejorar nuestra experiencia de desarrollador. Hemos tomado muchas decisiones estratégicas en nuestro equipo de producto que han impactado nuestra velocidad y eficiencia y han brindado la oportunidad a más ingenieros de colaborar en nuestro código base compartiendo un idioma. Nos sorprendió la facilidad con la que nuestros equipos adoptaron la tecnología y todas las funciones nuevas desarrolladas con Flutter. Estamos adquiriendo más experiencia en Dart — se ha convertido en parte de nuestro arsenal para crear nuevas herramientas para el desarrollo móvil, como la CLI que utilizamos para que los desarrolladores móviles trabajen en nuestro monorepo.

Nóra: Desde que usas Flutter, ¿ha habido algún cambio en tu proceso de desarrollo móvil?

Noe Branagan, Gerente de Ingeniería: Desde que decidimos ​adoptar Flutter​, adoptamos una herramienta de desarrollo interna experimental que utiliza Flutter Desktop para acelerar nuestro desarrollo aún más. Reduce el uso de la batería de la computadora portátil al omitir los emuladores y ayuda con pruebas rápidas en diferentes dimensiones del dispositivo. Nuestra infraestructura móvil y eficiencia de desarrollo se han mejorado constantemente con Flutter, Dart y con las muchas funciones nuevas exclusivas para desarrolladores introducidas durante el año pasado.

Nóra: ¿Hay algo que desearías haber sabido en aquel entonces?

Bruno Tavares, Gerente de Ingeniería: Creo que fuimos un poco ingenuos con respecto a nuestra capacidad de migrar una aplicación tan grande y compleja que ofrece soporte completo para cuatro productos diferentes. Todavía estamos a mitad de camino: nuestra aplicación aún no es 100% Flutter. Recientemente finalizamos un mapa completo de propiedad de los módulos para los equipos y comenzamos a rastrear los planes para finalizar la migración. Estamos alineando a la empresa en torno al objetivo técnico de finalizar la migración. También nos enfrentamos a decisiones difíciles de priorización, especialmente en flujos y pantallas que funcionan muy bien en su estado actual (Objetive-C nativo, Swift, Java, Kotlin o React Native) para los cuales no hay planes de actualización en el futuro cercano.

El siguiente mapa muestra todos los flujos y pantallas de las aplicaciones, y el tamaño indica la complejidad del módulo. El morado marca los que ya hemos migrado y el verde los que planeamos migrar este año:

A mosaic of purple, yellow and green rectangles. Purple and yellow share about the same proportion, while the green ones are less common.
Este mapa muestra todos los flujos y pantallas de la aplicación, y el tamaño representa la complejidad del módulo. El morado marca los que ya hemos migrado y el verde los que planeamos migrar este año.

Nóra: En tu opinión, ¿qué tan bien escala Flutter?

Noe Branagan, Gerente de Ingeniería: Nuestro equipo de ingeniería todavía está creciendo como resultado del hipercrecimiento de Nubank: ​siempre estamos contratando​​. Esto también significa que necesitamos aumentar la frecuencia de envío de nuevas funciones a los clientes, lo que también requiere más capacidad y recursos. Tener Flutter como nuestra tecnología principal ha reducido significativamente la barrera, lo que permite que los nuevos ingenieros puedan contribuir a nuestra aplicación unos días después de su incorporación. En términos de eficiencia, hemos mejorado enormemente nuestro tiempo de construcción; la tasa de éxito de la fusión es un 30% mejor en comparación con la nativa, y los PR de Flutter tardan 9.9 minutos en fusionarse, en comparación con el promedio general de 70.45 minutos en todas las plataformas.

Reinaldo Moreira, Ingeniero de Móvil: “Flutter nos permitió lanzar seguros de vida en solo 3 meses. Antes de utilizar el marco, desarrollar y lanzar un nuevo producto llevaría varios meses o incluso un año. El uso de Flutter nos ayudó a acelerar nuestro desarrollo para ambas plataformas y las herramientas creadas desde nuestra plataforma móvil también marcaron una gran diferencia. No puedo pensar en un escenario de cómo se podría haber hecho esta característica sin usar Flutter”.

Nóra: ¿Cuáles son las características principales que hacen que Flutter sea tan adecuado para tu caso de uso?

Lindsey Bleimes, VP de Ingeniería: Proporciona más coherencia en la forma en que desarrollamos productos. Tenemos nuestro propio sistema de diseño, en el que los equipos de producto pueden ampliar y personalizar sus componentes de interfaz de usuario. También ofrece mejores herramientas impulsadas por el backend, como la función de ‘recarga en caliente’, y una mejor compatibilidad con la localización. Creamos una herramienta para entregar dinámicamente contenido nuevo a nuestra aplicación, por ejemplo: ahora podemos administrar la localización sin la necesidad de lanzar una nueva versión de la aplicación o sacrificar el rendimiento. El uso de Flutter nos ha ayudado a crear una mejor infraestructura para la observabilidad, enviar alertas directamente al equipo responsable, medir el tamaño de la aplicación por función o paquete y correlacionar más métricas con otros sistemas.

Marcelo Theodoro, Gerente de Ingeniería: El principal beneficio fue que incluso los ingenieros no móviles se volvieron productivos en solo unas pocas semanas, debido a la rápida curva de aprendizaje de Flutter. Con la adopción por parte de múltiples equipos de productos, todos notamos que surgieron algunas prácticas nuevas y excelentes y comenzamos a estandarizar nuestras bases de código.

Nóra: ¿Hay algo más a considerar al migrar una aplicación a Flutter?

Alexandre Freire, Director de Ingeniería: Vale la pena señalar que, además del código de la aplicación en sí, esta migración implicó muchas herramientas y soporte. Creamos un servicio para encargarnos de toda la copia y localización de la aplicación, ya que estamos operando en Brasil y México y ya hemos anunciado nuestras operaciones en Colombia. También creamos herramientas de desarrollo como la CLI escrita en Dart y adaptamos nuestros procesos de construcción, pruebas e implementación continua, utilizando principalmente soluciones internas. Tuvimos que adaptarnos a esta realidad de tener una aplicación que existe en un estado mixto (nativa, React Native y Flutter). Con suerte, cuando terminemos la migración podremos simplificar este ecosistema.

Marcelo Theodoro, Gerente de Ingeniería: No todo son rosas. Siendo los primeros en adoptarla, no pasó mucho tiempo antes de que tuviéramos algunos problemas al integrarnos con partes nativas heredadas de la aplicación. El aprendizaje clave aquí fue que tener un equipo de plataforma enfocado en respaldar a los equipos de producto es crucial para resolver este tipo de errores y algunos de los problemas complejos de rendimiento. Y para evitar que la aplicación se convierta en el monstruo de Frankenstein, consideramos importante brindar capacitación generalizada a todos los equipos”.

Descubre las oportunidades