Diseñando un app para móviles


He pasado los últimos meses programando una aplicación para móviles. No es que yo sea el programador más rápido y eficiente que existe pero me divierte mucho hacerlo. Principalmente disfruto la etapa de diseño, así que más que las funciones en el mismo app, me interesa todo el diseño del entorno que tendrá el app, no solo ahora sino también en el futuro.

Los objetivos que me puse para esta aplicación son:

Que sea muy útil. Obvio, aunque no tanto considerando que hay aplicaciones verdaderamente inútiles que tienen mucho éxito.

Que sea fácil de usar. En otras palabras, que no tenga que hacer clicks por todas partes para verlo funcionar. Instalarlo y listo.

Que sea fácil de mantener. Tengo que poder saber cuántos usuarios tengo, a que hora se conectan, que funciones del app están usando mas y cosas por el estilo. Además, que no tenga que estar contratando un super servicio de hosting que me cueste un montón de dinero mensual.

Utilizar un sólo código para muchas plataformas. Ok, Android es el más popular, pero iOS y WP y otros sistemas operativos deben poder usarlo también.

Que se pueda monetizar.

Todo esto me sonó razonable en su momento y aún me lo parece, así que los mantendré.

Ahora, mientras estaba programando, y considerando el último objetivo, me dí cuenta que hacia falta muchas cosas además de elegir hosting, librerías y demás cosas, realmente fue todo un descubrimiento para mi y sobre todo algo que no se puede aprender en ninguna escuela.

En fin, para hacer la historia corta, el proceso que tuve que seguir fue algo así mas o menos:

– Plataformas: 

Ya había escuchado hablar de Phonegap y Cordova desde hace años pero recién les puse atención como debe ser. Lo primero que encontré es que no son una solución completa. Veamos, la idea es que hagas tu app en JavaScript, luego la extiendas con Phonegap/Cordova y finalmente dejarle la generación de las versiones específicas. Todo bien, pero eso de hacer tu app en Javascript no me sonaba bien, además que Jquery no me quedó muy claro, principalmente porque te puedes enredar muy fácil con javascript si no tienes un framework que te ayude a programar. Jquery se orienta a la parte gráfica pero no a construir una estructura de aplicación que se pueda manejar aceptablemente, hay gente que lo hace, pero en mi caso, faltaba algo.

Por suerte encontré Ionic Framework que es una versión de Cordova mas una librería para UI y un framework de aplicaciones con AngularJS. Lo mas importante aquí es la inclusión de AngularJS, que es la forma como siempre debió ser Javascript.

Para ahorrarles algo de trabajo. El mayor problema que tuve con Javascript es que casi todo es asíncrono. Es decir, ejecutas una línea y la respuesta viene en algún momento que no sabes de antemano. Fatal para aprender y para hacer Debug. Además, su organización hace que el manejo de MVC sea muy natural. Finalmente, entiendo la importancia de que una vista no tenga acceso a la capa de datos, y que el controlador sea quien gestione la vista. El resultado es una aplicación donde las vistas con entidades independientes que podrían ser reutilizadas sin problema. Incluso pude dejar de lado la mala costumbre de preocuparme de un estado global de la aplicación gracias a una maravilla llamada UI-Router que viene integrada en Ionic Framework, para resumir, cada vista es un estado y listo.

Con esto solucioné el problema de cuál herramienta de desarrollo utilizar. Si bien tuve que aprender javascript, es un sol esfuerzo para abarcar muchas plataformas así que valía la pena.

– Datos: 

Sobre los datos en una aplicación hay tres cosas que pensar, que los tienes que organizar y tener en algún tipo de base de datos, que los tienes que pasar del servidor al móvil y finalmente que ese paso ocasiona tráfico.Resumiendo, Database, Syncing y Traffic.

En el mundo de móviles no hay muchas opciones y menos aún si queremos un app para varias plataformas. Muchos dirán que SQLite está presente en todas partes, yo me encontraba en ese grupo, pero la noticia mas grave que enfrenté es que no es cierto. SQLite no existe en todas partes y en los lugares donde existe se considera un estándar viejo que puede desaparecer en cualquier momento. Golpe durisimo porque ya empezaba con un problema mas. En fin, la alternativa que ofrece el mundo estándar es IndexedDB que para matar los ánimos, aún no es soportada completamente por todos. Que lío. En fin, como siempre el camino correcto parece siempre estar a la mitad y así fue que encontré PouchDB.

PouchDB es una versión cliente Javascript de CouchDB, que es un tipo de base de datos NOSQL que tiene algo muy bonito: sincronización automática de datos. Lo segundo: sincronización automática suena muy bien, pero lo primero requiere algunas líneas.

NOSQL es un movimiento nuevo de bases de datos que no están basados  en tablas y columnas como los tenemos en Oracle, Sql server y demás. La idea detrás es que sea más fácil de usar en aplicaciones de Internet, por dos motivos: el protocolo es http así que no hay drivers que cargar, y que no exista un modelo de datos, y con eso se eliminan los famosos joins. No es que crea que esta alternativa sea mejor que una base relacional, pero tener sincronización automática me convenció así que pagaré el precio usando NOSQL. El problema principal con estas DB es que hay casos en los que si tengo que usar “joins” para lo cual tengo que usar una pesadilla llamada MAP/REDUCE. En fin, lo bueno es que toda esa complicación me permitió aprender a golpes que hay que ser muy específico cuando se trata de hacer consultas a la base de datos.

– Sincronización y tráfico:

