lunes, 30 de enero de 2012

Las 10 prácticas ágiles más útiles (II)

Esta es la 2ª parte de una serie de artículos. Haz clic aquí para ir al post anterior.
Por fin, llega la segunda parte de este análisis de herramientas y prácticas ágiles, basado en los resultados  de una encuesta sobre las 10 prácticas ágiles que los distintos votantes encontraban como más útiles.

Nos faltaban de repasar las cuatro últimas herramientas, que si bien estaban entre las 10 más útiles, la encuesta las dejaba muy por debajo de las ya mencionadas. Vamos a repasar pues las que faltan:

Digital / Analog Taskboard.
Es una herramienta de seguimiento de proyectos ágiles, donde la información se estructura como muestra la figura siguiente:
Este cuadro de mando tiene varias ventajas:
  • Visibilidad. Se ve de un vistazo la situación del proyecto a alto nivel, y da una visión del estado de la iteración.
  • Simplicidad. Es fácil planificar y replanificar. Basta con mover las hojas de tarea (tarjetas).
  • Disponibilidad. En el caso de equipos distribuidos, es especialmente útil la versión electrónica de este taskboard, permitiendo la visión/actualización desde cualquier punto.
  • Actualización del burndown chart
Release Planning
Planificación de la iteración. Es la fase de la iteración en la que se planifican las tareas de dicha iteración (se decide qué incluir en dicha iteración). Esto se hace en función de la capacidad de trabajo del equipo, y de la prioridad de las historias de usuario. Mediante técnicas como Pareto, se intenta realizar el máximo de historias de usuario, con el esfuerzo disponible para la iteración (capacidad del equipo).

Test Driven Development
(de Wikipedia): Desarrollo guiado por pruebas, o Test-driven development (TDD) es una práctica de programación que involucra otras dos prácticas: Escribir las pruebas primero (Test First Development) y Refactorización (Refactoring). Para escribir las pruebas generalmente se utilizan las pruebas unitarias (unit test en inglés). En primer lugar se escribe una prueba y se verifica que las pruebas fallen, luego se implementa el código que haga que la prueba pase satisfactoriamente y seguidamente se refactoriza el código escrito. El propósito del desarrollo guiado por pruebas es lograr un código limpio que funcione. La idea es que los requisitos sean traducidos a pruebas, de este modo, cuando las pruebas pasen se garantizará que los requisitos se hayan implementado correctamente

Regression Testing
Las pruebas de regresión, son un tipo de pruebas orientadas a detectar nuevos fallos o fallos previamente detectados y ya corregidos, originados al realizar cambios en el sistema como pueden ser: updates, patches, cambios funcionales, etc.

Ahora que tenemos todas las herramientas identificadas, hagamos un breve análisis del resultado de la encuesta sobre utilidad, añadiendo un par de parámetros: coste de implantación y coste de uso.

Coste implantación Coste uso diario
Automated Builds 7 1
Continuous Integration 10 2
Daily Standup Meeting 0 1
Iteration Planning 2 2
Coding Standards 7 2
Unit Testing 8 5
Digital / Analog Taskboard. 3 1
Release Planning 2 2
Test Driven Development 10 3
Regression Testing 5 7

La tabla anterior muestra unos valores ponderados (no expresan horas ni ninguna otra unidad de medida, sino que son valores que yo he estimado a nivel comparativo, para hacer un análisis cualitativo). Usando los valores anteriores, y con un poco de matemáticas, llegaríamos a la conclusión de que si ordenamos la lista de prácticas por beneficio/coste de implantación, la lista quedaría así:
Daily Standup Meeting
Iteration Planning
Release Planning
Digital / Analog Taskboard.
Automated Builds
Regression Testing
Coding Standards
Continuous Integration
Unit Testing
Test Driven Development

Bueno, esto no es muy novedoso. Ya lo sospechábamos: la práctica que mejor resultado da, y que menor coste tiene, es el Daily Stand Up Meeting. Aquí ya, es cuando haríamos las reflexiones oportunas.
Y como vuelta de tuerca final, sería hacer los mismos cálculos, pero incorporando los costes de uso diario. Aquí ya dependería del proyecto, pero los resultados pueden ser algo de este estilo:
Daily Standup Meeting
Digital / Analog Taskboard.
Iteration Planning
Release Planning
Automated Builds
Coding Standards
Continuous Integration
Test Driven Development
Unit Testing
Regression Testing

Aquí ya vemos como se "recolocan" las prácticas, de forma que las que mejor rendimiento nos dan al proyecto, al mínimo coste, se han situado arriba, dejando relegadas algunas de las que más cuestan llevar a cabo. Por supuesto, esto ha sido un ejercicio que en la práctica habría que afinar mucho más, porque tanto las fórmulas utilizadas como los cálculos realizados han sido un tanto burdos para obtener resultados cualitativos. Os invito a todos a realizar algo similar aplicado a vuestros proyectos y costes, y ver qué prácticas son las que os da mejor ratio rendimiento/coste. Hasta la próxima.

martes, 10 de enero de 2012

Formación gratuita sobre Dirección Ágil de Proyectos

En LinkedIn he visto publicado un post interesante.
Para los interesados en la dirección ágil de proyectos, Kybele Consulting (consultora especializada en formación y métodos ágiles), ha lanzado un curso gratuito y no presencial sobre “Dirección ágil de proyectos”:
-       Se enviarán las lecciones de forma semanal por correo electrónico
-       Inscripciones en: http://www.cioagil.com/
-       El único requisito es dar una cuenta de correo electrónico (corporativo o personal)

Nuevos Virtual Labs para SQL Server 2012

Para probar las nuevas características de Microsoft SQL Server 2012, Microsoft ha dejado una serie de virtual labs disponibles para ello. Son entornos preconfigurados que facilitan el testeo de estas características.

Los tenéis disponibles haciendo clic en el siguiente enlace.

viernes, 6 de enero de 2012

PMO (II)

Este es el segundo de una serie de artículos sobre PMO:
PMO I - Introducción
PMO II - Descripción
PMO III - Ventajas de una PMO
PMO IV - Inconvenientes de una PMO

Continuando el post anterior sobre PMO, vamos a añadir una serie de conceptos. Una PMO se encuentra al nivel de la gestión del portafolio. Éste, estaría a un nivel superior de la gestión del programa, y finalmente, la gestión del programa estaría un nivel por encima de la gestión de proyectos. Vamos a ver sus definiciones con algo más de detalle:
  • Gestión de Proyectos (Project Management): la aplicación de conocimientos, capacidades, técnicas y herramientas sobre las actividades del proyecto para satisfacer sus requisitos. (Fuente: Project Management Institute)
  • Gestión de Programa (Program Management): la planificación coordinada, gestión y ejecución de múltiples proyectos relacionados que están dirigidos hacia los mismos objetivos estratégicos, de negocio u organizativos, para generar unos beneficios superiores a los que se hubieran obtenido mediante la ejecución individual.
  • Gestión del Portafolio (Portfolio Management): los procesos, el gobierno y las herramientas utilizadas para planificar, crear, asegurar, balancear y comunicar la ejecución del protafolio de proyectos IT.
La Oficina de Proyectos permite:
  • Gestionar de una forma integral la comunicación
  • Aumentar el valor de la marca
  • Crear capital humano
  • Reducir los ciclos de proceso
  • Atender a los clientes teniendo en cuenta los retos y oportunidades del futuro, y al mismo tiempo no perder la visión del conocimiento adquirido en el pasado.
El modelo de trabajo del Gobierno IT que realiza la PMO es el siguiente:
  • Investiga y capacita
  • Define prácticas, metodologías y herramientas
  • Asesora a las áreas ejecutoras
  • Monitoriza, controla y realiza el seguimiento
  • Establece y monitoriza métricas
  • Estima y realiza seguimiento a los beneficios
  • Comunica evolución de la práctica
