jueves, 5 de abril de 2007

Usando Crystal Clear -parte 2- Las Propiedades

Las propiedades de una metodologia son su codigo genetico, lo que la distingue de otras y le da cuerpo. Las propiedades de Crystal Clear son guias que al seguirlas, nos ayudan a llevar nuestros proyectos a una zona segura.

Crystal Clear es un Metodologia de desarrollo de software creada por Alistair Cockburn

Primero, debo resaltar que Crystal Clear, es una metodologia que se centra en una forma de pensar flexible y una filosofia de SEGURIDAD-HABITABILIDAD-EFICIENCIA hecha para adaptarse y mejorar, iteracion tras iteracion.

Las propiedades de Crystal Clear son 7. Las primeras 3 son obligatorias si se quiere seguir la metodologia, las siguientes son muy importantes y sirven para llevar el proyecto aun mas adentro en la zona de seguridad.

Propiedad 1: Entregas Frecuentes
Entregar código ejecutable, probado y usable a los usuarios, por lo menos una vez cada tres meses, si es cada uno o dos meses, mejor.

Al hacer esto aseguramos que nuestro proyecto no se despegara mucho de lo que el cliente necesita realmente, pues cada entrega formal, resultara en correcciones a los malentendidos que surgen continuamente en el analisis del sistema.

Ademas, si nos interesa entregar algo util para nuestros clientes -un software que realmente le genere valor- de esta manera le damos la oportunidad al usuario a que critique nuestra interfaz de usuario y el funcionamiento general del sistema antes de que continuemos creando mas codigo que podria terminar en la basura cuando nos digan "Esto no es lo que yo pedi."

Propiedad 2:Mejora reflexiva
Reunido por lo menos una vez en cada tres meses, durante media hora, una hora o medio día, para comparar notas, reflexionar, discutir nuestros hábitos de trabajo, y descubrir lo que nos acelera y lo que nos detiene y lo que podríamos mejorar.

Eso se llama hacer un "Taller de reflexion", obteniendo una lista de practicas o habitos de desarrollo que nos gustaria mantener, una lista de lo que nos gustaria intentar, y probablemente, una lista de lo que queremos evitar, todo esto escrito y publicado de alguna manera, a la vista de todos.

Esto nos genera una mejora continua en nuestro proyecto y nos da el tiempo para corregir el camino, acelerar el desarrollo y mejorar nuestros habitos y conocimiento de desarrollo.

Propiedad 3:Comunicación osmótica
La colocacion fisica del equipo de desarrollo es de lo mas importante, y la comunicacion osmotica se refiere a llevar la comunicacion al maximo nivel: Nos debe tomar menos de 30 segundos llevar nuestras dudas a los ojos u oídos de quien puede resolvérnoslas, debemos sentarnos en el mismo cuarto o en cubiculos contiguos. Captar algo relevante de la conversación entre otros miembros del equipo al menos cada pocos días.

El hecho de tener que levantarnos de nuestro escritorio, cruzar el pasillo y abrir una puerta, con toda seguridad nos distrae de nuestro tren de pensamiento. Irrumpir en la oficina de otro miembro del equipo y hacerle preguntas, a si sean de lo mas simple, terminara por retrasar bajar nuestra productividad de manera critica.

Comparado con hacer una pregunta a una persona que esta constantemente conectada en nuestro mismo tren de ideas, nos da la diferencia entre comunicacion cerrada y la mejor, comunicacion osmotica.

Propiedad 4: Seguridad personal

¿Podemos confesar a los demás que equivocamos nuestras estimaciones por mas del 50% o que hemos recibido una tentadora oferta de trabajo? ¿Podemos expresar nuestro desacuerdo con cualquiera respecto a la agenda en una reunión del equipo? ¿Podemos terminar largos debates sobre los diseños de otro miembro con un desacuerdo amistoso?

Fomentar la confianza y el respeto entre el entre el equipo, de manera que todos tengan claro que lo importante es lograr los objetivos del proyecto de manera conjunta. Asi, las equivocaciones e incapacidades de unos, pueden ser cubiertas por los demas, los miembros no temen exponerse, y el equipo respeta estas exposiciones.

Tres exposiciones en particular son importantes
  • Revelar nuestra ignorancia
  • Revelar nuestros errores
  • Revelar nuestra incapacidad en una tarea asignada


Propiedad 5: Enfoque

Cada quien debe saber cuáles son los dos elementos de mas alta prioridad sobre los cuales trabaja en todo momento. Ademas, deberiamos tener garantizado todos por lo menos dos días seguidos y dos horas ininterrumpidas por día para trabajar en un proyecto.

Esto tiene una base demostrada y fundada en lo siguiente:
  • Nuestro trabajo exige una alta concentracion en lo que hacemos para evitar errores y producir mas.
  • Un problema que se puede resolver en un minuto de concentracion, nos puede llevar una hora o mas de manera dispersa.
  • Una distraccion media, que nos hace llevar nuestro pensamiento a otro lugar, puede llevarnos a perder de diez a quince minutos de productividad.
  • El "switchearnos" de un proyecto a otro nos lleva al menos entre una y dos horas.
  • Despues de que un desarrollador esta sometido a constantes distracciones, el desgaste de energia mental termina por hacer que el desarrollador prefiera hacer cosas vanas (como chatear o navegar) entre una distraccion y otra. Lo mismo tiende a pasar con desarrolladores involucrados en tres proyectos o mas.


