¿Qué es el desarrollo ágil y cómo lograrlo?
Igor Támara
Senior Software EngineerLa crisis del software ha dejado grandes vencedores y miles de millones de dólares que han cambiado de manos; muchas empresas han visto como nuevos competidores emergen con una velocidad que parece irreal. En esta oportunidad enunciamos algunos de los factores que incrementan la distancia en la competitividad de las empresas y los desarrolladores, y puntos diferenciadores que pueden hacer que una empresa continúe adelante, que un emprendimiento triunfe o que aprazcan productos que reemplacen a otros.
Un sistema que hace lo que que tiene que hacer es perfecto, de la misma manera que una solución informática nunca está terminada; determinar exactamente qué es lo que se tiene que hacer es un buen punto de partida, conocer las limitaciones y la complejidad de la implementación de lo que se quiere frente a las tecnologías actuales y lo que puede hacer el equipo de desarrollo permite tomar las decisiones adecuadas para llegar a la mejor aproximación o una solución que satisfaga las necesidades reales.
En tal sentido la asignación de roles dentro del proceso es fundamental y cada día se ven más personas con aspiraciones para alcanzar la dirección de proyectos y pocas enfocadas a la producción, al desarrollo y a hacer que su imaginación se plasme en "cosas" que no pueden romperse con un hacha. Una vez que un sistema hace lo que tiene que hacer para un grupo pequeño, hay que pensar en escalar para llegar a uno que sea la solución para la cantidad de personas que requieren satisfacer cierta necesidad.
Organización
Cada persona en el equipo tiene roles claramente definidos, de forma tal que los desarrolladores estén libres de distracciones y presiones que no ayudan al proyecto, los equipos pequeños son capaces de autogestionarse y si las tareas son lo suficientemente atómicas, estas pueden llevarse a cabo.
Se requiere siempre alguien que pueda tomar decisiones respecto a lo que hay que hacer en diferentes niveles. Se requiere quien está presente como traductor de ideas y quien pueda hacer que estas ideas se plasmen en sistemas usables.
Proyectos desechables o misionales
Hay dos opciones para los proyectos:
Una relación de moda y a corto plazo genera productos desechables que son hechos con velocidad y que no son planeados para estar inmersos en la misión de la organización, generalmente son hechos pensando en publicidad y en ideas de corto plazo, gran cantidad del presupuesto de imagen corporativa se dedican a este tipo de proyectos. La inversión generalmente se agota en la creatividad y la ingeniería no puede ser aplicada.
Hay otros proyectos en los que los responsables están al interior de la compañía y que involucra a los actores diarios, si las soluciones que se generan para comunicar a los usuarios y clientes información relevante y válida y que eliminan procesos manuales, minimizan costos de desplazamiento o gasto de papel, son aquellos que requieren mayor iteración. Además de satisfacer las necesidades misionales de la organización, se requiere que sean sencillos y minimicen el trabajo para que la resistencia al cambio disminuya.
Elección de herramientas
Si un cliente pretende elegir las herramientas con las cuales se va a desarrollar un proyecto esto sería equivalente a solicitarle a un médico que haga una operación, pero forzándolo a usar una cuchara en lugar de un bisturí para hacer un corte.
Si la elección se toma en función de la cantidad de profesionales preparados en tecnología específica que va a cambiar con seguridad en menos de 5 años seguramente se estará trabajando con tecnologías que están maduras, pero que posiblemente satisfacían las necesidades de tiempos pretéritos. Pensar que Java o .NET(Google, StackOverflow, netflix) en este momento van a solucionar cualquier problema o que un lenguaje va a resolverlo en ambientes web es un error caro.
Específicamente para ambientes web es indispensable pensar en responsive, si se hace alguna solución sin tener en cuenta que la penetración de los smartphones, en menos de dos años va a ser necesario volver a hacer una inversión similar a la que se hace hoy.
Una solución web NO es un sistema manejador de contenidos, el publicar noticias o colocar páginas con contenido estático para organizaciones que quieran ofrecer a sus clientes valor agregado y disminuir costos de operación es algo accesorio. Ver un sitio web de una organización que no ofrece canales alternativos y disminuye costos operativos es pensar que un sitio web únicamente sirve como pancarta.
Por lo tanto, cuando se va a elegir una solución web es indispensable pensar en un framework que tenga como mínimo las siguientes características:
- Prevención contra los ciberataques más comunes.
- Un ORM.
- Disponibilidad de plugins o componentes de terceros.
- Que sea OpenSource.
- Que pueda desplegarse en diferentes sistemas operativos.
- Que pueda usarse diferentes motores de bases de datos.
- Que tenga soluciones de caché
- Que sea posible construir con facilidad servicios REST.
Ambiente de trabajo
Las necesidades de cada perfil y cada individuo que trabaja en un proyecto así como las del equipo generalmente son constantes, la capacidad de los miembros para comunicarse con celeridad cuando encuentran un problema es indispensable y las reuniones permiten que el avance y la sincronización sea la norma. El poder dar cuenta de los avances en períodos cortos de tiempo permite rectificar con mayor rapidez en caso de que el entendimiento del problema o la necesidad cambie.
Minimizar las interrupciones hace que el enfoque de la labor de ingeniería y la concentración disminuya la cantidad de errores por línea de código, el ambiente del creativo que en una noche puede generar interfaz de usuario es distinto al ambiente del ingeniero que requiere un tiempo fijo y que no puede disminuirse o acumularse para lograr alcanzar a desarrollar una solución.
El mantener un equipo que se conozca y que haya aprendido a equilibrar y a entender las fortalezas y debilidades de cada uno de sus integrantes es un factor clave para que el tiempo para la entrega no se elongue y la diferenciación entre quien debe hablar con los externos al equipo y los que deben mantener sus esfuerzos en el código es otra disposición que resulta en mayor productividad para un número más reducido de desarrolladores.
El entender que es diferente la velocidad de desarrollo al inicio del proyecto, a la mitad del proyecto y el momento en que entra a producción del mismo es fundamental para que las mediciones de productividad no generen expectativas optimistas o derrotistas para el gerente de proyectos que debe poder mantener la confianza del cliente para alcanzar las metas y los objetivos del proyecto digital.
Investigación y Desarrollo
Pretender mantener la misma tecnología por 10 años para un proyecto es aumentar el costo total de propiedad del producto y perder la capacidad para introducir mejoras y nuevas funcionalidades a un precio razonable en fracciones de tiempo menores, que resulta en dar espacio para que los competidores puedan desplegar con mayor rapidez las características que el producto necesita hoy y las cuales hace 10 años no eran siquiera imaginables.
Un producto que pueda mantenerse 10 años en el mercado al interior de la organización debe haber hecho una renovación de la tecnología por lo menos en ciclos de cada 3 años. Basta ver los ejemplos que nos trae día a día Facebook en donde comenzaron a usar php y mysql y al interior hicieron sus propios compiladores y desarrollos sobre las herramientas abiertas con las cuales pudieron dar inicio al negocio y continuidad.
Al interior de Facebook además de usar un lenguaje de programación para la lógica del negocio están en continua exploración a nivel de hardware para reducir el consumo de energía, a nivel de operaciones programan sistemas que son capaces de hacer despliegues en sus servidores de forma automatizada.
Metodologías ágiles
Pretender implantar metodologías ágiles usando herramientas lentas en el desarrollo es tratar de colocar toda la aerodinámica de un formula 1 a un motor con un hámster de fuerza.
A continuación una lista de chequeo para validar si cuentas en tu equipo herramientas que te permitan contar con agilidad:
- El proyecto cuenta con un repositorio.
- El proyecto tiene un servidor de integración continua.
- Los desarrolladores tienen definidas claramente las tareas a hacer.
- En el equipo el líder tienen conocimiento del alcance completo del proyecto.
- Todas las herramientas están disponibles para cada persona en su rol.
- El desarrollador tarda menos de 10 segundos en hacer saber al equipo en qué tarea está trabajando.
- El servidor de desarrollo de cada desarrollador dura menos de 2 segundos en lanzarse.
- El proceso entre escribir código y poder hacer una prueba manual dura menos de 5 segundos.
- Las pruebas para el módulo que se está desarrollando duran menos de 10 segundos.
- Las pruebas para el sistema completo duran menos de 1 minuto.
- El desarrollador no debe preocuparse por el despliegue.
- Hay una máquina de pruebas y otro de producción.
- El desarrollador cuenta con un ambiente local similar al de producción.
- El desarrollador al comenzar a trabajar en un proyecto tarda menos de 10 minutos en tener su equipo con el entorno de desarrollo disponible.
Si se pretende emplear una metodología ágil, lo fundamental será:
- Eliminar los bloqueantes para el equipo.
- Minimizar el ruido al interior del equipo.
- Garantizar que se mantiene la motivación del equipo.
- Disminuir el impacto de los cambios de requerimientos.
- Lograr facilitar la comunicación. Planear, ejecutar y evaluar. Un proceso iterativo.
De acuerdo a la madurez del proyecto o si se hace mantenimiento de un producto este checklist puede cambiar, veremos otra lista de chequeo más adelante.
Papelería y cambios de requerimientos
Si a un desarrollador que ame programar le preguntan: ¿Qué es lo que usted más odia en el trabajo? Las respuestas más habituales son: Llenar formatos que no aportan a mi trabajo; tener que dar soporte a los clientes; tener que programar con una herramienta mala; que mi computador sea lento; que me cambien de proyecto y no me dejen concentrar; que un día me pidan algo y al otro día cambien de opinión; que me pidan que me quede hasta tarde y que después no pueda recuperar mi tiempo; que mi trabajo nunca se despliegue.
Por lo tanto un director de proyectos o el líder encargado tendrá en sus manos la tarea de lograr que sus desarrolladores tengan los mínimos bloqueantes y puedan enfocarse en su trabajo. Además, hay otros estímulos que son importantes: escalas salariales, oportunidades de exposición en eventos como asistente o como expositor, hacer que ciertas librerías sean opensource.
Liberar a los desarrolladores de tareas operativas como hacer actas o hacer tablas de Gantt que se sabe de antemano no se van a lograr, son unas de las tareas que hay como ejemplo para eximirlos. Para ello, están los líderes de proyecto o directores, son el colchón entre el desarrollo y lo que el cliente solicita.
Producción
Finalmente es hora de desplegar, se hacen campañas publicitarias, anuncios en periódicos, televisión y todos los medios masivos para el despliegue de un sitio que atenderá decenas de miles de visitas en una hora. Como diría Rubén Vládez : "Y Luego la pregunta, ¿qué pasó?".
Dentro del presupuesto se debe dar espacio para los devops, esos unicornios que vuelan y que no son sencillos de encontrar, aquellos que usualmente en Colombia no están fijos en una empresa y que todo el tiempo hacen cosas maravillosas y que parecería que pueden dominar una tecnología en pocas horas, de estos hay muy pocos en el planeta; son los que pueden pasar derecho en esas noches en las que nadie más está dispuesto a lograr milagros, los que con una tarjeta de crédito en mano pueden hacer que el sitio se mantenga arriba y logran además tiempo después darse cuenta como hacer que los costos disminuyan aún más.
Planear balanceo de carga, hardware, contingencias, seguridad, copias, caché, estrategias de replicación con tecnologías que puedan hacer que la base de código pueda continuar avanzando; para encontrarlos hay que estar en círculos de desarrollo, leer, asistir a conferencias y lograr que puedan agendar parte de su vida para que se logre, probablemente con un presupuesto aceptable, la caridad de unos 8 días de su vida.
Un programador no necesariamente sabe cómo desplegar un proyecto, son dos habilidades distintas no disyuntas. Un buen programador seguramente se puede convertir en un muy buen sysadmin, se requiere creatividad y una alta capacidad de aprendizaje, pero para convertirse en un muy buen sysadmin se requiere experiencia y errores que serán en alguna medida perceptibles por algunos usuarios, la diferencia entre un muy buen sysadmin para mantener un sitio arriba puede ser de minutos a días (el tiempo en que el sistema estará sin funcionar).
Productos
Una vez que se ha llegado a una etapa de estabilidad en la cual los usuarios de los sistemas están usando la solución, llega la etapa en la cual aparecen los "Yaques": ya que esto hace esto, porque no que haga esto otro. Y por supuesto aprender a diferenciar cuáles son características nuevas frente a otras que son caballos de troya disfrazados de hermosos pegasos es una labor que tiene que manejar el dueño del producto para que el equipo de desarrollo pueda desplegar características de las cuales se sientan orgullosos.
La estructura de costos puede cambiar a lo largo del proyecto, los costos de mantener en producción frente al desarrollo y la evolución del producto puesto que se requiere mantener infraestructura, se va a continuar desarrollando el producto y adicionalmente se debe procurar comenzar a garantizar herramientas alternativas para mejorar los procesos ya existentes.
La respuesta a la pregunta es sí, si hay forma de ser más rápidos al desarrollar :). Todavía no hay límites.
Written by Igor Támara
A seasoned developer, Igor brings expertise in designing and building complex software systems. With a focus on quality and performance, they lead projects that drive innovation and deliver reliable solutions to meet user needs.