Pasito a pasito


Hacía tiempo que quería hacer un ejercicio interesante (al menos para mi) que consiste en hacer una codekata muy sencilla a pequeños pasos o, como dice Kent Beck en su libro “TDD: By Example“, con baby-steps. Me interesa estudiar cuáles son las fuerzas que empujan a refactorizar hacia un mejor diseño y para eso verlo en un ejercicio de laboratorio me parece ideal. En este sentido, también me interesa ver cómo se aplica la “Premisa de la Prioridad de las Transformaciones” expuesta recientemente por UncleBob.

FizzBuzz en Github (pasito a pasito)

Así pues, he creado un proyecto vacío con Jeweler (mi lenguaje de elección ha sido Ruby porque necesito practicarlo más) y he trabajado sólo en el fichero de test por simplicidad. Jeweler crea el esqueleto y te lo deja todo muy fácil para ejecutar los tests sin más que ejecutar:

rake test

De hecho, Jeweler te hace hasta el primer commit en git y lo deja listo para subirlo a github. Bueno, el resultado de este experimento lo he dejado en Github y veréis que se trata de la kata FizzBuzz, que es lo suficientemente sencilla como para no alargar demasiado el ejercicio. Si alguien tiene ganas de empezar con GitHub, también recomiendo este tutorial de primeros pasos de Adictos al Trabajo.

Así que fui haciendo commit con git para cada uno de los pasos, incluso en aquellos en los que estaba en rojo, porque la idea era tener todos los comentarios que explicaban ese paso en la historia de los commits y así, quizás algún día, tener una herramienta que me permita visualizar ese “paso a paso” a modo de slideshow.

De paso, en el camino, he puesto en práctica mi kung-fu con Git y he aprendido a:

Cambiar el comentario del último commit

Como los comentarios en este ejercicio son fundamentales, no podía permitirme que no pusieran exactamente lo que quería poner. Así que busqué y encontré esto:

git commit --amend

Esto lo que hace es proponerte el editor por defecto para modificar el mensaje del commit.

Deshacer los últimos commits

Más adelante me encontré con que había ido haciendo unas refactorizaciones que no me gustaban nada, así que quise volver atrás. Normalmente habría deshecho los cambios en el editor y hecho un nuevo commit, pero eso habría dejado un poco sucio la historia.

git reset <el hash del commit hasta el que queremos volver>

Esto nos pone apuntando justo a ese commit al que hemos hecho referencia. Si no sabéis cómo conocer el hash, “git log”, aunque hay maneras de abreviarlo y también vale. :-)

Hacer push a github sin haber hecho clone antes

Pensaba que ya había hecho creado el repositorio en github y que había hecho clone (que es lo que se suele hacer), pero como había empezado directamente desde el esqueleto que me ofrecía Jeweler, ni me acordé de todo eso. Así que creé el repositorio en github y, claro, ya no se parecía a lo que Jeweler había dejado configurado por defecto. El nombre del proyecto en local era “fizzbuzz” y en Github era “fizzbuzz-babysteps”. Además, al hacer git push me daba un error. Así que de nuevo recurrí a Google y Stackoverflow y encontré esto otro:

git remote set-url origin git@github.com:jmbeas/fizzbuzz-babysteps.git
git push -u origin master
Algunos alias nuevos bastante útiles

La primera vez que usé Git lo hice siguiendo el tutorial GitImmersion. Allí vi que se podían definir alias muy útiles para simplificar muchas de las tareas habituales. Los amigos de Emergya también nos recomiendan algunos. En particular el hacer “commit -a” parece una tontada, pero a mi me da mucha pereza hacer “git add” todas las veces. :)

LA FOTO: La encontré a través de “Google images” y, la verdad, no he pedido permiso. Espero que como es bastante inocentona y no busco lucrarme, no haya ningún abogado americano que me denuncie. Si alguien tiene interés en la fuente original (la que me da Google), es ésta. Ya véis, nada interesante.

Medir o no medir, ésa es la cuestión

En estos días estoy en un proyecto muy bonito ayudándoles a desarrollarlo con un enfoque ágil que luego puedan asumir como propio en otros proyectos. Es tan bonito que el nombre que hemos dado al proyecto de coaching es “Proyecto Bonito”. Un equipo como éste es toda una garantía de éxito: motivado, autoexigente, con muchas ganas de aprender y hacer las cosas mejor (ya las hacían bien, pero quieren hacerlas aún mejor). Este proyecto es tan bonito que incluso tenemos dueño de producto (dos: a falta de uno, dos). Son proxies del cliente, pero está plenamente justificado porque nuestro cliente está a muchos miles de kilómetros de distancia. Y está justificado el tener más de uno por eso de tener un respaldo durante las vacaciones… Yo, además, contento porque así es mucho más rico el backlog grooming que vamos haciendo. :-)

