El ABC de la creación de una academia

Codurance ha desarrollado el concepto de Academy como medio de formación de ingenieros de software para ayudarles en el camino hacia la maestría. Mashooq Badar, Software Craftsman y cofundador de Codurance, subraya que los alumnos deben aprender a aprender, que el aprendizaje en sí es una habilidad. La motivación no es suficiente. Se necesita una actitud abierta y prácticas adaptadas a lo que se quiere aprender. Badar amplía las ideas desarrolladas por Robert Green en su libro Mastery (Maestría), destacando la importancia que tiene para el alumno alimentar su curiosidad y crear buenos hábitos de aprendizaje.

¿Qué es un Academy program?

En la academia de Codurance, los desarrolladores, normalmente con un mínimo de dos o tres años de experiencia, atraviesan un riguroso programa de formación centrado en la codificación, las habilidades del desarrollo empresarial y web, y el desarrollo de proyectos autónomos. Los aprendices construyen un producto de software empresarial que será utilizado por Codurance. En el pasado, estos productos de software internos han incluido una aplicación para organizar los eventos del Open Space de Codurance, una aplicación para tutorías y una aplicación para evaluar los aspectos positivos o negativos del trabajo del equipo durante la semana. Si quieres adoptar un modelo de formación de este tipo, no dudes en ponerte en contacto con nosotros para que te asesoremos sobre cómo puede adaptarse a tus necesidades.

El programa no sólo aborda la codificación y el diseño del código, sino también un conjunto de habilidades para crear un buen software. Los alumnos de Codurance practican la resolución de problemas de codificación seleccionados (katas) en parejas y luego aprenden del trabajo de los demás. Kata es un término derivado de las artes marciales que significa un patrón de movimiento específico y detallado hecho para ser practicado solo, y también dentro de grupos cuando se entrena. Algunas de las katas de codificación asignadas tienen que ver con patrones comunes de ordenación, estructuras de datos y aplicación de algoritmos sencillos. El objetivo final, sin embargo, es practicar el Test Driven Development y las buenas habilidades de diseño de software.

Los alumnos se embarcan en miniproyectos diseñados para dar a conocer los patrones y la estructura de un buen proyecto de desarrollo de software. También se les presenta el código defectuoso que necesita refactorización. Trabajando en parejas, exploran las ideas del Test Driven Development haciendo hincapié en la mejora continua. Amplían sus conocimientos para incorporar la arquitectura dirigida por eventos y el Domain Driven Design. Adquieren una comprensión de la organización del código para representar el dominio del negocio. Los alumnos también exploran las habilidades más amplias del desarrollo web, como el diseño de bases de datos, las redes, la gestión de procesos Agile, la ingeniería de fiabilidad del sitio y las pruebas. También llevan a cabo un proyecto desde su inicio hasta su finalización.

¿Por qué tener una Academy?

Como diría Andy Hunt:

El software... se imagina y se crea en nuestra mente.

Hunt, A. Pragmatic Thinking and Learning

De ello se deduce que los programadores deben ser capaces de comunicarse, pensar y aprender. Los métodos Agile hacen hincapié en una comunicación más profunda entre los miembros del equipo y entre los desarrolladores de software y el usuario final. Instaurar una academia en su organización permitiría a la empresa establecer claramente las expectativas de excelencia de los desarrolladores y permitiría a los miembros del equipo junior obtener una clara comprensión de cómo alcanzar sus objetivos de éxito dentro de la profesión. A través de un programa interno se pueden aprender buenos principios de trabajo en un entorno empresarial seguro (no de producción) para ayudar a los desarrolladores en su camino de novatos a expertos.

En el pasado, los usuarios de las empresas esperaban utilizar programas estándar como procesadores de texto, hojas de cálculo y bases de datos. Hoy en día, sin embargo, muchas instituciones necesitan un software a medida que se revise continuamente y pueda adaptarse a sus necesidades cambiantes. El rápido ritmo de los cambios puede resultar desconcertante para los desarrolladores de nivel medio y una academia puede constituir un recurso ideal para renovar la mentalidad de los desarrolladores y comunicarles las mejores prácticas.

