Recientemente el equipo de Facebook ha mejorado en un 200% la aplicación de Messenger, pasaron de tener 1.7 millones de líneas de código a tan solo 360,000, eso supone un gran trabajo por parte del gigante azul.

Messenger no solo es una aplicación de mensajería, se ha convertido en toda una herramienta con múltiples servicios integrados como pagos en línea, juegos, videollamadas, efectos de cámara, etc.

LightSpeed es el proyecto que realizó parte del equipo de Facebook para reestructurar toda la experiencia y la base de código de la aplicación de Messenger en la plataforma de IOS.

Más pequeño y más rápido

Messenger cuenta con tecnologías inmersivas y esto quiere decir que millones de usuarios pasan horas utilizando diferentes servicios como juegos, videollamadas, chats, etc. y esto se traduce a mayor espacio en disco, uso de la batería, etc. Al ser una aplicación de mensajería en teoría la aplicación no debería consumir tanto espacio y requerir muchos recursos, Facebook sabía esto desde hace tiempo y por eso uno de sus objetivos con el proyecto LightSpeed era optimizar el uso de recursos de los dispositivos móviles.

Más simple

Tomando muy en serio la reutilización  y la escalabilidad del código, el equipo de desarrollo logró reducir en un 84 por ciento las líneas de código de más de 1.7 millones a tan solo 360,000.

Al leer la publicación original esto me rompió la cabeza ya que es una tarea sumamente compleja, para hacer cosas simples se necesita de mucha complejidad, conocimiento e inversión de tiempo definitivamente.

Aprovecharon el sistema operativo

En ocasiones reinventar la rueda no es necesario y empresas como Facebook lo saben perfectamente, es por eso que decidieron aprovechar las APIs y las funcionalidades que provee IOS para interactuar directamente con su sistema operativo.

Esto lo decidieron a que mantener librerías era una tarea que hay dedicarle mucho tiempo debido a que los sistemas operativos cambian drásticamente cada día, es por eso que ahorraron miles y miles de líneas de código, además de algo más importante: el tiempo.

Esto quiere decir que IOS está haciendo bien su trabajo como sistema operativo, Facebook decidió delegar más infraestructura directamente al sistema operativo, lo que se traduce en que las tecnologías móviles cada día maduran mucho más.

Fuente: engineering.fb.com

Reutilización de UI

Al tener múltiples vistas para cada una de las secciones de Messenger eso significada un mayor peso para la aplicación y como no se trata de una sencilla app, cada detalle cuenta, por más mínimo que sea.

Básicamente lo que hicieron fue hacer dinámicas las vistas de la aplicación, esto representó una gran mejora ya que les permitió al equipo de desarrolladores realizar camSQLitebios en el diseño sin la necesidad de agregar más código.

Esto quiere decir que cada vez que alguien solicite datos de la aplicación, primero se consultará a la base de datos y una vez que se envíe el response se renderiza la vista, esto es un gran avance.

El éxito de esta funcionalidad se lo deben a que trabajaron con múltiples tablas de SQLite, una jugada muy creativa por parte del equipo de desarrollo.

Fuente: engineering.fb.com

Aprovechamiento de SQLite

Esto no es nada nuevo, de hecho, muchas aplicaciones móviles utilizan SQLite como gestor de base de datos, lo interesante aquí es que Facebook aprovecho y delego mucho de sus servicios de almacenamiento a SQLite.

Históricamente, la coordinación del intercambio de datos entre características requería el desarrollo de subsistemas de transacciones y almacenamiento en caché de datos complejos y personalizados. La transferencia de esta lógica entre la base de datos y la interfaz de usuario ralentizó la aplicación. Decidimos renunciar a eso a favor de simplemente usar SQLite y dejar que maneje la concurrencia, el almacenamiento en caché y las transacciones. Ahora, en lugar de admitir un sistema para actualizar qué amigos están activos ahora, otro para actualizar los cambios en las imágenes de perfil en su lista de contactos y otro para recuperar los mensajes que recibe, las solicitudes de datos de la base de datos son independientes. Todo el almacenamiento en caché, el filtrado, las transacciones y las consultas se realizan en SQLite. La interfaz de usuario simplemente refleja las tablas en la base de datos.

  • El equipo de desarrollo de Messenger

Esto involucro que el equipo desarrollará una plataforma MSYS para gestionar los accesos a las base de datos.

El enfoque de todo esto fue que la centralización de todo, desde el código hasta la lógica de negocio en un solo lugar, pensaron en globalizar todo el desarrollo. Desde enviar archivos, iniciar sesión, todos los servicios en un solo servidor.

Desarrollo de un nuevo servidor

Otra de las cosas increíbles que hicieron para hacer este proyecto posible fue el desarrollo de un nuevo servidor con una infraestructura enfocada en admitir la presencia de la única capa integrada de datos y sincronización de MSYS del lado del cliente.

El servidor es el encargado de sincronizar cada funcionalidad y de interactuar con la aplicación en tiempo real, esto verdaderamente hizo que mi cabeza explorará.

Prevenir el crecimiento futuro del código

Después de todo el increíble trabajo y de los enormes resultados al desarrollar y estructurar la nueva aplicación, el equipo de Facebook necesitaba asegurarse que el peso y los recursos que necesita la aplicación no se vieran afectados en un futuro.

El tamaño binario de la aplicación ahora es un cuarto de lo que era antes y esto representa que los arquitectos e ingenieros de software de Facebook tienen un presupuesto muy limitado para agregar correcciones, mejoras y nuevos features sobre la nueva app y un estricto plan arquitectónico para evitar el comportamiento no deseado de la aplicación.

Definitivamente la nueva aplicación de Messenger significa una gran evolución en el desarrollo y en la tecnología en general al traer soluciones efectivas al mercado. Esto también significa un enorme esfuerzo por Facebook para mantener sus aplicaciones al día, lo cual conlleva mucho esfuerzo por parte de la compañía.

Todo esto finalmente es casi transparente para el usuario, realmente nota ligeras mejoras pero por detrás hay todo un mundo que cambió para hacer un servicio altamente eficaz y mejorado.

Nos deja muchas enseñanzas también, desde desarrollar cosas sencillas, reutilizar el código y pensar bien en la escalabilidad del código, desde hace varios años Facebook nos viene sorprendiendo mucho y seguro lo vendrá haciendo durante muchos años más.

Fuente oficial: https://engineering.fb.com/data-infrastructure/messenger/