Hay retos, claro, si no no sería tan bonito… Tenemos que lidiar con la dispersión geográfica de sus miembros, con las dichosas vacaciones (¡quién las habrá inventado! :-P ) e incluso con retos técnicos como el uso de ExtJS. No son grandes retos, pero suficientes para sacar buenas conclusiones y no poner en riesgo ninguno de los objetivos, tanto el económico de tener éxito con el proyecto para nuestro cliente como el interno de interiorizar buenas prácticas ágiles y, además, tener cierto margen para ir obteniendo artefactos de arquitectura que luego puedan quedarse en la casa para abordar otros proyectos.

Pues bien, en este contexto nos van saliendo conversaciones interesantes que voy a intentar ir sacando en este blog poco a poco en la medida que pueda garantizar la debida confidencialidad. La primera de ellas que me gustaría sacar tiene que ver con la estimación de tareas.

Antes que nada:

¿Para qué estimamos las historias de usuario?

Yo no sé vosotros, pero a mi me gusta saber si el proyecto que tengo entre manos va bien, va mal, le queda mucho para acabar, seré capaz de entregar tal o cuál funcionalidad el mes que viene o dentro de tres meses… será mi pasado oscuro como jefe de proyecto o que es una pregunta muy normal cuando es tu responsabilidad manejar un presupuesto. Así que yo estimo historias y trato de responder a esas preguntas con un “si seguimos a este ritmo parece que sí” o “para ser posible tiene pinta de que tendríamos que hacer algo”. Otro día hablamos sobre cómo ayudo a responder a estas preguntas… :-)

Pues bien, en la primera reunión de planificación surgió lo típico: estimar en horas las tareas.

Y llegamos a la siguiente pregunta (a la que yo realmente quería llegar hoy):

¿Para qué estimamos las tareas?

A mi, personalmente, lo que realmente me interesa es tener un medio de provocar conversaciones que nos permitan reducir las diferencias de expectativas e ideas preconcebidas entre los diferentes miembros del equipo y el dueño del producto a la hora de abordar la historia de usuario en su conjunto y cada una de las tareas en particular. Y consigo este efecto pidiendo que se estimen las tareas… y cuidando de facilitar esas conversaciones, por supuesto.

Así que, al final, yo llego a la conclusión de que no es relevante si la estimación la hacemos en horas, en puntos o en lo que sea. Lo relevante es que salgamos todos alineados y con una conversación lo más rica posible alrededor de cada historia de usuario en el tablón.

LA FOTO: Un guiño a los seguidores de Dr. Who. Ayer vi dos episodios seguidos con niño1 y he terminado hablando con él sobre el continuo espacio-tiempo. :)

Desk surfing

¿Que por qué me gusta ir a eventos como el Agile Open Spain? Pues porque son la demostración más clara que de mi teoría de que si pones cerca a gente con talento, tarde o temprano saltan chispas entre ellos y ocurren cosas mágicas.

En el a Emma López ( en twitter)… sí, ya se lo he dicho muchas veces, ¡cambia ese dichoso nick que no hay quien se acuerde! Ejem, pues por donde iba, a Emma se le ocurrió que podíamos hablar sobre las experiencias que ella y algunos más estamos teniendo cuando visitamos las empresas de nuestros amigos simplemente por el placer de compartir conocimientos y experiencias. Y en esa charla, maese Gost indujo a los asistentes a una llamada a la acción y, como consecuencia, a arrancar un proyecto que ha dado en llamarse Desk Surfing. Yo ya he aportado mi único y pequeño grano de arena con mi brevísima semblanza de mis beCodeWeeks. :-)

Por supuesto, ya he actualizado mi “mundo de piruleta” con el enlace a Desk Surfing porque, muy pronto, una buena manera de distinguir a las empresas que “merecen la pena” será si participan en este círculo de reputación y confianza. Por cierto, que esto de los círculos de reputación ya me lo iba diciendo Roberto Canales durante el AOS2010. :-)

LA FOTO: No representa exactamente lo que es el desk surfing, pero no me digáis que no es genial. Igual todos los que vamos haciendo desk surfing deberíamos hacer una a modo de “sello en el pasaporte”. :-)

Fuente: http://www.flickr.com/photos/pacerboy4/3204611833/in/pool-964347@N24/

ACTUALIZACIÓN: (12/ago/2011) Creo que la foto lo dice todo. :)  http://yfrog.com/kl6d2tzj