Mientras que antes había una gama limitada de lenguajes como C, C++, Pascal, Fortran y Cobol, ahora se han escrito multitud de lenguajes diferentes para resolver una gama cada vez mayor de problemas sociales, empresariales, comerciales y científicos. Esta riqueza se refleja en la producción de literatura técnica: manuales, textos explicativos y libros de instrucciones. Una academia permitirá que los nuevos empleados se comprometan con las cuestiones más amplias del desarrollo de software y aborden los problemas comunes de la empresa con una heurística bien pensada.

Empresas gigantes como Amazon, Google y Microsoft ofrecen ahora plataformas en la nube para la computación, el almacenamiento y la creación de redes a diferentes niveles de abstracción. Estos servicios pueden alojar sitios web, ejecutar aplicaciones empresariales y extraer enormes cantidades de datos pagando por uso. Los rápidos cambios en los requisitos y la creciente sofisticación de los programas y servicios exigen una fuerza de trabajo capaz de mantener el ritmo. Los proyectos realizados en la Academia permiten a los empleados involucrarse con DevOps en oportunidades de aprendizaje empresarial contextualizadas y seguras.

La puesta en común de los conocimientos, la entrega y la responsabilidad compartida son los tres pilares del espíritu de una academia. Aquí es donde un sistema de academia y su ética de software pueden marcar una verdadera diferencia. Inevitablemente, los sistemas parciales y ad hoc se encuentran a menudo incluso en las empresas mejor gestionadas. El modelo de la academia aporta un método sistemático para tratar la multitud de problemas a los que se enfrentan los Directores de Tecnología.

La puesta en común de conocimientos tiene muchas facetas en un entorno de programación. El trabajo en equipo debe ser estructurado. El desarrollador de software solitario que se adelanta a sus colegas no hace más que acumular problemas. Incluso los sistemas de software aparentemente elementales y listos para la producción pueden contener una complejidad oculta. La adaptación y transformación de este tipo de software está llena de peligros porque estos aspectos ocultos pueden manifestarse de repente. Se trata de un problema especialmente difícil cuando el software presta un servicio continuo.

Para responder a estos retos, la academia de Codurance da mucha importancia a la comunicación eficaz tanto dentro del equipo de desarrollo de software como entre el equipo y los clientes. Una de nuestras técnicas básicas es pair programming. La programación en parejas encarna la idea de que dos cabezas piensan mejor que una, y anima a los desarrolladores a poner sus ideas en palabras y entablar una conversación con un compañero. Los equipos tienen que ser capaces de organizarse libremente para aprovechar las habilidades de los miembros y para relacionarse con el usuario final. Se hace hincapié en el aspecto social del trabajo y el aprendizaje. Como dice el manifiesto de Software Craftsmanship:

Como aspirantes a artesanos del software, elevamos el listón del desarrollo profesional de software practicándolo y ayudando a otros a aprender el oficio. A través de este trabajo hemos llegado a valorar lo siguiente:

  • No sólo un software que funcione, sino también un software bien elaborado
  • No sólo responder al cambio, sino también añadir valor de forma constante
  • No sólo individuos e interacciones, sino también una comunidad de profesionales
  • No sólo la colaboración con el cliente, sino también asociaciones productivas

    Es decir, en la búsqueda de los elementos de la izquierda hemos encontrado los elementos de la derecha como indispensables.

