El corazón ágil, manifiesto

El corazón

El desarrollo Ágil se ha vuelto demasiado decorado. Desechemos esas decoraciones por un minuto y regresemos al corazón ágil.

Dr. Alistair Cockburn, uno de los autores del manifiesto ágil

Me gusta mucho esta frase del Dr. Alistar Cockburn, porque muy a menudo las metodologías, técnicas y frameworks complican las cosas, o simplemente uno como estudiante de ellas pierde el enfoque principal, pero para cualquier aprendizaje es necesario tener un base solida, una esencia, la masa rocosa en la que se pueda edificar un castillo y no la masa de arena en la que se construya una casita y a la primera llovizna se derrumbe.

Y te preguntaras, ¿Cuál es mi masa rocosa, fuerte, solida, que me hará conseguir lo que quiera? como por ejemplo un producto exitoso y la felicidad de mis compañeros o empleados. Es muy sencillo, necesitamos mantener las cosas simples (principio ágil), y tu masa rocosa son los principios humanos universales, estos principios nacen de algo lamentablemente despreciado en entornos laborales, tu masa rocosa es el amor.

Si, ya sé lo que estas pensando, que soy demasiado cursi, pero piensa por un instante, si amas lo que haces, con gusto estarás dispuesto crear las cosas lo mejor posible, a colaborar con tus compañeros para resolver problemas de la manera más ágil posible, no dudaras en ayudar a tus compañeros en cualquier problema que se les presente. Si tienes amor en tu corazón, respetaras a los demás, respetaras su valioso tiempo, su individualidad, pensaras en ser justo, trataras de ponerte en los zapatos de ellos y entenderlos, esto aumentara la comunicación y por ende la colaboración para lograr objetivos compartidos. Seras transparente y honesto con el cliente, usuarios y toda persona relacionada con el producto y tu organización, siempre pensando en el bienestar de todos.

Del amor surge tres principios universales, justicia, respeto y honestidad, principios que arraigados en un equipo permitirá la creación de productos brillantemente mágicos, de enorme satisfacción para todos los desarrolladores, usuarios, clientes, socios e inversionistas. Principios que se vuelven valores y cultura en pequeñas y grandes empresas, locales e internacionales, con personas de cualquier nacionalidad, raza, creencia religiosa, color, genero, etcétera, etcétera.

Estos principios universales humanos, justicia, respeto y honestidad, son la masa rocosa para poder crear cualquier tipo de producto utilizando agilidad. No todo es color de rosa, por supuesto que habrá inconformidades y debates, pero esos tres principios te ayudaran a resolver esas inconformidades y debates de forma que todos ganen, buscando un equilibrio. No te preocupes, si lo piensas no es más que sentido común, si ayudas a alguien con su problema, seguro que le dará ánimos de ayudarte con los tuyos. Y esto genera un ciclo infinito de buenas intenciones entre todos los integrantes de un equipo y de toda una organización.

De hecho el manifiesto ágil está basado en estos tres principios fundamentales, siguiendo la analogía de construcción de un castillo, arriba de la masa rocosa existen los pilares fuertes que forman la estructura del castillo, estos pilares son el manifiesto ágil.

¿Qué es ágil?

La capacidad de crear y responder al cambio con el fin de tener éxito en un ambiente incierto y turbulento

agileallieance.org

Manifiesto Ágil

Estamos descubriendo mejores formas de desarrollar software haciéndolo y ayudando a otras personas a hacerlo. A través de este trabajo hemos llegado a valorar:

Individuos e interacciones sobre procesos y herramientas.

Software funcionando sobre documentación extensiva.

Colaboración con el cliente sobre negociación contractual.

Respuesta ante el cambio sobre seguir un plan

Es decir, aunque valoramos los elementos de la derecha, valoramos más los elementos de la izquierda.

A continuación voy a explicar desde mi punto de vista lo que los autores nos quieren comunicar.

Individuos e interacciones sobre procesos y herramientas.

Individuos e interacciones
Individuos e interacciones

Todos somos personas y seres humanos, por lo que las personas es el factor más importante para el éxito de cualquier proyecto. La comunicación efectiva, la motivación y principios compartidos para lograr un objetivo superior determinaran la calidad del producto final.

