Un error que solemos cometer los que hemos trabajado como programadores es que decimos que hemos terminado una tarea nada más terminar de codificarla, sin esperar a probarla intensamente con pruebas unitarias, de integración o de aceptación por parte del cliente.
Una parte importante de Scrum es que cuando hemos terminado un sprint debemos tener un entregable que potencialmente pueda ser puesto en producción. No significa que lo pongamos nada más terminar pero sí que está listo para poder ser puesto en producción si así se requiriese. Esto es importante porque no debemos cerrar en falso cosas en un sprint porque aún contienen errores o no han sido exhaustivamente comprobadas o aceptadas por el cliente. Si seguimos avanzando así sprint tras sprint pronto nos daremos cuenta de que hemos ido metiendo cosas debajo de la alfombra que salen a la luz con las primeras entregas en producción porque están llenas de errores o porque no son tal y como el cliente las quería.
Hace algunos años leí que en un proyecto de aplicación web usada por decenas de miles de médicos y personal sanitario en USA la definición de hecho consistía en subir a producción la nueva característica del software, si no sonaba el teléfono en la siguiente hora significaba que la funcionalidad estaba ‘terminada’ (Done en inglés). Esa sí que es una definición de ‘terminado’ muy particular.
La definición de hecho o terminado en un equipo Scrum debe ser algo entendido y compartido por todos y podría consistir en algo tan sencillo como:
- Código completado
- Código subido al control de versiones
- Tests completados
- Aprobado por el Dueño del Producto.
- Código completado
- Código subido al control de versiones
- Test unitarios completados
- Pasaron los tests de integración
- Tests de aceptación
- Documentación