En lo últimos años, palabras como “Agile” o “Lean” se han convertido en buzz words que todo el mundo dice aplicar en sus desarrollos de software y de producto.

Las empresas han hecho grandes inversiones en programas de transformación de procesos y cultura con el objetivo de ser ágiles en el desarrollo de productos y servicios basados en software, tratando de cambiar la forma de trabajo y adoptando “metodologías” ágiles tipo Scrum, XP, Kanban. Incluso la industria se ha profesionalizado, llegando a aparecer certificaciones como Scrum Master.

No seré yo quien ponga en cuestión ni la validez de los programas de transformación, ni de las “metodologías” ágiles (que prefiero llamar métodos o buenas prácticas). Todo lo contrario, bien aplicados pueden ser muy útiles y generar el cambio deseado. Pero más allá de los Manifiestos y de los libros de “metodologías” ágiles (un buen ejemplo es Métodos Agiles y Scrum – Manuales Imprescindibles), muchas veces se pierde de vista lo que realmente significa ser Agile en el desarrollo de productos basados en software.

Lo primero que hay que entender es la naturaleza del desarrollo de software. Tal como explicábamos en el post “Hay Musica en el Desarrollo de Software”, también en el libro “Historias de Developers”, el desarrollo de software es incierto por naturaleza y por tanto, no es planificable ni predecible a priori.

En el mundo científico e ingenieril, siempre que en un sistema o problema hay incertidumbre, se aplican técnicas de Gestión Adaptativa. En el fondo estas técnicas se basan en la ejecución de ciclos de hypotesis-sintesis-realization-feedback, hasta que se hace converger el sistema a un determinado estado o se hace emerger una solución al problema.

El equivalente a esos ciclos en el desarrollo software son lo que llamamos ciclos de intention-sintesis-realization-feedback (ISRF), que de una forma tácita se pueden observar en un desarrollador cuando está programando. Para hacer que su código funcione, el desarrollador está inmerso en ciclos continuos y entrelazados de diseño, codificación, ejecución y pruebas que duran desde segundos hasta horas y días. Una dificultad añadida en el desarrollo de software está en que hay que descubrir a la vez tanto el problema a resolver como su solución software. Ambos son inciertos. Ahora bien, mediante la gestión adaptativa basada en la ejecución de ciclos ISRF se puede hacer emerger tanto la especificación del software como su realización (arquitectura, código, ejecutables).

Podríamos decir que, en el fondo, los métodos ágiles, no son más que una serie de buenas prácticas para la gestión adaptativa del desarrollo software. El fin último es manejar la incertidumbre inherente al desarrollo de software, para hacer que un equipo de personas creativas con altos conocimientos, hagan emerger tanto la especificación del problema como su solución software.

Diría que ésta es la parte fundamental a entender y a aplicar bien. Idealmente en la vida real esta gestión adaptativa se debería llevar a cabo en un espacio de tiempo y con recursos limitados (el coste sería sino infinito), con un equipo totalmente comprometido a llegar al máximo posible en cuanto funcionalidad y calidad del software (el coste es fijo, la calidad y funcionalidad software a la que se llega es variable).

El feedback y la comunicación continua entre el equipo es absolutamente clave para poder ejecutar ciclos ISRF cortos, rápidos y efectivos. Hay equipos, especialmente pequeños y con personas de alta capacidad de desarrollo software, donde las prácticas ágiles se manifiestan de una forma tácita (como ocurre muchas veces en el “garaje” de una startup). En otros casos, los métodos ágiles pueden servir de guía. No obstante, siempre que se apliquen de una forma explícita, se deberían adaptar de acuerdo a los skills y a la naturaleza del equipo, y nunca forzarlos de una forma imperativa. Muchas veces se aplican métodos y prácticas ágiles religiosamente, perdiendo de vista lo que es verdaderamente importante: llevar a cabo una gestión adaptativa de la incertidumbre inherente al desarrollo de software, sea con un método o sin él.

Firmado: Rubén González Blanco (@_rubengb) Head of Architecture for Product Innovation and Research at Telefonica I+D y Director del Máster Telefónica en Desarrollo de software avanzado.
¿Quieres aprender a desarrollar el software más avanzado?

Telefónica y U-tad han unido sus fuerzas para lanzar uno de los masters más interesantes del momento: el “Máster Telefónica en desarrollo de software avanzado”, un programa orientado a formar desarrolladores de software de alto nivel técnico que puedan trabajar en startups, compañías de software y en grandes compañías que están abordando la transformación digital de sus negocios.

A lo largo del máster se abordarán temas como la optimización de algoritmos y estructuras de datos, sistemas distribuidos, desarrollo sobre plataformas cloud, DevOps, patrones avanzados de diseño y arquitectura, prácticas ágiles o técnicas avanzadas en C++, Python y node.js junto con lenguajes del siglo XXI como Scala o Go.

También se verán técnicas de programación avanzada en Linux o desarrollo para las principales plataformas móviles (iOS, Android, Windows Phone y Firefox OS). De la misma forma, se estudiará el diseño e implementación de interfaces de usuario, escalabilidad, alta disponibilidad y distintos paradigmas de programación (lógica, concurrente, funcional, reactiva, orientada a objeto, orientada a aspectos, etc.) El máster está impartido por expertos en la materia que proporcionarán los fundamentos que permiten al alumno avanzar más rápidamente en su carrera profesional como desarrollador software.

El Máster Telefónica en Desarrollo de Sotware Avanzado tiene una duración de 600 horas y cuenta con el reconocimiento del departamento I+D de Telefónica.

http://www.u-tadpostgrados.com/desarrollo-software-avanzado/?utm_campaign=EM&utm_content=articulo