La experiencia y el conocimiento suman, pero tu actitud multiplica

Hace poco escuché una frase a un coach que me gustó mucho: la experiencia y el conocimiento suman, pero la actitud multiplica. Fijaros en la fórmula: (E+C)*A. Toda nuestra experiencia que vamos acumulando en cuanto a desarrollo software es vital, así como el conocimiento que vamos adquiriendo a base de la lectura y formación. Sin embargo, todo esto no sirve absolutamente de nada sin una actitud correcta y profesional. Una actitud de esfuerzo y búsqueda de la excelencia. Aún si tenemos poco conocimiento y poca experiencia, nuestra actitud nos llevará a buscar la manera de desarrollar todos esos skills que nos faltan.

actitud

Pero, ¿Qué ocurre si llevamos muchísimos años trabajando sin plantearnos si hay maneras mejores de hacerlo o simplemente sin ser autocríticos con nuestra forma de proceder? Este relato, está orientado a llevarte a la reflexión. Hoy en día, en España, “Scrum está de moda” y muchos adoptan la metodología pensando que es una cuestión principal consistente en leer un libro básico como por ejemplo Scrum y XP desde las trincheras (el cual no dejo de recomendar como iniciación) y seguir el procedimiento sin plantearse realmente de forma crítica si realmente tiene sentido lo que están haciendo, convirtiendo su día a día en rituales y referencias a una documentación que siento decirlo y a muchos les dolerá, pero resume tanto las cosas que puede llevar a la confusión en algunos casos si esta lectura no se complementa con otras (y os dejo aquí algunas sugerencias).

Naturalidad-infancia-Suavinex

A continuación os dejo un relato que escribí hace años. Este relato aunque está lleno de humor negro, no deja de presentar una realidad, al menos en España, que es la falta de profesionalidad. Empresas deciden adoptar una metodología (sea cual fuere, en el caso del relato Scrum, pero como veremos…podría ser cualquier otra) y eligen a personas para liderar el cambio organizacional que no están preparadas. Quizá han acumulado años de experiencia, pero su actitud no es precisamente la adecuada. Normalmente esto se produce por el contexto y falta de motivación. Usaba el nombre de Patrick B. tratando de buscar una relación entre este tipo de persona y la película American psycho. Os dejo con el relato.

american

A Patrick B. le tocó ser Scrum Master: momento y lugar inadecuados él decía sonriendo. En su empresa las cosas iban mal y los proyectos no terminaban del todo bien. Se dieron cuenta de que el 49% de los proyectos terminaban con un sobrecoste, el 27% no terminaban y se cancelaban y el resto estaba al borde de o acabar mal o cancelarse. Aunque había un pequeño número terminaban con éxito, cosa que nunca llegaron a entender. Algunos decían que era por la involucración de cliente en esos proyectos, otros decían que era suerte. A Patrick B. simplemente, no le importaban demasiado estos números.

Chuck Norris - Scrum master

Pero como iba diciendo, Patrick B. era Team Leader. Sumar, quitar y poner horas ya no tenía ningún misterio para él. Con su Gantt en la mano se sentía bastante seguro y “sus chicos”, como él los llamaba, estaban “a tope”. Si eso de la Zona de confort existiera, creo que la de Patrick B. era de látex con doble capa, con un televisor y con un par de pufs para apoyar sus cansadas piernas. Su vida era maravillosa, siempre cumplían los hitos, de una manera u otra. Tenía trucos que nadie conocía, como mandar la entrega en un CD rayado a cliente para tener cinco días más de desarrollo. Infalible.

scrum norris - gantt

Su empresa, una gran multinacional que poseía grandes, pesados y seguros procesos para todo. Tenía en el plan de desarrollo software un modelo en V descrito. La primera vez que escuchó de él, se imaginó que era algo novedoso, pero al parecer llevaba aplicado bastante tiempo. Lo leyó una vez y casi obligado. El caso es que fuera lo que fuera, parece ser que no funcionaba del todo y no tenían claro por qué. Patrick B. sabía que alguien había escrito el documento y lo había subido a control de configuración un tiempo atrás. ¿Qué más había que hacer para que funcionara?

ni idea de lo que hablas

