APLICACIONES WEB: Desarrollo ágil, sin desperdicios y controlando la inversión

Es común observar cómo, al cabo de desarrollar una aplicación web, el ROI no es el proyectado, porque el producto no cumple con los requerimientos del usuario. ¿Cómo se logra entonces disminuir el ciclo de desarrollo de software?

Publicado el 30 Nov 2015

col3

Eduardo Toloza.

El desarrollo de aplicaciones web siempre ha significado una gran inversión en términos de esfuerzo, costo y tiempo, inversión que muchas veces no logra generar el ROI esperado debido a que el producto desarrollado simplemente no satisface las necesidades de los usuarios.

Gran parte del problema se debe a que se desarrollan funcionalidades que no agregan valor alguno a los usuarios finales; esto se conoce como “wastes” (desperdicios).

La fabricación de desperdicios, fue sin duda una de las causas más habituales de por qué las start ups tecnológicas de Silicon Valley fracasaban, ya que muchas de ellas invertían demasiado tiempo y esfuerzo durante el período de desarrollo del producto, construyendo la mayor cantidad posible de funcionalidades con el fin de lograr un producto robusto y completo, que pudiese satisfacer en la primera puesta en producción al segmento de clientes al que se apuntaba.

Esta decisión aumentaba el costo de inversión de manera exponencial, así como también su riesgo, ya que realmente se desconocía el valor real que agregaría a los usuarios cada una de las funcionalidades desarrolladas.

En muchos casos, luego de meses o años inclusive de fabricación de un producto, una vez finalizado y lanzado al mercado, este fracasaba de forma inmediata, ya que no lograba satisfacer necesidades esperadas por los usuarios, llevando de esta forma a las start ups directamente al fracaso y sin capacidad de reacción alguna debido al alto costo ya invertido. En base a lo anterior, se comenzó a utilizar una filosofía llamada Lean Start up, que se centra básicamente en agregar valor a los clientes, eliminar todo lo que sea “desperdicio” y disminuir los ciclos de desarrollo del producto (lo que directamente disminuye también el costo y riesgo de la inversión realizada).

Lean Start up

Lean Startup se basa fuertemente en el desarrollo rápido de una primera versión del producto, la cual cumple únicamente con las funcionalidades realmente elementales para utilizar el producto (MPV – Producto Mínimo Viable). De esta manera es posible lanzar esta versión del producto prontamente al mercado y recibir feedback temprano de los usuarios finales (o en primera instancia de nuestros “Early Adopters”), lo que nos permitirá ir avanzando y experimentando con nuevas funcionalidades y/o extendiendo estas, de manera iterativa- incremental, en base a las necesidades recibidas por parte de los usuarios, métricas realizadas y al valor real que agregue cada funcionalidad a los usuarios (conocido como mejora continua y/o Kaizen).

Creación de un Producto Mínimo Viable

Para esto, es importante trabajar con “continuous deployment”, que se basa en el lanzamiento a producción de todo el código que se va desarrollando de manera inmediata sin acumular grandes entregas y períodos largos de tiempo. En el peor escenario, si nuestro modelo de negocio no logra la aceptación esperada por parte del mercado, el costo y tiempo de la inversión (pérdida) no serán tan altos y nos permitirá invertir esfuerzo en nuevos productos.

¿Cómo disminuir el ciclo de desarrollo de software?

Desde hace ya algunos años en el desarrollo de software, el uso de metodologías y procesos ágiles como Scrum o Extreme Programing (TDD, ATDD, etc.) nos ha permitido disminuir considerablemente los ciclos de desarrollo de software; estas metodologías son acompañadas de procesos como la Integración y Entrega Continua, y agilizan considerablemente el procesos de creación y puesta en marcha de aplicaciones, además de ayudarnos a trabajar de mejor manera con la filosofía Lean, anteriormente comentada.

Dado que Scrum en estos tiempos ya es utilizado como un estándar en el desarrollo de software, prefiero profundizar un poco acerca de la Integración Continua (CI). Esta nos permite detectar, de manera temprana, errores que son generados por algún integrante del equipo de desarrollo. Esto, ya que cada cambio que un desarrollador realice en nuestro control de versiones (svn, tfs, github, bitbucket, etc.) será descargado, compilado, testeado (en base a pruebas unitarias o incluso pruebas de aceptación) por nuestro agente de integración continua, el que podrá inclusive encargarse de publicar una versión (deployment) de esta nueva edición del código en nuestros servidores web (en caso de no existir errores de código y pasar todas las pruebas automatizadas.)

En la actualidad, existen varios servidores de integración continua, algunos de ellos trabajan incluso bajo la modalidad SaaS, entre los que destacan Bamboo, Jenkins y TeamCity.

Proceso de CI

Un plus adicional es trabajar con infraestructura escalable y elástica, que nos permitirá pagar por lo que utilizamos, además de escalar de manera fácil y aprovechar muchísimos servicios existentes en la actualidad, como es el caso de Amazon Web Services (AWS), que brinda un sinfín de servicios adicionales a su infraestructura escalable y elástica.

Para trabajar con este tipo de procesos, servicios y metodologías de manera óptima, debemos focalizarnos en desarrollar aplicaciones web de alto nivel y escalables. Para esto, recomiendo que nuestro desarrollo esté basado en ciertos principios y estándares, como lo son los principios Solid (principios básicos de POO), Owasp (Open Web Application Security Project) y el uso de múltiples patrones de diseño que nos permitan tener una aplicación más segura, desacoplada, mantenible y escalable en el tiempo.

¿Qué te ha parecido este artículo?

¡Síguenos en nuestras redes sociales!

Redacción

Artículos relacionados

Artículo 1 de 3