Ok, ok, ¿Por qué es muy, muy importante un individuo? Pues porque son las personas las que crean el producto o software, y son estas mismas las que forman a las empresas.

Como dijo Alistair Cockburn, uno de los creadores de este manifiesto ágil:

El proceso y la tecnología son un efecto de segundo orden en el resultado de un proyecto. El efecto de primer orden son las personas.

Alistair Cockburn

Los procesos, patrones de diseño, patrones de trabajo y las practicas de desarrollo de software y desarrollo ágil son importantes, pero son las personas las que harán que funcionen.

Las personas no son piezas reemplazables

Kent Beck

Las personas no son como piezas de un software o proceso, no son piezas reemplazables en una organización, un individuo no es algo lineal, es muy complejo y existen muchas variables que determinan su comportamiento, su desempeño, su moral y por consiguiente su productividad.

Si un líder ve a su equipo como piezas reemplazables sumamente lineales, y no trata de ver a su equipo como individuos, esto baja la moral (productividad). Las personas buenas siempre buscan un mejor lugar donde estar y el líder termina consiguiendo lo que estuvo pensando y actuando con su equipo, piezas reemplazables sumamente lineales que no ayudan a la productividad de un equipo, o al menos no se desempeñan con su máximo potencial, o su productividad es muy baja. Esto provoca perdidas de tiempo, esfuerzo y dinero a las organizaciones, tiempo en conseguir y capacitar al reemplazo, mientras el reemplazo esta listo, el esfuerzo necesario de los demás personas del equipo aumenta, además estas mismas seguro deben contribuir en la capacitación del reemplazo. Existe un gran retraso y desembolso económico a causa de la renuncia de una persona.

Un proyecto exitoso se logra con un equipo satisfecho, contento y dispuesto a colaborar entre ellos para lograr un objetivo en común y superior, los cuales se auto organizan para ser mucho más productivos. Las organizaciones que se encomiendan a formar equipos de este tipo, obtiene una enorme ventaja competitiva sobre aquellas que tratan a las personas como simples piezas lineales que forman parte de un proceso.

Al tratar a las personas como lo que son, con justicia, con respeto, y siendo honesto con ellas, se logra lo imposible.

Software funcionando sobre documentación extensiva

Software funcionando
Software funcionando

Para tener una documentación detallada es necesario mucho tiempo y esfuerzo porque la documentación siempre cambia conforme se le agregan nuevas funcionalidades o se modifican las ya existentes. Entonces ese tiempo y esfuerzo mejor se invierte en obtener software funcionando que puede ser presentado al cliente y obtener retroalimentación. Es muy difícil mantener sincronizada la documentación con el verdadero funcionamiento (con el código), con el tiempo la documentación miente sobre la funcionalidad, la única fuente de verdad es el código, el código no miente.

¿Entonces como se entrena un nuevo integrante? o ¿Como una persona recuerda lo que hizo hace un día, una semana o hace un año? o ¿Como otro integrante del equipo utiliza un componente, un modulo, una clase o una función sin perder todo un día tratando de comprender? La mejor documentación e instrucciones de como funciona un pieza del sistema se encuentran en las personas y el código que ellas crean, es de valor inigualable poner énfasis en la excelencia técnica y al buen diseño para mejorar la agilidad, es decir, código limpio, bien diseñado y utilizando TDD(Test-Driven development) para que cualquier integrante lo pueda entender y aumentar nuevas funcionalidades y modificar existentes con gran facilidad. Incluso para que la misma persona o personas que lo crearon puedan recordar los detalles más minúsculos que te puedas imaginar. De hecho a veces no necesitas llegar al detalle, simplemente utilizas la pieza del sistema con seguridad del resultado debido al buen diseño y a la calidad de la misma, lo que por supuesto te ahorra muchísimo tiempo. Claro que esto no se puede lograr sin las personas, sin su disciplina y auto organización.