Bajo la directriz de la PMO, las áreas ejecutoras (los proyectos):
  • Gestionan y ejecutan sus proyectos
  • Aplican métodos y usan herramientas
  • Crean informes de seguimiento
  • Siguen cronogramas
  • Siguen presupuesto
  • Evalúan la obtención de beneficios
Los Procesos definidos por una PMO, establecen un nivel de madurez DEFINIDO. Sería el equivalente al nivel 3 de madurez:
  • Nivel 5: Optimizado
  • Nivel 4: Gerenciado
  • Nivel 3: Definido (Procesos)
  • Nivel 2: Repetible
  • Nivel 1: Inicial
  • Nivel 0: ¡No Existe!
Dejaremos para un próximo post algunos temas interesantes como métricas, procesos, etc. de una PMO.

jueves, 5 de enero de 2012

Checklists

Las checklists (o listas de control, nombre con el que aparece en algunos sitios web), suponen una herramienta fundamental en el mundo del desarrollo software.

¿Que qué son?
  • Son como los puntos de control de un coche: una lista de verificaciones a realizar,  de acciones a llevar a cabo para un fin único. Cuando llevas el coche a arreglar, sabes qué le van a hacer (o mejor aún, según cuánto pagues, sabes cuántas cosas van a comprobar). Si queremos verificar un vehículo, lo más fácil es coger una lista, y seguirla: neumáticos, aceite, etc, etc. Pueden extenderse fácilmente para cualquier cosa: lista de la compra, lista de cosas para  un viaje, etc.
  • Ocurre lo mismo cuando queremos verificar algo en el mundo del software. ¿Cómo saber que lo hacemos bien? En el mundo del software son vitales ya que permiten aprovechar la experiencia de las personas, y resumirla en acciones concretas para tareas de control o verificación.

¿Que porqué son una ayuda fundamental?
  • Son sencillas de usar.
  • Disminuyen los errores en las cosas que hacemos.
  • Homogeneizan las tareas (sabes que todo el mundo van a seguir la misma secuencia de cosas)
  • Te permiten justificar ante el cliente u otra persona, qué has hecho exactamente. Si conforme hacemos las tareas de la checklist, rellenamos un S/N, o ponemos un comentario, quedará constancia de lo que se ha hecho y su resultado. Esto evita muchos problemas, y da una imagen de seriedad y profesionalidad.
  • Facilitan su uso por personal menos experimentado o junior.
  • Son fáciles de implementar como métricas (ejemplo: ¿cuántos puntos de control han fallado de los N de la checklist?)
  • Permiten hacer fácilmente comparaciones: si un software ha fallado el 20% de las pruebas de la checklist, puede usarse para compararlo con las mismas pruebas en otros productos software.
  • Se aplica a productos software, a sistemas, a documentación, a procesos, ... a cualquier cosa.
Las checklists son la auténtica prueba de madurez, un nivel superior de hacer bien las cosas. Ya no tenemos el conocimiento en nuestra cabeza, sino que los pasos/acciones a realizar, los compartimos en una checklist para que el resto del equipo pueda realizar las mismas tareas y llegar a conclusiones similares.

¿Y ejemplos concretos de ésto?
  • Pues cuando vayamos a subir algo a producción, podemos tener una checklist de pasos/pruebas a realizar. Pueden ser pasos previos (verificación de que está todo lo necesario, personas, equipos, etc.). También estarían los pasos a realizar para la propia subida a producción. Finalmente, se incluirían las tareas posteriores: verificar que todo está ok, borrar los ficheros temporales, hacer logoff con el usuario utilizado, enviar un correo de notificación de éxito, etc, etc.
  • También, antes de cada entrega de un documento al cliente, sería interesante tener una checklist del estilo: ¿tiene el formato adecuado (S/N)? ¿se ha utilizado la plantilla correcta (S/N)? ¿el contenido ha sido revisado (S/N)? ¿Se ha versionado correctamente (S/N)? ¿Se ha enviado a todos los destinatarios adecuados (S/N)?
  • Etc, etc
Así que ya sabéis. Poned más checklists en vuestra vida.