Como ya les dije, Pouch/CouchDB se encarga de sincronizar y lo más importante es que no consume mucho ya que es posible cargar una base de datos inicial, por lo que sólo se transmiten los cambios. Ahora, consideremos que la app que estoy haciendo es principalmente un catálogo con fotos, así que cada nuevo “registro” o mejor dicho “Documento” va a tener un tamaño algo grande, esto es 20K promedio lo que es bastante grande, pero que suena manejable considerando que por semana se crearán un máximo de 5 documentos con 2 documentos en la mayoría de los casos, así que podemos decir problema resuelto: la información estará al día y con un costo de transmisión de datos bastante aceptable. Sobre el consumo de datos, normalmente siempre es un problema la velocidad de datos ya sea por la calidad de la señal o por su costo, lo que hace necesario pensar siempre en transmitir lo mínimo indispensable a fin de que al usuario no le importe mucho usar tu app y por lo tanto, hace necesario que la app pueda funcionar sin datos por completo. Mágicamente, esto se soluciona con PouchDB ya que la base de datos está grabada en el móvil así que si se corta la señal, podremos seguir usando el app sin problemas.

– Hosting:

Una cosa interesante sobre CouchDB es que hay opciones de hosting gratuitos. En mi caso, IrisCouch tiene un servicio que es gratis hasta 5 dólares. Lo interesante es que la sincronización hace que sólo se pague por las diferencias entre la base de datos actual y la que se encuentra en el móvil, así que el tráfico debe ser bastante grande para empezar a pagar.  Un beneficio oculto es que se pueden hacer aplicaciones dentro de CouchDB, lo que simplifica la gestión del hosting. Ya les diré cuando aprenda a usar esa función.

Con esto se cierra lo que es la parte mecánica de la aplicación, es decir todo lo que un programador puede hacer. Ahora faltaba considerar lo que un empresario necesita. En primer lugar: Medir, necesitas saber cuanto se usa tu app y quienes la usan. Identificar: necesitas ahora mas datos de las personas que usan tu app y finalmente (al menos por ahora) Monetizar: generar algún ingreso.

Para la medición opté por Google Analytics porque es bastante completo pero con un giro. Para el cliente escogí una librería que simplifica el registro de los eventos y del uso y que suspuestamente trabaja con todas las plataformas. Cordova tiene un plugin para GA pero no soporta Windows Phone, Angulartics, la librería que escogí, parece que si por lo que estoy cubierto.

Para la identificación hay un gran detalle: los usuarios deben querer ser identificados. No voy a poner un formulario larguisimo para que mis usuarios se registren, lo mas simple es usar alguna red social y Facebook viene al rescate. Mejor aún, es si usamos un plugin para permitir compartir contenido dentro de la app que recibe información de las redes sociales a las que te conectas. En el futuro, si pienso dar la opción a que te registres, pero también seguiré el modelo de vincular la cuenta a alguna red social para simplificar el asunto, para que los usuarios tengan la opción de entrar fácilmente con sus cuentas de Twitter, Facebook o Google Plus y también para dar tiempo a que Windows Phone permita hacer lo mismo que en Android y iOS.

La monetización es algo que no se puede poner tan al principio para evitar que sea un impedimento para el crecimiento de los usuarios. Tampoco voy a dejar el app totalmente libre porque como ya dije, soy muy lento y alguien puede ganarme la jugada. Por el momento, la alternativa son banners y Admob resultó fácil de integrar. Hay un concepto llamado mediación que permite utilizar la misma cuenta Admob para recibir avisos de proveedores de banners que pagan algo mas, así que estaré en esa búsqueda. En el futuro, las opciones de monetización se abren como por ejemplo, cuentas personales que permitan hacer backup de tus datos, opciones para facilitar el intercambio de items entre usuarios en el mundo real y demás.

Adicional a todo esto hay un punto que ya queda casi al límite del tema técnico: Comunicación de los usuarios con el App. Toda app debe tener una identidad “social”. En otras palabras, hay que separar cuentas de Twitter, Facebook, Instagram, Pinterest, Correo, Web y otras por ahi. El app debe poder recibir mensajes y responderlos. Para eso hay que planificar con mucho tiempo porque los Ids en cada red social no esperan. Si se les ocurre un nombre cool, créenlo en la red social de su preferencia y así no lo perderán. Y lo más importante: asignen un Community Manager.

Hay un objetivo que siempre estuvo considerado pero que no lo escribí: que sirva de ejemplo para desarrollar otro tipo de aplicaciones móviles. Quizá esto es lo más importante, porque hasta ahora mi mayor éxito es un diagrama mal dibujado en algún papel, quizá ahora podríamos cambiar eso por una app que se pueda mostrar.

Resumiendo, su próxima aplicación móvil debe considerar las siguientes fases:

– Desarrollo: Plataforma, Datos y Hosting

– Explotación: Medir, Identificar y Monetizar

– Difusión: Planificar

Hay un punto que no he considerado que es la fidelización y ha sido a propósito. Personalmente, creo que la base de la fidelización de usuarios es brindar un buen servicio y satisfacer una necesidad. Veamos a Twitter que es básicamente el mismo servicio desde sus inicios, quiza sean los hash tags y las tendencias lo mas importante en innovación pero nada que altere la paz de los usuarios en escribir y leer tweets. Para el caso de esta aplicación, la estrategia de fidelización está en las nuevas funciones y en las futuras opciones de intercambio de items persona a persona.

¿Sobre que trata la aplicación? Ya lo verán en un par de semanas.




    Leave a Reply

    Fill in your details below or click an icon to log in:

    WordPress.com Logo

    You are commenting using your WordPress.com account. Log Out / Change )

    Twitter picture

    You are commenting using your Twitter account. Log Out / Change )

    Facebook photo

    You are commenting using your Facebook account. Log Out / Change )

    Google+ photo

    You are commenting using your Google+ account. Log Out / Change )

    Connecting to %s



%d bloggers like this: