jueves, 16 de septiembre de 2010

Agile para estudiantes / Agile for students


No hace mucho, el propietario de una empresa de software, alguien que no estudió ingeniería informática, me preguntó si yo lo había hecho. Cuando le contesté afirmativamente me preguntó qué era lo que se estudiaba en la facultad en el ámbito de la gestión de proyectos y la ingeniería de software. El contexto donde la pregunta fué formulada era inmejorable: un curso sobre SCRUM y metodologías de gestión Agile. No era yo la única que había estudiado la carrera, éramos en el curso una muestra representativa en cuanto a educación universitaria en informática se refiere. No es extraño que una discusión muy interesante siguiera.

La duda era cómo se podía incluir metodologías Agile en el plan de estudios de una facultad de informática. Y no tiene fácil respuesta.

El propietario de la empresa comentó que a finales de los años 80, los que como él ya trabajaban en el mundillo informático, viendo el desorden que había en los proyectos, creyeron que los estudios de ingeniería de software eran la solución. Se decía que uno de los objetivos de la carrera era la de formar a profesionales que dominasen metodologías ordenadas e “hiciesen las cosas bien”.

En efecto, a finales de los 80 y durante los 90 (yo me gradué en 1999) se estudiaba el modelo Waterfall en las asignaturas de ingeniería de software. No es extraño y refleja los estándares de la industria al respecto. Tampoco niego que es mejor el Waterfall a no utilizar ninguna metodología. Pero en el momento en el que nos encontramos, en el que las metodologías Agile están copando el mundo anglosajón y buena parte del europeo, quizás llegue el momento de revisar qué se está estudiando en nuestras universidades.

Durante mi época de estudiante, los profesores provenían predominantemente del ámbito académico. No se habían encontrado con los cambios de opinión del cliente, con las modificaciones a última hora o con tiránicas restricciones de tiempo y presupuesto.

Una alumna más joven que el resto y que había acabado la carrera recientemente, comentó que un profesor sí les había hablado de SCRUM y XP. Curiosamente, dicho profesor provenía del mundo corporativo y compaginaba las clases con labores menos académicas. Así que actualmente se estudian las metodologías Agile en la universidad, averiguamos los más veteranos. Nos quedamos satisfechos.

Pero luego una duda me asaltó. Vislumbré un potencial problema, arraigado en la forma en la que se enseña en las universidades. Mi preocupación es cómo al enseñar las nuevas metodologías a alumnos que aún no están en el mercado laboral y que no se han peleado con los problemas que Agile intenta solucionar, puedan ellos entender realmente los beneficios.

Pese a alegrarme al oír como el mundo de la enseñanza refleja como las empresas se adaptan a la realidad utilizando nuevas metodologías, ¿podrán los alumnos entender el porqué están proliferando estas metodologías? ¿su verdadero valor?

¿Cómo se puede hacer entender a un alumno lo que se va a encontrar en el mundo de la empresa? ¿No sería útil un modelo de prácticas más adecuado a la realidad? Los informáticos trabajamos, la mayoría de las veces, en proyectos. ¿No sería una buena idea que los profesores actuasen como clientes, cambiando los requerimientos, rechazando proyectos, etc.? De esta forma, en sucesivas asignaturas, los alumnos aprenderían a usar SCRUM y verían las ventajas que realmente aporta.

Curiosamente un alumno contó que uno de sus profesores (allá en los 80!) le rechazó una práctica y cuando él protestó, le contestó: “¿Acaso esperabas que la primera versión me gustase?”. A él se le quedó grabada la conversación por lo inusual. Y después, cuando se sumergió en el mundo laboral y se dió cuenta que era el pan nuestro de cada día, le dio a la actitud del profesor el reconocimiento que merecía.

Si no se hace así, me asusta pensar que los estudiantes verán SCRUM o XP como el modelo Waterfall. Una manera como otra de hacer las cosas. Le planteé mi duda a la chica que había estudiado XP en la facultad. Y ella me respondió que, precisamente, así lo había visto. Como una anécdota.

jueves, 17 de junio de 2010

Una cifra inicial / An initial figure




A los que se nos suele preguntar sobre las ventajas de SCRUM nos resulta a veces difícil dejar claro sus límites. Centrados como estamos en resaltar sus puntos fuertes y en ilustrar las mejoras que aporta, no debemos olvidar que SCRUM no es una solución mágica para todos los problemas que pueden sobrevenir a un equipo de desarrollo. En las propias presentaciones de SCRUM ya se menciona muchas veces que no es una bala de plata (silver bullet en inglés).

El otro día, en un curso, un alumno me preguntó varias veces sobre un problema muy habitual en el mundo de las tecnologías de la información. Qué hacer cuando se necesita determinar el coste de un proyecto que aún no ha empezado, sea porque hay que venderlo o porque nos lo pide el departamento comercial o la dirección. Proporcionar una estimación inicial del coste de un proyecto (y el compromiso que ello implica) es un tema espinoso y potencialmente muy peligroso cuando no se conoce exactamente lo que se debe realizar.

En el mundo Agile, se estima de forma iterativa y así se evita realizar todas las estimaciones al inicio del proyecto, cuando el riesgo y la incertidumbre es más alta. Porque... ¿Acaso sabemos antes de empezar un proyecto lo que se debe realizar? La respuesta es no, excepto en contadas ocasiones.

Pero, ¿Qué hacer cuando no se puede estimar de forma iterativa, cuando es imprescindible calcular esa cifra porque por ejemplo debemos hacer una oferta? ¿Cómo nos puede ayudar SCRUM en esa situación?

La respuesta no es fácil. Si se han pactado una serie de funcionalidades muy específicas que no se pueden variar y las estimaciones dadas son malas, seguiremos teniendo un problema. SCRUM no es un método de estimación, sino una metodología de desarrollo que asegura que se aporta el máximo valor al cliente a lo largo de una serie de iteraciones. En el caso de que se tenga que presentar al cliente un presupuesto cerrado, SCRUM no te ayuda a calcular el coste de la funcionalidad acordada. Ayuda a que, partiendo de ese presupuesto, se dé al cliente el máximo valor posible.

Como discutimos con mi alumno, en este caso el presupuesto es una restricción. Una restricción previa que nos determinará, por ejemplo, la duración del proyecto. A partir de dicha restricción, ofreceremos el máximo valor al cliente. Es más, gracias a la naturaleza iterativa en la que al final de cada iteración se demuestra el producto al cliente, no sólo aseguramos el máximo valor sino que el cliente puede cambiar de opinión y guiar el desarrollo.

Es importante que el cliente entienda que en ese presupuesto se pactan una serie de funcionalidades (el primer Product Backlog) y que desde el momento en que se empieza el desarrollo, puede guiar su evolución. Puesto que es el mismo cliente el que puede cambiar de opinión y sustituir funcionalidades pactadas a cambio de otras que se ha dado cuenta que son más importantes, cobra importancia que el contrato con dicho cliente permita esta forma de trabajar: un contrato Agile.

domingo, 13 de junio de 2010

SCRUM


Inicio este blog con una anécdota. Desde que la oí, pensé que sería fantástico empezar el blog explicándola, pues ilustra perfectamente el poder de SCRUM en muchos ámbitos, no sólo el desarrollo de software.

Hace unos meses, dando un curso de PMP uno de mis alumnos me contó una historia que me pareció ilustrativa. Tenía tres hijos, tres chavales inquietos que aún no habían llegado a la adolescencia. Y realizaba SCRUM con ellos:

“Cada día por la mañana nos reunimos toda la familia. Repasamos las tareas del día anterior y asignamos las nuevas”.

Buen ejemplo de Daily Scrum. También ponían en práctica una asignación de tareas muy parecida a la que se hace durante un típico Sprint Kick Off, con los diversos miembros del “equipo familiar” estimando la duración y asignándose las tareas de forma voluntaria. Según el padre (mi alumno), este método funcionaba a las mil maravillas:

“A los chicos les da un sentido de la responsabilidad. Y en general, la familia está más organizada”.

Pese a que SCRUM es una metodología que se aplica principalmente en el desarrollo de software y en general en el desarrollo de productos complejos en el que la mayor parte del trabajo es intelectual, yo creo firmemente que sus principios van mucho más allá. Vale la pena señalar que las metodologías ágiles nacieron como una evolución de las mejores prácticas en entornos de desarrollo de software. No son una gran ocurrencia que un señor tuvo un día que se sentía iluminado. En parte por eso SCRUM es un framework que tiene muchas dimensiones y que deja bastante espacio a la creatividad. Y se puede aplicar, usando esa creatividad, a más áreas de las que en principio creemos.

En este blog no sólo quiero recopilar mis experiencias implementando y enseñando metodologías ágiles, sino también encontrar estos otros ámbitos en los que dichas metodologías, SCRUM entre ellas, puedan ser útiles.

Empieza el viaje …