Propiedad 6: Acceso fácil a usuarios expertosNos deberia de tomar menos de tres días en promedio, desde que surge una duda respecto al uso del sistema, hasta que un usuario experto la resuelve. Inclusive lo deseable, es poder obtener las respuestas en unas cuantas horas cuando mucho.

Si surge una duda sobre en el desarrollo de la funcionalidad, y podemos levantar el telefono para comunicarnos con el usuario experto en el dominio, hacerle algunas preguntas y seguir con el desarrollo, entonces estamos del otro lado. Esto no es siempre posible, pero por lo menos sera importante poder agendar una cita para visitar o ser visitado por nuestro usuario experto.

Propiedad 7: Ambiente de desarrollo con Pruebas automáticas, Administracion de la configuración e integracion frecuente.

Poder dejar corriendo las pruebas de nuestro desarrollo hasta el final sin estar físicamente presente nos ahorra el tiempo que no tenemos, sin mencionar las ventajas de depuracion inmediata y de probar el codigo indiscriminadamente.

Todos los desarrolladores deberian ingresar el codigo en el que trabajan en un sistema de administracion de la configuración, de manera que este se encarge de llevar el control de versiones, documentos, etc. y escribir una nota útil sobre el código cuando lo ingresan.

El sistema se deberia integrar por lo menos dos veces a la semana, juntando el codigo de todos, compilandolo, y haciendolo pasar por todas las pruebas automaticas posibles, y obteniendo de esta manera codigo ejecutable constantemente.

El sistema funciona mas o menos asi: Se diseñan los test antes del desarrollo. El sistema se integra frecuentemente en el sistema de manejo de configuracion (ejemplo CVS) y se pasa por todos los test, mostrando los resultados de inmediato.

En los siguientes articulo sobre Crystal Clear expondre algunas tecnicas y estrategias sugeridas que nos ayudaran a lograr estas propiedades y las refuerzan.

lunes, 2 de abril de 2007

Usando Crystal Clear en la PyMe de software (Introduccion)

Mejorar nuestras metodologias de desarrollo puede ser el paso mas firme que podemos dar como equipos de desarrollo de software.

Muchos programadores estamos aun acostumbrados a usar un metodo de desarrollo en Cascada (analizar todo el sistema > diseñar todo el sistema > programar todo el sistema -> depurar etc.) o peor aun: nos exponen el problema, y mal nos lo terminan de explicar, ya tiramos unas lineas de codigo -al menos mentalmente-, o tomamos la primer idea que parece cuadrar con el problema como si fuera la iluminacion venida de nuestra propia mente sobreestimada.

Esa "metodologia" se ha ido dejado atras en las potencias en desarrollo de software (India, Alemania, Japon, EUA, etc) desde hace bastante tiempo, incluso en algunos casos desde los 70's u 80's. No esperemos encontrar en estos tiempos una empresa de desarrollo de software de nivel internacional que use esta forma de hacer las cosas, pues es considerada una mala practica que lleva a un software inutil, retrasos exorbitantes, y disgusto en el cliente (sistemas de pesima calidad).

Por otro lado, precisamente a raiz de que los clientes -que antes muy probablemente no tenian una idea clara de lo que esperaban de un sistema- ahora comienzan a saber exigir calidad y saben con mucha mayor precision lo que un sistema puede hacer por ellos. Tambien esperan mucho mas profesionalismo ya que, con todo y pena debo mencionar, historicamente los agentes libres y las PyMEs de informatica en Latinoamerica se han portado como estrellas de rock cuando se trata de servicio al cliente.

Esperando sinceramente -y creyendo- que esos tiempos estan quedando atras, debemos buscar un metodologia que llene nuestras espectativas y con nos guste trabajar (habitabilidad), que nos ayude a asegurar que el software que desarrollamos llena las expectativas de nuestros clientes (seguridad), y nos permita trabajar en equipo una y otra vez, refinando con cada proyecto nuestras practicas y conocimiento (eficiencia).

Personalmente mi recomendacion es Crystal Clear, una metodologia agil muy flexible creada por Alistair Cockburn, que tiene precisamente estos tres conceptos como principios de la metodologia
  • HABITABILIDAD
  • EFICIENCIA
  • SEGURIDAD PARA EL PROYECTO

La metodologia esta basada en ver al desarrollo de software como:

un juego economico de cooperacion, basado en objetivos, buscando un equilibrio entre la ambicion (terminar el proyecto pronto) y la inversion(actividades pensando en el futuro).

Explicando brevemente, por "un juego economico de cooperacion" se refiere a que es una actividad con reglas establecidas, que se practica en equipo y con el objetivo economico, un negocio. Se basa en realizar objetivos claros en los que cada en decision se determina un equilibrio entre terminar el software lo mas pronto posible (usar menos recursos) y las realizar las actividades que ayudaran a asegurar, mantener y posiblemente crecer en un futuro el sistema (invertir para el futuro).

En el siguiente articulo, expondre las Propiedades particulares de esta metodologia, que es la escencia del trabajo diario con ella.