lunes, 26 de marzo de 2018

Tengo una idea para hacer una App pero nose por donde arrancar!

A quien no le ha surgido alguna vez siendo desarrollador una idea genial que suponen que cambiaran al mundo o que simplemente piensan que puede funcionar y porque no? Vivir de ella?
Yo vivo teniendo ideas en mi cabeza de ese estilo. El problema es poder generar el tiempo para poder llevarlas a cabo mas cuando uno tiene un trabajo y una familia en que consumir tiempo.

En esta post quiero enumerar algunos items a tener en cuenta para aquellas personas faltos de tiempo que tienen esas ideas pero no saben como encararlas apropiadamente para que sean todo un éxito.
La idea de estos tips es guiar un poco a los nuevos emprendedores en software en base a mis propias experiencias y cosas que a mi me fueron funcionando utilizando distintas metodologias agiles y algunas mañas personales que a mi por lo menos me resultan.


Arranquemos...
1.- Bajar la idea principal a papel.


    Ni mas ni menos que eso. La idea que tengamos dando vuelta en la cabeza escribirla en un documento. Redactar la idea principal, como es que esta idea va a afectar al usuario final, como le va a ayudar a resolver, variantes de la idea, formas de monetización, la imagen que se le va a querer dar a la idea, como la gente va a ver la idea, si como un producto o una persona o una entidad o una caja negra que hace magia o los va a acompañar todo el tiempo en su celular ayudándolos en sus quehaceres, seria el "donde vivirá nuestra idea?"


2.- Ver hacia donde apunta nuestro proyecto.

    Identificar el fin de la idea. Ver bien claro el propósito de lo que vamos a hacer. Que quede bien definido que es lo que vamos a hacer para solucionar que problema. Sin esto bien bien definido corremos riesgos de que tengamos cambios de rumbos sobre la marcha que emprendamos y si contamos con poco tiempo estas cosas nos retrasarian mucho al punto de que avandonemos la idea en un tiempo.


3.- Monetización.


    Vamos a querer ganar dinero con esta idea? bueno de que forma? con publicidad? vas a vender un servicio? vas a hacer una aplicación paga? Vas a vender productos con ella? va a ser gratis?. Definir claramente si vamos a querer ganar dinero, de que forma lo vamos a llevar a cabo.


4.- Analizar tecnologias que vamos a usar.

    Vas a hacer una web? que lenguaje vas a usar? que base de datos se acomoda mejor a tu idea? Servicios externos que se van a necesitar? Que tipo de tareas vas a tener en el backend? identificalas y fijate de que forma las vas a aplicar.


5.- Servidores y Hosting que necesitemos.


    Ver que opciones hay en cuanto a precios, prestaciones y fiabilidad. Hoy por hoy hay varios servicios confiables y muy buenos por precios muy variados, sean AWS de Amazon, Google Cloud Computing, Godaddy.com no se queda atrás tampoco, entre miles mas. Hay que tratar de buscar soluciones que puedan ser escalables porque si nuestro proyecto crece inesperadamente debemos tener la posibilidad de poder expandirnos sin demasiado trabajo.


6.- Bajar a detalle fino sobre papel.

    Armar otro documento con el detalle bien fino de como vamos a resolver nuestro proyecto, pantallas, base de datos, arquitectura de proyecto, servicios. Todo mientras mas detallado mejor cosa de poder detectar desde antes de que nos pongamos a desarrollar problemas o cuestiones que no cierren bien. Aca vale utilizar todo tipo de diagramas que consideres, uml, armado de maquetas, diagramas de entidad, etc etc etc. Hasta un simple documento con todo escrito bien detallado sirve.


7.- Buscar colegas.

    Este punto es de suma importancia. Si bien solos podriamos resolverlo teniendo en cuenta que uno trabaja, tiene una familia, una vida! Esta bueno poder contar con colegas de gran confianza y que además cada uno tenga un rol distinto para poder lograr tener puntos de vistas distintos de los temas que vallan surgiendo durante el desarrollo del proyecto.


8.- Separar el proyecto en etapas y poner fechas de vencimiento.


    Una vez que tenemos la idea cerrada hay que hacer un listado de tareas, priorizarlas y separarlas en etapas de construccion. Lo mejor es poder separar en muchas etapas cortas, de no mas de 2 semanas. Esto ayuda mucho a llevar un hilo del proyecto y a saber en todo momento donde estamos parados, si venimos bien o estamos atrasados o identificar sobre la marcha tareas q fueron mal planteadas o faltantes.

9.- Llevar control de tiempos y avance.
    Esto parece tonto en un proyecto personal. Quizás estaria bueno para una empresa mas que para mi. Pero aunque parezca tedioso es muy bueno. Poder definir tiempos estimados y separar dichas tareas en huecos semanales. "Para la semana que viene tengo q definir esto". "Para la semana que viene tengo que hacer tal pantalla", etc. Nos da una visión de como viene nuestro proyecto y al ser hitos cortos nos motiva a que estemos todo el tiempo viendo avances y de esa forma no abandonar el proyecto por desgano.