Comenzó la moda en la que las grandes multinacionales con sus pesados, completos y e inexpugnables modelos en V y en cascada querían pasar a eso de las metodologías ágiles. Querían cambiar su filosofía, adaptarse al cambio. En algunas empresas, se contrata a un agile coach o especialista en metodologías de desarrollo. Patrick B. tenía un amigo que se dedicaba a eso y decía que es una gran trampa.  Muchas empresas normalmente no quieren cambiar su forma de trabajar y lo que quieren es que las nuevas formas de trabajar se adapten a ellos dando resultados positivos a corto plazo. Decía que contrataban a un agile coach y pensaban que sin ningún tipo de apoyo por parte de la dirección y mediante extraños rituales conseguirían llevar a cabo esos cambios tan deseados.

dilbert_ideas

Otras empresas contratan a un consultor externo. Pero Patrick B. decía que solían ser gente muy teórica que querían hacer cambios radicales. “Si quisiéramos hacer cambios radicales llamaríamos a Longueras”,  decía Patrick. “Estos devoradores de libros, están media hora y te cobran un ojo de la cara”. Alguien le contestó una vez que no le cobraba los 10 minutos de tiempo por resolver el problema, si no todo el tiempo que había invertido en aprender cómo resolver su problema en 10 minutos.

longueras

El caso es que a Patrick B., le cayó el tema agile y le tocó empaparse de todo esto de los “agiles”. Como Patrick B. era un tipo con recursos, lo primero que hizo fue teclear www.google.com  y buscar “agile V Model” y Eureka! Encontró una página que se titulaba “¿por qué Agile es mejor que V-Model?“. Le pareció curioso que estuviera la séptima y que hubiera antes páginas extrañas que hablaban de manuscritos, comunidades y trincheras. Patrick B. pensó que es lo mismo que cuando buscas cracks que te sale porno por todos sitios.

agile vmodel perturbado

Patrick B. vio un poco los dibujos y sintió que ya sabía de qué iba. Tras un análisis de 30 segundos llegó a la conclusión de que estaba muy bien desde el punto de vista teórico, pero en proyectos de verdad, de los que acaban con sobre-coste o se cancelan, esto no era aplicable… y menos en el suyo. Nunca le llegó a gustar eso del burndown chart: “eso de que la línea vaya hacia abajo y no hacia arriba, le resultaba extrañamente inquietantemente”.

sherlock2

Se  creó un backlog con las cosas que había que hacer, “historias de usuario” las llaman los agilistas. Debían tener una prioridad y un criterio de aceptación. Esto del scrum, es un marco de trabajo así que el bueno de Patrick B. decidió hacer su propia implementación adaptándolo a las necesidades de su proyecto. Decidió que iba a ser product owner y scrum master ya que estos roles se adaptaban más a lo que él conocía de antes. Dicen que son roles que no son compatibles por tener objetivos distintos, pero Patrick B. suponía que esta advertencia era como la fecha de caducidad de los yogures, es decir, opcional.

1241915072NEURAS

Empezaron con las reuniones diarias. Al principio las hacían de pié, pero a partir de los 45 minutos ya les dolía la espalda y decidieron hacerlas sentados. Cada uno contaba lo que había hecho el día anterior y lo que iba a hacer ese día. Dejaron de usar la pizarra porque tener que actualizarla era agotador y la verdad es que nadie la utilizaba. Al poco tiempo tampoco le encontraron mucho sentido a la reunión diaria, salvo para tomar el café de la mañana. Conocieron a mucha gente durante estas dailies ya que la gente se paraba para ver que hacían y algunos acabaron quedándose por hábito. Patrick B. conoció a su mujer en una daily.

batman

Las historias de usuario se mantenían tanto tiempo en la pizarra en progreso que tuvieron que designar responsables de historia de usuario para “ver si eso se movía un poco”. Patrick B. decidió ahondar un poco, mirando el las retrospectivas de los equipos de desarrollo. No solía echarles un vistazo porque opinaba que la gente al final acaba quejándose y no siendo constructiva. Hizo una lista con los últimos sprints pero no obtuvo respuesta ninguna a su problema. Decididamente pensó que la gente se quejaba por vicio. He aquí algunas de sus incoherentes quejas:

  • Los test unitarios tardan 3 horas en ejecutar.
  • Baja cobertura.
  • Rama de desarrollo inestable.
  • Cambios en mitad del sprint.
  • Demasiadas reuniones.
  • Si no nos hacen caso, que no nos pregunten, por favor.

