- Compartir metas, trabajar en equipo para alcanzarlas:
Ayudar al cliente a tener éxito, incluso en ambientes complejos y cambiantes, es la meta que desarrolladores, consultores y clientes deben compartir. - Definir roles, métricas y criterios de aceptación objetivos:
así cada uno sabe qué se hará, quién debe hacerlo, cuándo, e impedimentos y desviaciones pueden detectarse temprano y manejarse con efectividad - Aceptar que la realidad es compleja e impredecible:
Dar pasos cortos, verificar los resultados con frecuencia, prepararse para el cambio - Recordar que somos seres humanos con recursos limitados y sentimientos complejos:
Matnener las cosas simples, comunicar, ser amable y honesto, asegurarse de que la gente puede expresar su opinión y entiende y acepta voluntariamente la meta y sus responsabilidades o puede irse cuando quiera
También creo que las relaciones comerciales a largo plazo y el éxito se basan en la aplicación constante de estos principios.
Como desarrollador
"listo" es cuando el cliente/los usuarios pueden instalar y usar la aplicación cómodamente.
+ Pido al cliente un backlog de UserStories con criterios de aceptación
+ Acuerdo cuales UserStories estarán "listas" en las próximas 2 o 4 semanas (sprint y sprint backlog respectivamente)
+ Después de 2 o 4 semanas del sprint entrego todos los archivos necesarios para construir e instalar la aplicación y test automáticos para confirmar que los criterios de aceptación han sido satisfechos y la aplicación está libre de defectos. Muestro todo esto en una demo.
Me aseguro de que el cliente puede mantener o modificar la aplicación incluso sin mi ayuda
+ usando pocas herramientas y patrones lo más difundidos posible que pueden resolver el problema
+ comentado el código y mostrando con tests automáticos como podría extenderse o modificarse la aplicación
Para la mayorpia de las aplicaciones sugiero una combinación de un lenguaje de scripting con un lenguaje de proposito general, ej. Python, Javascript, Ruby o Perl implementados en C o Java y extendidos según haga falta usando el lenguaje de implementación. Puedo considerar varias otras opciones para casos complejos, como se explica en la sección de tecnologia.i
Como coach para equipos de desarrollo
Brindo lo que aprendí e intento hacer a los equipos tan efectivos como yo+ mostrando principios y como se encarnan en lo que hacemoscomo desarrolladores
+ definiendo las metas de la gerencia como criterios de aceptación que den métricas fáciles de computar y mantener a la vista
ej. los tests de aceptación deben cubrir el 100% del código
+ usando las métricas para evaluar riesgos y decidir las acciones
ej agregamos otra herramienta? hay partes del código que conoce sólo un desarrollador? y si se va o se engripa?
+ enseñando y ayudando al equipo a adoptar mejores prácticas
(incluyendo descubrir y darles los medios para que lo puedan hacer en el contexto en que están trabajando, por poco ideal que sea)
Acceptance TDD o BDD, arquitecturas que empiezan pequeñas y crecen según se necesita, resolver más problemas con menos líneas de código y herramientas, trabajar como equipo para asegurar la mayor cantidad de UserStories "listos" por semana
Uso las mismas métricas de calidad y criterios de aceptación para medir mi contribución (si la intervencion dura más de dos meses)
(Si busca un coach en eXtreme Programming o Scrum, este puede ser el camino más efectivo para alcanzar su meta, sostenido por las habilidades y la experiencia en el mundo real que la mayoría de los desarrolladores exigimos para confiar en alguien)
Como consultor
Pienso en terminos de valor para el negocio y estrategia. Me enfoco en verificar los resultados lo antes posible y minimizar el costo inicial y el de los cambios.+ Enseguida construyo prototipos y simulaciones para asegurarnos de que los interesados comparten la misma visión y pueden probar y explicar todos los casos y escenarios relevantes, sean actuales o esperables.
+ Resuelvo todo lo que pueda con soluciones, conceptos y patrones existentes, y ayudo a todos y cada uno a comprender y hablar un lenguaje común
+ Uso esta información para definir la estrategia de implementación, los requerimientos y los criterios de aceptación