10.- Publicar en producción.

    Si es una app subirla a los store correspondientes, si es una web subirla al hosting final donde vivirá. Está bueno armar scripts que ayuden con las tareas de subir archivos y configurar el servidor y la aplicacion/web


11.- Documentar!
    Si ya lo sé, esto es algo que no hace nadie pero es hiper! necesario. Si el proyecto prospera o si llegamos a necesitar sumar gente en un futuro la documentación técnica y funcional es de suma importancia debido a que nos evita miles de idas y vueltas para tratar de entender lo que hicimos en un principio.


12.- Armar campañas publicitarias.

    Hacer que nuestro proyecto se conozca, por redes sociales, boca en boca, si nos alcanza el dinero alguna publicidad en los medios. En fin no voy a indagar demasiado este punto porque da para hablar un montón.



13.- Vas a tener competencia, no te asustes.

    Si en algún momento mientras transitamos todos estos pasos vemos que alguien ya hizo algo similar a lo nuestro, no se desesperen y sigan adelante. Piensen en cuantas aplicaciones y sitios web similares hay y ahí están aun. Por ej, piensen en sitios para comprar y vender por internet. Hay muchas y todas viven. Asi que adelante! Logren destacarse de la competencia para así lograr el éxito.


En resumen, sea cual sea la idea que quieran desarrollar lo mas importante es que lo hagan con pasión. Si hacen un proyecto solamente por el fin de ganar dinero, están fritos. Primero está la idea, después los beneficios. Disfruten de lo que hagan que de esa forma van a conseguir lograr lo que quieran.




lunes, 19 de marzo de 2018

Desarrollo mobile, nativo o multiplataforma?

Hace unos años atrás, cuando me hiso el clic de que debía aprender a programar mobile para poder progresar un poco, empecé a investigar de que iban esos lenguajes multiplataforma y que tan buenos o malos eran frente a programar nativo.

Al principio me marié un poco con los temas así que decidí arrancar con lo ya conocido, Android Nativo. Me bajé el Android Studio, instalé la SDK y a programar!. En ese momento no contaba con una compu muy poderosa y empece teniendo problemas para levantar la maquina virtual de Android y a tener un Android Studio que se arrastraba bastante. De todas maneras, lento y todo seguí aprendiendo el lenguaje. Llegó un momento que en parte por la lentitud de mi pc y por lo enroscado que se me estaba poniendo el codigo decidí ver si había alguna opción mas práctica que me permitiera programar mobile de forma mas fácil y vi que había plataformas unificadas para Android y Iphone y me puse a leer al respecto.

Arranque leyendo sobre cordova. Algo loco que, en resumidas cuentas, no es mas que un "mini apache" que te muestra webs en el celu como si fueran aplicaciones nativas. Pensé, "esto pinta bueno!!" Y empecé con un desarrollo para ponerlo a prueba.
Empece intentando hacer un juego de tuti-fruti. La programación se hacia muy simple ya que era programar web, algo que yo ya venia haciendo hace tiempo ya. Pero al no ser  nativo cuando la app empezó a tener cierta robustez me encontré con que no funcionaba del todo fluida. Leí sobre performances pero terminé desistiendo de Cordova debido que para apps mas complejas no resultaba del todo performante. Era muy bueno para apicaciones simples, pero no podia explotarlo por completo con cosas mas complejas o que requieran de mas funciones de hard del celular (ojo, que estoy hablando de Cordova de hace unos años, aclaro por si ahora la cosa es distinta).


Luego de darme cuenta que esto no me funcionaba del todo ooootra vez me puse a buscar alternativas nuevas y me topé con NativeScript, que como su nombre bien lo indica genera aplicaciones nativas multiplataforma. Me dejé seducir por el nombre y me dispuse a probarlo. Viniendo del mundo de Angular la verdad que la curba de aprendizaje fue muy empinada. Safando algunas particularidades que se usan exclusivas para mobile, el resto era como si estuviera programando una web. Muy bueno realmente. 
Ya llevo 2 años con native script y la verdad es una herramienta que la encontré super práctica para mis humildes desarrollos.


Para ir resumiendo, las distintas opciones que utilicé fueron:
Android nativo, lo mejor para programar mobile pero algo engorroso o lento para cuando necesitamos sacar trabajos en poco tiempo.
Ionoc, muy practico al ser multiplataforma pero al utilizar cordoba como base se ve afectada la performance.
Native Script, mas práctico aún que Ionic, multiplataforma pero! Generando apps nativas donde la performance no se ve tan comprometida.

Ya se que van a decir, hay otras opciones mas que seguramente son mejores que estas que no he nombrado, pero bueno no quería extenderme tanto y fui por las que a mi me resultaron mas significativas en mi aprendizaje.

Comenten si quieren y cuenten que soluciones les sirvieron a ustedes.