shutterstock_39087388-A

Para favorecer la comunicación, Patrick B. decidió implantar reuniones diarias donde participaran algunos miembros del proyecto de distintos equipos. Eran unos 20 diariamente y trataban temas tan variopintos como el problema que había habido con tal módulo de desarrollo, problemas en testing, en especificaciones o los problemas de Pepe el chico de mantenimiento, que todos los días pasaba por allí hasta que al ver tanta gente reunida decidió tomarse el café de por la mañana con ellos.

tapon-reuters--644x362

Como Patrick B. siempre decía, “esto de las metodologías ágiles es sólo aplicable a entornos de laboratorio. En el mundo real, no funcionan.” No tenían ningún resultado positivo, el número de historias de usuario resueltas no bajaban. La motivación de los equipos estaba por los suelos y la calidad del código estaba deteriorándose cada día más. Patrick B. no paraba de repetir que no funcionaba en entornos reales porque se trataba de metodologías de plastilina.

El jefe de departamento contrató a un consultor Agile muy famoso que les dijo que tenían que partir las historias para reducir el cycle time, los sprints deberían ser del mismo tamaño para poder medir la velocidad del equipo y tenían que volver a hacer retrospectivas, dailies y planificaciones en los sprints. Patrick B. no entendía cómo podía todo eso arreglar su problema. No veía en que podía ayudarles nada de lo que ese famoso agile coach les decía. En las páginas web que había leído sobre agile no ponía absolutamente nada de “cycle time”, o de que los sprints tenían que tener el mismo tamaño. Patrick B. finalmente llegó a la conclusión de que este consultor al que él había admirado durante tanto tiempo se había vuelto tan teórico que ya no tenía los pies en la tierra: en alguna ocasión hasta le había visto intentar levitar.

Coach

En definitiva, Patrick B. se dio cuenta de que nada de esto funcionaba así que decidió volver a la metodología que tenía antes. Un maravilloso modelo en V, que aunque nunca les había dado buenos resultados, estaban acostumbrados a utilizar. Su modelo en V era algo particular y por eso Patrick B. había hecho algunos ajustes:

  • No hacían un análisis previo porque era una pérdida de tiempo ya que los requisitos cambian.
  • Preferían empezar el desarrollo antes de tener los requisitos. Ya que daban prioridad al software corriendo frente a documentación exhaustiva.
  • No creían en los test unitarios. O sólo en aquellas partes importantes…y si hubiera tiempo.
  • En cuanto a la verificación si tenían tiempo lo harían. Pero lo más seguro es que reservaran un mes de la planificación antes de la calificación con cliente para resolver bugs.

american ps

Así, Patrick B. volvió a la oscuridad de la que procedía sin haber aprendido absolutamente nada y con la extraña convicción de que ninguna metodología ágil podía aplicarse a proyectos de verdad y concretamente… al suyo propio.

autocritica

Como vemos en el relato, el problema no es la metodología, simplemente la actitud de las personas. Al final decide volver a lo mismo que tenían antes, pero deciden ajustarlo a su propia comodidad, rompiendo con todos los principios de V-Model, de forma que tampoco están haciendo un modelo en cascada, simplemente están haciendo otro tipo de rituales. Este relato aunque es inventado, las cosas que se cuentan son cosas que en algún momento, en algún equipo y en alguna empresa han ocurrido tal cual. Os invito a reflexionar, si realmente somos parte del ritual, o parte de la solución. La autocrítica, es el primer paso de la excelencia.

https://www.scrum.org/ScrumBut

PDFicono EXTENDIDO

La Integración continua: Netscape, la NASA, XP y dos mayordomos

En el artículo “La Integración Continua reduce el riesgo en proyectos software” comentábamos un poco el contenido del artículo de Martin Fowler que sacó en el 2005 sobre este mismo tema. En este artículo Fowler explicaba que la CI tenía un beneficio directo en los proyectos software reduciendo el riesgo, y  tuvo el efecto  añadido de  ayudar a que se difundiera con aún más fuerza.  Haciendo un guiño nostálgico a un anuncio del 2001 que decía “Si no sabes programar no sabes informática”, hoy en día “si no practicas la integración continua, no desarrollas software”. Volviéndome a ponerme nostálgico, ya lo decían en un anuncio de los 80: “la informática es mucho más que unas palabras”. Porque desarrollar software es mucho más que sentarse durante horas a escribir líneas de código.