El énfasis está en una comunidad de profesionales que comparten valores y habilidades libremente. Esto tiene un lado intensamente práctico. Al modificar el legacy code, cada paso de un codificador individual debe ser probado y registrado para que todos puedan verlo. Se trata de ser conscientes de la necesidad de apertura y escucha por parte del programador y del equipo para el aprendizaje compartido, el desarrollo y la cooperación. La capacidad de retroceso es una salvaguarda importante, pero depende de las pruebas continuas, el mantenimiento meticuloso de los registros y una actitud compartida de honestidad sobre las contribuciones de los miembros del equipo. Estos son los pilares de una comunidad de artesanos que funciona y es capaz de entender los problemas y trabajar para superarlos. En la academia, los conocimientos se comparten a través de revisiones periódicas del código, retrospectivas y comentarios continuos. No obstante, la comunicación no es un fin en sí mismo, sino un medio para impulsar el trabajo del equipo y de las personas que lo componen.

Una academia también puede garantizar que los valores comunes relativos a las pruebas y la calidad del software se extiendan a toda la empresa. La esencia del Test Driven Development es que las pruebas se escriben antes que el código. Las pruebas ya no se limitan a alejar los defectos de los usuarios, sino que ayudan al equipo a entender qué características necesitan los usuarios finales y a ofrecerlas de forma fiable y predecible. Con este objetivo en mente, los aprendices reciben formación para utilizar las pruebas e2e y las pruebas basadas en el comportamiento. En este caso, el proceso de desarrollo parte del usuario para que el trabajo se realice de forma eficiente y eficaz.

El objetivo del desarrollo moderno de software es mejorar continuamente y facilitar el cambio. Esto requiere una serie de garantías muy importantes en combinación con la potenciación de los equipos y los codificadores individuales. Desplegar los cambios de forma incremental es mejor que desplegar un número entero de cambios de una sola vez. Las estrategias tradicionales de lanzamiento tienden implicar un traspaso de responsabilidad y culpa. Cuando cada refinamiento y cambio puede desplegarse inmediatamente con las garantías de la persona o el equipo que lo realiza, es más fácil localizar los errores y, si es necesario, revertirlos. Es importante evitar una cultura de la culpa, porque esto inhibirá el trabajo de los desarrolladores y socavará la productividad del equipo. Los incrementos de software están destinados a fallar de vez en cuando, por lo que deben introducirse en un entorno seguro en el que no haya problemas. La automatización del despliegue es importante y cada despliegue debe probarse en un entorno similar al de producción.

Una academia facilita la creación de un entorno seguro en el que está bien fallar. Los asistentes del Academy Program pueden acceder a una cuenta de AWS de experimentación que les permite probar las implementaciones en un contexto seguro. En este entorno el juego es una parte vital del proceso de aprendizaje. Como dice Andy Hunt:

Construir para aprender, no aprender para construir. Fracasa eficazmente con una mejor retroalimentación. Acomoda tus vías neuronales para el éxito.

Hunt, A. Pragmatic Thinking and Learning

El juego implica una exploración no dirigida a objetivos. Contrasta con la idea de que el aprendizaje consiste en llenarse la cabeza de información y esperar utilizarla después. Aquí se hace hincapié en aprender haciendo. Los proyectos en grupo y el enfoque en la entrega continua de miniproyectos permiten a los aprendices de Codurance desarrollar la responsabilidad de un cambio de software de principio a fin. Esta responsabilidad compartida aporta un sentimiento de orgullo y propiedad sobre el trabajo. Se anima a los aprendices a construir un esqueleto andante que represente la versión más básica del entorno de producción en el que despliegan su código inicial. Incluso sus esfuerzos iniciales pueden probarse y desplegarse en producción, lo que supone una experiencia de aprendizaje más rica.

 

¿Qué debería ofrecer una Academy?

La academia de una empresa podría verse como una función matemática que capta principiantes avanzados y genera profesionales craftsperson para que formen parte del equipo de desarrollo de software. Los aprendices entusiastas y curiosos serían un beneficio para cualquier empresa. Nos dice Hunt:

Siempre considera el contexto.

Hunt, A. Pragmatic Thinking and Learning

