2/10/2011

Políticas para el desarrollo de software ágil

Una organización que requiera agilidad en la ejecución de sus proyectos de software necesita del establecimiento de políticas que garanticen entrega temprana y continua de artefactos y servicios de software de valor y utilidad.

A continuación describo un conjunto de políticas que he utilizado en consultorias, que permitirán a la organización alejarse del modelo de desarrollo de software tradicional donde se realizaba un levantamiento de información durante 3 meses, y luego 2 meses para el desarrollo. Este tipo de desarrollo no permitía la entrega temprana de valor y no consideraba las siguientes realidades:
  1. Es imposible reunir a todos los requisitos al principio de un proyecto.
  2. La actividad de análisis y diseño no garantiza que no habrá cambios.
  3. Siempre existirán desviaciones en tiempo y recursos.
Lineamientos Generales
  1. El proyecto deberá ser ejecutado en iteraciones incrementales con una demostración del producto al finalizar cada iteración: con esta política, se conocerá el estado del proyecto, evaluando si los requisitos cumplen con las expectativas del cliente, si la calidad es la esperada, o si hay retrasos; agilizando la toma de decisiones correctivas.
  2. El proyecto se ejecutará en iteraciones incrementales con una duración fija de 3 semanas.
  3. Los requisitos se desarrollarán priorizados por el valor aportado al cliente: Esta política permitirá que los objetivos más importantes del proyecto sean atendidos.
  4. El control y seguimiento del proyecto se basará en los requisitos completados en cada iteración. Se entiende como un requisito, los entregables asociados a: análisis, desarrollo, pruebas, documentación, etc. e integrados con los entregables de las iteraciones anteriores.
  5. Cada requisito debe ser independiente del resto de los requisitos, en la medida de lo posible.
  6. Cada requisito debe ser demostrable, permitiendo cómo comprobar con el cliente que el requisito está completado y que se cumplen sus expectativas.
  7. El requisito debe ser de un grado de esfuerzo para ser completado semejante al del resto de requisitos: de manera que la organización y el cliente, puedan realizar una extrapolación del progreso del proyecto.
Desarrollo
  1. Los componente de software, deberán ser desarrollados y liberados por partes, y no entregados al final del proyecto.
  2. El desarrollo de los componente de software que conformaran la solución, deberán ser liberados en varias iteraciones.
  3. Cada iteración deberá producir software con calidad de producción, probado, integrado, y documentado (funcional, técnica).
  4. Cada iteración deberá cumplir con un subconjunto de requerimientos.
  5. Cada iteración deberá contemplar (análisis, diseño, implementación, documentación, etc.).
Pruebas
  1. Cada proyecto debe incorporar las practicas de TDD (Test Driven Development).
  2. Cada uno de los entregables, deberá contener scripts de pruebas unitarias, integrales, funcionales, etc; mediante la utilización de frameworks como junit, dbunit, mockObjtects, etc.
Documentación
  1. La documentación del proyectos, específicamente:  manual de usuario, manual de operaciones, arquitectura de la solución, especificaciones, etc; deberán ser entregables parciales para cada una de las iteraciones, es decir, la documentación no se liberara al final del proyecto, sino en entregables parciales.
Control de Calidad
  1. Cada uno de los entregables, serán sometidos a un script de calidad, que ejecutara la organización,  y no serán admitidos como productos del proyecto hasta alcanzar un nivel aceptable.
Control de Riesgos
  1. Los riesgos serán identificados en la primera iteración, llevándose a cabo también una valoración inicial de la exposición al riesgo y planes de contingencia. En cada iteración se revisará y actualizará el documento “Lista de Riesgos”, añadiendo además la lista de riesgos más importantes actualizada por cada iteración.
Control de Artefactos
  1. Cada uno de los artefactos del proyecto, deberán ser mantenidos bajo un sistema de control de versiones.
  2. La organizacion disponibilizara un sistema de control de versiones, que deberá ser actualizado por el cliente de forma remota.
"Es increíble el cambio que puede producir en una organización la incorporación y aplicación de políticas de desarrollo de software ágil".

2/05/2011

Visual Thinking, creatividad, innovación y generación de ideas en la organización

“Cuando estas deprimido, tus pensamientos son completamente diferentes cuando estas feliz. Cuando tienes éxito, tus pensamientos son completamente diferentes cuando tienes fracasos. De forma similar, cuando sientes que eres creativo, tus ideas son completamente diferentes cuando no lo sientes”

Inicio este post con una descripcion muy directa sobre la importancia de la creatividad y la generación de ideas. Si lo analizamos, todas las acciones en una organización son impulsadas por ideas, ideas para solucionar, cambiar y mejorar.

Estoy convencido que la ausencia de una cultura organizacional de innovacion continua es la causa que muchas organizaciones no puedan adaptarse a estos tiempos exponenciales, donde las relaciones entre tecnología, procesos y talento humano son la base para el éxito. Las organizaciones deben impulsar la creación de una cultura de emprendimiento e innovación incentivando la generación de ideas, la creatividad, los cambios, la imaginación, por supuesto con una clara orientación a la resolución de problemas.

Algunas recomendaciones para gerentes, impulsores del cambio, evangelizadores e innovadores:
  1. Incorpore a la organización las técnicas del Visual Thinking (Utilice un enfoque visual para facilitar la resolución de problemas mediante el pensamiento creativo).
  2. Utilice metodologías para incentivar la creatividad como medio para solucionar problemas a través de herramientas y técnicas visuales(utilizando palabras, imágenes, dibujos, diagramas, gráficos, entre otros).
  3. Utilice como referencia el libro ThinkerToys, tremenda lectura.
  4. Utilice como referencia el libro Gamestorming.
  5. Impulse la generación de dinámicas de trabajo, motivación y captación de ideas.
  6. Diviértase en el camino :)
Aquí unas notas para reflexionar sobre los cambios que nos esperan a la vuelta de la esquina.

"Las organizaciones que utilizan prácticas colectivas de aprendizaje como el Visual Thinking, Gamestorming, entre otros estaran bien preparadas para prosperar en el futuro, porque serán capaces de desarrollar cualquier habilidad que se requiera para triunfar. En otras palabras, la capacidad de ganancia futura de cualquier organización está directa y proporcionalmente relacionada con su habilidad y capacidad para aprender cosas nuevas. De este modo, las organizaciones que prosperarán en el futuro serán “organizaciones inteligentes”, organizaciones que explotarán la experiencia colectiva, talentos y capacidades de cada persona para aprender a cómo triunfar en conjunto. El aprendizaje se convertirá en una forma de vida y en un proceso continuo, en vez de una parte específica de la carrera de una persona. Para las corporaciones, el aprendizaje es vital para su éxito futuro."

Saludos;