programador3

Los que conozcan Extreme programming me dirán, “integración continua es una de las prácticas de XP”. Sí que lo es, es una de las 12 prácticas de XP, pero ¿cómo fue su evolución? y ¿a quién se le ocurrió por primera vez que debían hacerse integraciones automáticas lo más a menudo posible para reducir el riesgo en los proyectos? ¿Un día se levantó Kent Beck de la cama y dijo: “¡¡¡Eureka!!!”? y uno de los doce mandamientos será: integración continua. Nada más lejos de la realidad.

Os Dez Mandamentos 1

La CI fue propuesta y nombrada por primera vez en 1991 por Grady Booch en su método (Método Booch). En este caso Booch no hablaba en ningún caso de integrar varias veces al día. Grady Booch es conocido por desarrollar UML junto con James Rumbaugh. En 1991/94 desarrolló el método Booch. Se trataba de una técnica usada en ingeniería software para el diseño de objetos (predecesor de UML y RUP). Este método hablaba de uso de objetos, métricas, QA, patrones de diseño, formalismo, madurez de procesos y una notación robusta. Habla de sacar releases de arquitectura hasta llegar al sistema final (evolutivos)…si, es el precursor de RUP también, evidentemente.

image-83472-full

En los años 90 del siglo XX se producían dos temas importantes para el surgimiento de la integración continua. Uno fue que contrataron a Kent Beck (uno de los creadores de XP) en Chrysler con el objetivo de llevar un proyecto (El C3) de gestión de nominas, en el cual los requisitos eran un gran problema (¡¡¡no me lo esperaba!!!…). Parece ser que el sistema legacy de nóminas era bastante infumable (más de lo habitual supongo), se trataban de varias aplicaciones, cada uno de su padre y de su madre, que hacían lo mismo en algunos casos pero de forma diferente y donde los requisitos, como no, brillaban por su ausencia. El primer año que sacaron la primera release fue muy duro. Tan duro,  que  cliente, punto de contacto de Chrysler con el proyecto, tuvo que pedir la baja por estrés.

liberar-estress

Por otro lado, mientras se cocía la historia de Chrysler y XP, ocurre una historia paralela. Los ingenieros de calidad de Netscape, tuvieron una gran ocurrencia. Estos llegaron a la conclusión de que sería bueno poder realizar construcciones del código automáticamente de forma periódica. Tenían bastantes problemas con CVS (que acaba de surgir en los 90), ya que cada vez que iban a sacar una release, el código no compilaba correctamente: “en mi máquina funciona” decían los desarrolladores.

fz1t19.jpg

Se pusieron manos a la obra y crearon una herramienta muy sencilla llamada Tinderbox que les permitía realizar una construcción diaria de su software de forma que sabían en el mismo día si había habido un problema con la construcción del mismo (la build). En poco menos de un año, se dieron cuenta que bajando la cadencia de los builds, eran capaces de saber cuál había sido el problema de integración que había roto la build (a menos tiempo, menos commits realizados y más fácil detectar el problema de fallo). Progresivamente bajaron la cadencia hasta  realizar builds automáticos cada hora. Cuando en 1998 el código de Netscape es liberado, también es difundida su forma de trabajo a la comunidad de open-source. De esta manera la construcción frecuente de tu código de forma automática pronto se convirtió en una buena práctica en el mundillo del desarrollo software.

best-practices.jpg

XP lleva las mejores prácticas a niveles extremos. Por ejemplo la práctica de hacer test antes de desarrollar fue usada por la NASA en el programa Mercury Space por primera vez para tarjetas perforadas en 1960. XP la llevo al extremo con TDD. Aunque Kent beck no se considera a sí mismo el creador de Test Driven Development, fue el que implemento SUnit, un framework de tests unitarios para Smalltalk que fueron las bases de la familia xUnit (conjunto de frameworks basados en sus premisas como nUnit, phpUnit, junit, MsUnit, etc). Este framework se pensó para realizar TDD basándose en ideas de Gerard Weinberg y Leeds, Herbert D. en su libro (Computer Programming Fundamentals – 1960). Sí, he de afirmar que es curioso que en la portada original Weingberg no aparezca. Pero eso es otra historia.