Como mínimo, el Academy es un periodo de estudio centrado en las cuestiones más amplias del desarrollo web. En el mejor de los casos, es una comunidad para inculcar habilidades efectivas de resolución de problemas. Como dice el profesor Ian Stewart en el prólogo del libro de Polya How to Solve it:

La capacidad de resolver problemas no se desarrolla en el vacío. Necesita un rico bagaje de conocimientos e intuiciones antes de poder actuar con eficacia. Polya hace mucho hincapié en la consideración de problemas cuya solución ya se conoce y en el razonamiento por analogía. La analogía puede ser un arma poderosa, pero se necesita una amplia experiencia para establecer la analogía adecuada.

Stewart, I. xviii Forward, How To Solve It, Polya, G. (2nd Edition)

Los buenos solucionadores de problemas son conscientes del contexto más amplio en el que trabajan. Son capaces de establecer conexiones entre los problemas resueltos y los que se les plantean y, a través de esta intuición, desarrollar un buen diseño. En Codurance, esta actitud activa hacia el aprendizaje se refuerza mediante un proceso denominado extreme learning (aprendizaje extremo), en el que los estudiantes disponen de un tiempo limitado para investigar temas relevantes para su trabajo y presentar sus conclusiones en un plazo determinado.

Una academia es también una excelente oportunidad para que los aprendices aprendan habilidades interpersonales y de liderazgo, de modo que los desarrolladores sean capaces de entender lo que se espera de un gerente y lo que se necesita para ser un buen mentor y líder tecnológico. La academia es un buen medio para enseñar habilidades de gestión personal y crear una cultura unificada de equipos.

 

¿Quién debería ir a la Academy?

Sandro Mancuso en su libro The Software Craftsman afirma:

Ningún cambio puede ser eficaz si las personas implicadas no están motivadas o no se preocupan realmente por su trabajo.

  1. Mancuso, The Software Craftsman, p. 169

Pero una iniciativa de gestión de la eficiencia que pretende mejorar las cosas puede, de hecho, empeorarlas. Las nuevas formas de trabajo impuestas se incorporan a los objetivos y gratificaciones de las personas. Dice Mancuso:

Cuando se trata del desarrollo de software, este enfoque puede tener consecuencias desastrosas... Deberíamos crear una cultura de aprendizaje en la que la gente pueda encontrar su propia motivación para mejorar las cosas. En lugar de que los directivos intenten imponer cómo, cuándo y qué deben aprender los desarrolladores, las empresas deberían capacitar a los desarrolladores para crear su propia cultura de aprendizaje.

  1. Mancuso, The Software Craftsman, p. 169 ff.

Mancuso sugiere que se cree un club de lectura, que se celebren debates técnicos durante el almuerzo, que se organicen discusiones de grupo, que se intercambien proyectos entre los equipos, que se realicen revisiones de codificación en grupo, que se lleven a cabo sesiones de codificación y que se formen comunidades de práctica internas. La Academia debería, por tanto, ser el núcleo de un movimiento para extender la mentalidad de los principiantes por toda la empresa.

¿Cómo evaluar el valor que aporta una academia?

Las empresas necesitan desarrolladores de software que sean capaces de gestionar el estrés de forma eficaz y mejorar progresivamente su productividad para completar los proyectos. Muchos de los problemas a los que se enfrentan las empresas en el desarrollo de software reflejan la propia estructura de comunicación de la empresa. La eficacia de un programa de la academia debe medirse en función de su capacidad para mejorar las habilidades blandas y técnicas, y aumentar la comprensión general del desarrollo web.

