El amor, la masa rocosa

El corazón ágil y el manifiesto ágil. Siempre he pensado que las cosas simples son las mejores de implementar, permiten avanzar y aprender. Y tal vez el manifiesto ágil no es tan claro y fácil de entender. Además muy a menudo las metodologías, técnicas y frameworks complican las cosas, o simplemente uno como estudiante de ellas pierde el enfoque principal.

La base del manifiesto ágil son principios humanos, los cuales funcionan como la masa rocosa en la que se edifica el castillo de la agilidad.

Para cualquier aprendizaje es necesario tener un base sólida, una esencia. La masa rocosa en la que se pueda edificar un castillo. No la masa de arena en la que se construya una casa y a la primera llovizna se derrumbe.

Y te preguntarás, ¿Cuál es mi masa rocosa, fuerte, sólida, 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 algunos entornos laborales, tu masa rocosa es el amor. El cual tiene una relación muy estrecha con el manifiesto ágil.

Si, ya sé lo que estás pensando, que soy demasiado cursi, pero piensa por un instante. Cuando amas lo que haces, con gusto estás dispuesto a hacer las cosas lo mejor posible. A colaborar con tus compañeros para resolver problemas y no dudas en ayudar en cualquier problema que se les presente.

Justicia, respeto y honestidad

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. Serás transparente y honesto con el cliente, usuarios y toda persona relacionada con el producto y tu organización, siempre pensando en un beneficio mutuo.

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, género, 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

No todo es color de rosa, por supuesto que habrá muchas inconformidades y conflictos. Aun así, estos tres principios te ayudaran a resolver esas inconformidades y conflictos buscando un equilibrio y el beneficio mutuo.

Este equilibrio y beneficio mutuo claro que puede romper relaciones laborales en el caso de que sea necesario. Una ruptura en que las partes involucradas acuerdan que es lo mejor para todos, con una planificación adecuada y justa.

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.

La masa rocosa y el Manifiesto Ágil

De hecho el manifiesto ágil, si lo analizamos, se puede decir que está basado en estos tres principios fundamentales. Usando la analogía de construcción de un castillo. Primero tenemos una masa rocosa, luego arriba de esta existen los pilares fuertes que forman la estructura del castillo, estos pilares son el manifiesto ágil.

Un ejemplo grandísimo sobre estos principios humanos y donde se refleja su influencia, está en lista de los valores de scrum y extreme programming, todos los valores están relacionados con estos tres principios, incluso el de respeto destaca con una relación muy directa.

ScrumExtreme programming
Coraje
Enfoque
Compromiso
Respeto
Apertura
Simplicidad
Comunicación
Retroalimentación
Coraje
Respeto
Valores

¿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.

https://agilemanifesto.org/

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 vuelve a lo que es realmente importante, a no complicarse las cosas. De hecho actualmente existen dos nuevos conceptos que toman este concepto de simplificar la agilidad.

El enfoque de esta publicación es un paso aún más adentro, a la raíz de las relaciones interpersonales. Para utilizar esa masa rocosa y edificar fuertes prácticas ágiles. Esto lo vamos a reflejar en cada uno de los puntos del manifiesto ágil.

Entonces, a continuación voy a explicar desde mi punto de vista lo que los autores nos quieren comunicar y como se relaciona con la masa rocosa que ya hemos planteado.

Individuos e interacciones sobre procesos y herramientas.

Individuos e interacciones
Individuos e interacciones

Primero los individuos que crean empresas y generan calidad

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 determinarán 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. Sin mencionar que los clientes y usuarios también son personas.

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 prácticas 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

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 y trata 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.

El líder termina cosechando lo que siembra, piezas reemplazables sumamente lineales que no ayudan a la productividad, o al menos no se desempeñan con su máximo potencial. Esto provoca perdidas de tiempo, esfuerzo y dinero a las organizaciones.

Otra forma más fuerte de perder recursos en las organizaciones, es si el individuo decide irse de su equipo. Imagínense el tiempo en conseguir y capacitar al reemplazo, mientras el reemplazo está listo, el esfuerzo necesario de los demás personas del equipo aumenta porque al inicio es como no tener al compañero que se fue.

Gastos por renuncia de un integrante del equipo

Además estas mismas personas del equipo actual, seguro deben contribuir invirtiendo tiempo 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 autoorganizan para ser mucho más productivos.

Las organizaciones que se encomiendan a formar equipos de este tipo, obtienen 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 honestos con ellas, se puede lograr 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.

La mejor documentación son las personas y el código

¿Cómo se entrena un nuevo integrante?, o ¿Cómo una persona recuerda lo que hizo hace un día, una semana o hace un año?, o ¿Cómo otro integrante del equipo utiliza un componente, un módulo, una clase o una función sin perder todo un día tratando de comprender?

La mejor documentación e instrucciones de como funciona una 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 prácticas ágiles como BDD y TDD para que cualquier integrante lo pueda entender, aumentar nuevas funcionalidades y modificar existentes con gran facilidad.

Incluso para que la misma persona o personas que lo crearon puedan recordar cada detalle minúsculo. 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.

Si existe documentación

No es que no exista documentación, pero se puede posponer, o ser poca y enfocado en las cosas que no cambiaran mucho. En etapas tempranas del desarrollo sería una pérdida de tiempo documentar algo que tendrá constantes cambios y mejoras. El momento ideal para una documentación es cuando se escriben las especificaciones con BDD y TDD. El segundo momento ideal es cuando se tiene una versión estable.

¿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 práctica, ayudandose mutuamente a resolver sus dudas, sus problemas.

Por dar ejemplo. Se puede aplicar pair programming, trabajar para lograr la 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 ¿Qué 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.

Siempre existirá incertidumbre

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.

Buscar beneficio mutuo, lo primero son las personas

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 punto del manifiesto tiene mucha relación con el primero, hasta me atrevería a decir, que este 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.

12 principios ágiles

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.

¿Qué es un software con valor?

Todos los principios anteriores giran alrededor de la construcción de un software de valor, pero, ¿Qué 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. Déjame 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.

El software debe ser flexible

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.

Lo anterior tiene una razón, 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 estamos perdiendo valor. 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.

Conclusión

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 todos los involucrados para entregar 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 y el recurso económico de todos.

Estos principios humanos de honestidad, respeto y justicia, rigen el manifiesto ágil, es tan importante que dos de sus puntos tiene una relación directa. Hablamos de:

  • Individuos e interacciones sobre procesos y herramientas
  • Colaboración con el cliente sobre negociación contractual

Los otros dos aunque no tienen una relación directa, sí que indirectamente todo lo que hacemos se trata sobre las personas y las relaciones que tenemos con ellas.

es_MXES_MX