51+GmuMoPYL._SX331_BO1,204,203,200_

Otra de las prácticas que se lleva al extremo es la integración continua. Kent Beck tomó la idea de Booch, las nuevas buenas prácticas de los build automáticos con las ideas de los servidores de builds automáticos emergentes y la inclusión del framework de test automáticos que había creado para dar forma a una de las prácticas de XP: Si aquellos tipos de Netscape podrían hacer construcciones del código cada hora, ¿por qué no íbamos a poder hacerlos en cada commit y además pasar automáticamente baterías de test automáticamente con sUnit? En 1999 Kent beck publica el primer libro sobre XP donde incluye el concepto como una de sus 12 prácticas.

circles.jpg

La integración continua ha ido evolucionando a medida de que han ido apareciendo nuevas tecnologías y herramientas. Si tenemos que pensar en cual fue la primera herramienta construida para este propósito, podemos pensar que fue Cruise Control que surgió en el 2001 como servidor de builds extensible. Esta herramienta estaba pensada para realizar builds automáticos usando Ant o Maven. Funcionaba (y funciona) a través de plugins que extendían su funcionalidad. Se trata de una herramienta gratuita y open-source.  Existe una herramienta para .NET similar denominada Cruisecontrol.NET que aparece en el 2003 con su versión 0.3.1 pero no es hasta 2005 que aparece la primera versión 1.0 estable. Es decir, que la integración continua basada en herramientas específicas (no el concepto como tal), tampoco es tan lejano. Fue cuando se estrenó “Batman begins”.

Batman-Begins-batman-555782_1024_768.jpg

Hudson es otra herramienta de integración continua escrita en Java que se ejecuta en un Apache Tomcat o en el servidor de aplicaciones GlassFish. Trabaja con CVS, Svn, Git y clearcase, y puede ejecutar Apache Ant y Maven así como procesos Windows. Hudson surgió en 2008 y se convirtió en una alternativa a Cruise control y otros servidores de builds de código abierto.  El desarrollador principal de Hudson fue Kohsuke Kawaguchi que actualmente es empleado de Sun Microsystems. Si dejas a un montón de desarrolladores software el código de una herramienta como esta, pasa lo que pasa: crean una comunidad y la llevan “hasta el infinito y más allá”.

kohsuke.jpg

Cuando más adelante Oracle compró Sun, este declaró que quería registrar el nombre de Hudson y desarrollar una versión comercial. Esto enfadó mucho a la comunidad de desarrollo de Hudson, la cual decidió, junto con Kawaguchi hacer un fork del código de Hudson y llamarlo Jenkins en 2011 (ambos son nombres típicos de mayordomos). Al final Oracle se da por vencido y en 2012 dona Hudson a la fundación Eclipse. En 2013 llevan muchos commits de Jenkins a Hudson. Lo que decía yo… “hasta el infinito y más allá”.

jenkins vs Hudson java

El caso es que los conceptos han cambiado poco desde final del siglo XX, ya que siguen siendo prácticamente los mismos. Si han aparecido nuevos, es porque han aparecido herramientas que ahora lo permiten y anteriormente no, o no con la misma facilidad. De la integración continúa se pasa a la entrega continua y de ahí al despliegue automático en producción. Hoy en día existen muchas herramientas y plugins desarrollados que están trayendo nuevos conceptos y capacidades de automatización, o quizá ya no tan nuevos en el momento de publicación de este post. Algunas organizaciones, hoy en día, son lo suficientemente maduras para automatizar tanto el desarrollo software y las pruebas, que con cada commit despliegan directamente en los servidores de producción  con seguridad (pocas son) (continuous deployment). Pero eso amigos, eso, es otra historia.

continuos deployment vs delivery.jpg

PDFicono EXTENDIDO

REFERENCIAS:

[1] Continuous Integration – Martin Fowler
[2] Continuous delivery  – Martin Fowler
[3] Extreme Programing Explanined:Embrace change – Kent Beck