No es que no exista documentación, pero esa documentación debe ser poca y enfocado en las cosas que no cambiaran mucho, por ejemplo en la estructura y arquitectura del producto o software. ¿Entonces como logramos que nuevos miembros del equipo entiendan los detalles del producto o software? Ya habíamos establecido la respuesta, se logra gracias a las personas y el código que ellas crean, porque se trabaja muy de cerca con cada individuo del equipo, transfiriendo el conocimiento de manera practica, ayudándolos a resolver sus dudas, sus problemas, por dar ejemplo, utilizando pair programming, dándoles confianza de que son parte del equipo y pueden comunicarse con toda honestidad. Si en el peor de los casos un miembro del equipo se va, mínimo el conocimiento se transfirió a todos los demás integrantes de manera empírica y rápida, estos integrantes seguirán transfiriendo el conocimiento a las personas nuevas.

¿Y que pasa si todos los integrantes del equipo se van? Bueno aquí tenemos un problema más grande, porque entonces no se están aplicando los principios humanos de justicia, respeto y honestidad, y no se está aplicando el primer punto del manifiesto ágil, individuos e interacciones sobre procesos y herramientas.

Colaboración con el cliente sobre negociación contractual

Colaboración con el cliente
Colaboración con el cliente

Es muy importante involucrar al cliente en todo el ciclo del desarrollo de tal manera que los requisitos se recolecten progresivamente, evolucionen y se adapten según la retroalimentación del usuario final y de los demás involucrados. Diferentes puntos de vista y perspectivas mejoran la cálida del producto en cada iteración.

Aquí tenemos una oportunidad muy importante de poner en práctica los tres principios universales humanos en relación con el cliente, necesitamos ser justos, respetuosos y honestos en todas y cada una de las interacciones con el cliente y su negocio.

No se recomienda crear contratos detallados que especifiquen lo que el software va a hacer, lo que se va a cobrar por ello, y un calendario de entregas. Eso es demasiado fijo y nunca, nunca se cumplen las expectativas porque un desarrollo ágil se adecúa a los ambientes inciertos y turbulentos implícitos dentro de la creación de software, por mucho que se sepa del negocio y de la tecnología, siempre habrá una variable desconocida de la cual se debe aprender. Esta variable desconocida hará cambiar todo lo detalladamente planeado con anticipación.

Un contrato fijo nunca va a funcionar, debe ser algo flexible que se adapta conforme a los usuarios cambian y necesitan, debido a esto un contrato que indique los requerimientos fijos, sin intervención del cliente y usuarios, es seguro que será un fracaso.

Más sin embargo tener un acuerdo con el cliente donde se establezcan lineamientos buscando el beneficio mutuo, indicando por ejemplo que los pagos se estarán haciendo conforme a lo que se vaya entregando, donde se acuerde que el cliente estará involucrado todo el tiempo en el desarrollo para que apruebe las funcionalidades en cada iteración, esto es algo mucho más justo y honesto, respetando el tiempo y el dinero del cliente, así como sus sueños.

Este valor del manifiesto tiene mucha relación con el primero, hasta me atrevería a decir, que este valor es una subrama del primero, porque los clientes son individuos y entre más nos preocupemos por las interacciones con ellos, más rápido entregaremos un producto de valor, que indudablemente mejorara las actividades que benefician al cliente, al equipo que desarrolla el producto, y en general todos los involucrados

Respuesta ante el cambio sobre seguir un plan

El producto final siempre tiene una relación estrecha con el ambiente real y con personas (usuarios finales, desarrolladores y demás), todo a nuestro alrededor y las personas se encuentran en constante cambio, es imposible seguir un plan y que funcione completamente, pero si es ágil y efectivo tener la capacidad de responder al cambio dentro de un ambiente de incertidumbre.

No puedes planificar a detalle todo lo que se va a realizar en el proceso de la creación de un producto, tampoco es que no se hagan planes, si se hacen, pero con el conocimiento que seguro cambiaran en algún momento, muchas técnicas ágiles recomiendan hacer planificaciones muy detalladas en plazos cortos de tiempo, un poco de detalle a plazos medianos y muy, pero muy poco detalle para plazos largos. Aun así todo es incierto y debido a esta incertidumbre es que se debe de generar la capacidad de responder a cualquier cambio, esta capacidad la debe tener tanto el producto como las personas que lo crean.

Todos los integrantes del proyecto deben tener la suficiente flexibilidad para adaptarse a las necesidades que surjan en el ambiente, esto incluye la comunicación, la manera de trabajar y hasta las habilidades que estén dispuestos a aprender, en frameworks como scrum le llaman equipos multidisciplinarios.