Las métricas más eficaces para la eficiencia provendrán de las mediciones derivadas de las prácticas de desarrollo ágil. Los burndowns mostrarán cuántas tareas de desarrollo se completan a lo largo del tiempo. Otra métrica muy importante para la agilidad del equipo es el tiempo medio de reparación (MTTR). Las mejores métricas para medir la productividad del equipo de desarrollo de software son las que utilizamos para medir los resultados empresariales. Los desarrolladores con una formación adecuada deben ser capaces de comunicar y entregar software de alta calidad que sea útil para el usuario final. Las revisiones regulares con los clientes pueden proporcionar métricas cruciales para el equipo y permitirán un mayor progreso del desarrollador. En Codurance, los craftspeople trabajan duro para desarrollar un bucle de retroalimentación positiva a través de sesiones de demostración quincenales regulares. El énfasis en la presentación y la mejora de la comunicación puede permitir que el aprendizaje se incorpore al proceso de desarrollo y, en los mejores ejemplos, los clientes pueden proporcionar información en directo para trabajar en la alineación y la mejora continua.

Además de las mejoras en el equipo, cada craftsperson recién cualificado debe mostrar una serie de competencias que aporten valor al equipo. Deben ser capaces de presentar con claridad los contenidos y ser hábiles en el lenguaje elegido y su ecosistema. Los craftspeople deben aplicar de forma natural los procesos XP y Agile y trabajar continuamente de forma incremental para aportar valor al negocio. Además, conocer las representaciones de diseño técnico para comunicar claramente el contexto y ser capaces de configurar una canalización de CI. Estas habilidades deben ser utilizadas por los craftspeople para describir los valores y el mensaje de la empresa y permitir un mayor éxito empresarial.

 

¿Cuál es el costo de empezar una Academy?

La práctica es esencial para el progreso de los desarrolladores, pero puede ser difícil incorporar una academia con objetivos empresariales más amplios. Como explica Sandro Mancuso:

Los clientes pagan a profesionales con la expectativa de recibir un buen servicio. No pagan a profesionales para que resuelvan sus problemas de la mejor manera posible. Los clientes no pagan a profesionales para que aprendan. Los clientes pagan a profesionales por sus conocimientos y habilidades. Se espera que los profesionales aporten soluciones, alternativas viables e ideas a sus clientes. Que ayuden a conseguir lo que sus clientes quieren de la mejor manera posible, y así es como construyen su reputación.

Mancuso, S. The Software Craftsman, p. 43

Los miembros del equipo deben reconocer que si quieren ser tratados y respetados como profesionales del software tienen que empezar a comportarse como profesionales. Eso significa que deben utilizar su propio tiempo y dinero para mejorar en lo que hacen.

La enseñanza de una academia se llevará a cabo, por lo general, por el personal de la empresa. Un curso completo a tiempo completo suele durar cuatro meses, con un máximo de seis estudiantes idealmente. A estos aprendices se les pagará un salario completo en la fase inicial, esto ayuda al compromiso y la responsabilidad que asumen los contratados en su aprendizaje. Otra característica de la filosofía de aprendizaje de Codurance es que la enseñanza es la mejor manera de aprender, por lo que la etapa inicial del curso del Academy está a cargo de académicos recién graduados, que cuentan con la ayuda de maestros más experimentados. Hay que poner a disposición una biblioteca en línea de libros y artículos de revistas útiles, así como una wiki bien curada de planes de lecciones. 

Los desarrolladores de software deben implicarse y contribuir a la empresa, aportando opciones y soluciones y ofreciendo el mejor servicio en cuanto a implementación, tecnologías y calidad de producción. Crear una cultura de aprendizaje es la forma más eficaz de inyectar pasión en una empresa. Un tema interesante del liderazgo transformacional es el del carisma abnegado. Aquí se establece un contraste entre dos formas de liderazgo, el transaccional y el transformacional. En esta lectura, la visión de los líderes se vuelve atractiva cuando está en consonancia con los valores e ideas de los seguidores. Según este argumento, pequeños sacrificios por parte del empresario para la mejora de los empleados pueden reportar grandes dividendos en su rendimiento. Es función del director de tecnología o del líder de la organización calcular la cantidad adecuada de inversión necesaria para la mejora de los empleados, pero la aparente pérdida de inversión puede tener resultados contrarios a la realidad, siempre que vaya acompañada de un cambio real y duradero en la cultura.