Todos los miembros de Karumi hemos estado desarrollando aplicaciones para Android o iOS durante años, y es curioso observar como todos creemos que durante mucho tiempo hemos estado desarrollando aplicaciones prácticamente a ciegas. Para solventar este problema decidimos crear desde cero FlowUp, la plataforma de monitorización de aplicaciones en tiempo real para Android e iOS que estamos desarrollando.
El hecho de que pensemos que hemos estado desarrollando a ciegas durante tanto tiempo es curioso, pero hay una serie de preguntas que validan nuestra tesis. Si tienes un desarrollador de mobile cerca o tú mismo trabajas desarrollando aplicaciones para iOS o Android, intenta encontrar respuesta a las siguientes preguntas:
- ¿Cuál es el consumo medio de CPU o memoria que tiene la aplicaciones en la que trabajas?
- ¿Cuántos bytes consume la aplicación por segundo?
- ¿Tu aplicación es capaz de mostrar 60 frames por segundo?
- ¿Cuál es la pantalla (Activity/ViewController) con peor rendimiento de la aplicación?
- ¿Qué tamaño ocupan las shared preferences o la base de datos en el dispositivo?
- ¿Es la última versión que publicaste mejor o peor en términos de rendimiento? ¿Consume más datos? ¿Escribe más en la base de datos o menos?
Si crees que tienes una respuesta a estas preguntas, intenta pensar en la cantidad de diferentes dispositivos (más de 15.000 en el caso de Android) y versiones del sistema operativo en el que esa aplicación puede estar ejecutándose.
La cantidad de usos diferentes que la aplicación tiene, los cuales no tienen por qué ser el mismo uso que el desarrollador hace de ella ni coincidir con el dispositivo que el desarrollador usa. No todos nuestros usuarios tienen un Nexus o un Pixel y usan la aplicación tal y como nosotros, los desarrolladores, lo hacemos.
Completa tu stack de herramientas para desarrolladores con FlowUp
"Decidir si arreglar una feature que no tiene un comportamiento correcto o implementar una nueva tiene que ser una decisión basada en métricas de nuestro software"
Actualmente los desarrolladores de aplicaciones tienen acceso a herramientas de análisis de performance como Android Studio monitor, systrace o instruments en el caso de iOS. Pero estas herramientas sólo miden el uso de la aplicación en un entorno de desarrollo, no en el entorno donde nuestro software aporta valor al negocio, el entorno de producción. FlowUp monitoriza a tus usuarios finales en sus dispositivos reales y te ofrece toda esta información en real-time para que puedas analizarla fácilmente.
Cualquier desarrollador en su día a día tiene un modelo mental del comportamiento de su software, pero este modelo se asemeja al comportamiento del software tanto como un mapa a una ciudad. El mapa de la ciudad de Murcia es solo una representación de la ciudad, no la propia ciudad. Cuanto más alejado es nuestro modelo mental del software que construimos, peor podemos razonar sobre nuestro software. Decidir si arreglar una feature que no tiene un comportamiento correcto o implementar una nueva tiene que ser una decisión basada en métricas de nuestro software.
FlowUp acerca el mundo de la monitorización de sistemas en producción a los desarrolladores de aplicaciones móviles. Inicializando una librería en nuestra aplicación con una sola línea, tal y como se muestra en el ejemplo del SDK que estamos desarrollando para Android, tendremos acceso a información que nos ayudará a mejorar el rendimiento de nuestras aplicaciones.
FlowUp.Builder.with(this).start("");
¿Qué métricas ofrece FlowUp?
La cantidad de información que FlowUp obtiene sobre el estado y comportamiento de tu aplicación en producción es muy interesante:
- Frames por segundo y frame time de cada una de tus activites/view controllers.
- Tiempo necesario para ejecutar el ciclo de vida de tus activities/view controllers.
- Consumo de CPU.
- Consumo de memoria.
- Tráfico de red tanto de subida como de bajada.
- Uso del disco en lo relacionado a base de datos, shared preferences o NSUserDefault.
Por supuesto, toda esta información filtrada por:
- Versión de la aplicación.
- Modelo de dispositivo.
- Versión del sistema operativo.
- Activity/ViewController name.
- Tamaño y densidad de pantalla.
- Calidad de la red.
Toda esta información recogida en una serie de dashboards organizados para mostrar fácilmente si hay algún problema en el rendimiento de tu aplicación y dónde se encuentra.
Este es solo un ejemplo de un dashboard que utilizamos mientras desarrollamos la plataforma.
Actualmente estamos terminando el desarrollo de la plataforma y preparando un programa de betas privadas en el que nos gustaría incluir a algunos desarrolladores. Queremos ayudaros a crear la mejor aplicación posible.
No olvides registrarte a nuestra beta en http://flowup.io.
Más información en Android devs, we were blind! (Karumi Blog)