En cuanto al producto, bueno, utilizare un ejemplo del área de software donde tengo más conocimientos. Aunque no voy a explicar los 12 principios del movimiento ágil, este último punto del manifiesto, comparte una estrecha relación con los siguientes principios, y realmente son ejemplos que nos permiten responder al cambio:

La mayor prioridad es satisfacer al cliente con la entrega temprana y continua de software con valor.

Aceptamos que los requisitos cambien, incluso en etapas tardías del desarrollo. Los procesos ágiles aprovechan el cambio para proporcionar ventaja competitiva al cliente.

Los procesos ágiles promueven el desarrollo sostenido. Los promotores, desarrolladores y usuarios debemos mantener un ritmo constante de forma indefinida.

La atención continua a la excelencia técnica y al buen diseño mejora la agilidad.

La simplicidad, o el arte de maximizar la cantidad de trabajo no realizado, es esencial.

Las mejores arquitecturas, requisitos y diseños emergen de equipos auto-organizados.

Todos los principios anteriores giran alrededor de la construcción de un software de valor, pero, ¿Que es un software con valor? ¿Será un software que funcione? Bueno, creo que sí, al menos en parte, pero el software o cualquier tipo de sistema tiene dos tipos de valores, por desgracia muy a menudo le ponemos más atención al tipo que es secundario y que realmente surge del valor principal. Dejame explicártelo más a detalle en los siguientes párrafos.

Normalmente un sistema tiene valor si funciona y resuelve un determinado problema para los usuarios y clientes, ¿En verdad es este valor lo más importante? Yo no lo creo y menos en los ambientes cambiantes e inciertos para lo que estos productos se crean, la primera solución, la primera versión de un sistema por supuesto que resuelve algo, pero no a la perfección, y no ser perfecto esta bien, los desarrollos ágiles son iterativos e incrementales, aprendiendo y satisfaciendo las necesidades de los usuarios y clientes en paralelo y progresivamente. Además las piezas o componentes de un producto también van mejorando y también se lleva un control de sus versiones.

Los clientes realmente no saben exactamente como debe ser su producto, tienen idea, eso es claro, pero conforme van probando su producto y obteniendo retroalimentación van modificando sus ideas y hasta puede que la idea de un producto de un giro de 360 grados, esto es porque no se sabe el verdadero valor de un producto hasta probarlo con usuarios, además la gente cambia, la sociedad cambia, así es, repito, el mundo es un ambiente incierto y turbulento al que debemos ser capaces de adaptarnos.

A lo que quiero llegar es que un software debe ser lo suficientemente flexible, lo suficientemente sustentable para poder adaptarse al cambio con gran facilidad. El valor primordial de un software es que en cualquier momento pueda adaptarse a las necesidades de los usuarios, y con esto viene en segunda posición que funcione, porque aunque la función tenga valor para los clientes y usuarios, si es muy difícil adaptar el producto a las nuevas necesidades del ambiente o peor aún, adaptar el producto a las funcionalidades que ya se tenían pensadas, entonces ya no estamos desarrollando ágil. Un software con valor debe tener la capacidad de agregar y cambiar funcionalidades a una velocidad sustentable, sin retrasos y de lo más fácil posible, esto es de enorme valor para nuestros clientes y usuarios finales.

Si dejamos a los clientes sin nuevas actualizaciones por mucho tiempo, entonces ya deja de tener valor y los usuarios dejan de usar el producto, porque las nuevas necesidades precisamente son otras diferentes a las que actualmente el software proporciona. Sin mencionar el caso de que el producto tenga demasiados fallos y entonces estos fallos provoquen dificultad al cambio.

Para que la adaptabilidad fluya en un equipo debemos estar conscientes de que habrá muchos cambios y amar la incertidumbre, pues es como de verdad se aprende de lo que es prioritario o necesario hacer. A aceptar los fallos tempranamente con honestidad, respeto y justicia hacia los clientes para entregarles continuamente un producto profesional, que evoluciona y mejora con el tiempo, nunca se estanca y nunca pone en peligro su negoció. Se aprovecha al máximo los recursos, respetando el tiempo de todos y el recurso económico de nuestros clientes y usuarios.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This site uses Akismet to reduce spam. Learn how your comment data is processed.