# ¿Qué es Scrum? ¿Y cómo te ayuda trabajar?

Scrum es una metodología de desarrollo ágil. Scrum propone una forma diferente
de organizarse en el desarrollo de un proyecto, tanto en solitario como
trabajando en equipo.

Scrum define tres roles principales, el **Product Owner**, el **ScrumMaster** y
el **Equipo de Desarrollo**. El Product Owner vendría a ser el cliente (aunque
en algunos casos puede ser algún ejecutivo de cuentas), este define las
**Historias de Usuario**, las prioriza y las agrega al **Product Backlog**.

El ScrumMaster es un facilitador, este se encarga de ayudar a que el equipo de
desarrollo tenga lo que necesita para trabajar, ya sea que el equipo necesite
cierta información o que tenga alguna duda sobre una historia de usuario, es
deber del ScrumMaster ayudarlos en lo que necesiten para que no se corte el
trabajo.

El equipo de desarrollo son los que realizan el proyecto, estos se
auto-organizan para poder realizar el trabajo de la mejor forma posible, son
quienes definen el tiempo que les llevaría cada historia de usuario lo que ayuda
al product owner a definir el **Sprint Backlog**.

Las historias de usuario son las cosas que tiene que hacer el software,
representan una acción que un usuario podría necesitas, por ejemplo: _El usuario
debería poder ingresar los datos de un producto para generar una factura_. Es el
product owner, y solo este, el encargado de definir las historias de usuario.

Luego de que se definan las historias de usuario el product owner las ordena por
prioridad para definir cuales hay que hacer primero. Una vez hecho esto el
equipo de desarrollo calcula cuanto tiempo le tomaría realizar cada historia,
una vez conocido el tiempo de cada tarea se agregan al product backlog.

El product backlog representa que va a hacer el software cuando este terminado,
el product owner puede, durante el desarrollo, seguir agregando más historias de
usuario al product backlog. Una vez terminado de definir se definen los sprints,
estos suelen tener una duración de 2 semanas y poseen su propio sprint backlog.

El sprint backlog también lo define el product owner. El sprint backlog son un
grupo de tareas que han de desarrollarse durante el sprint. Cada sprint tiene
que terminar con un producto funcionando, aunque no este completamente
terminado.

Antes de empezar un sprint se realizan una reunión llamada **Sprint Planning
Meeting** entre el product owner, el ScrumMaster y el equipo de desarrollo donde
se selecciona el trabajo a realizar, se arma el sprint backlog y se define el
tiempo para completar el sprint.

Durante el sprint cada día se realiza una reunión llamado **Daily Scrum** donde
se juntan el ScrumMaster y el equipo de desarrolo, durante la reunión cada
miembro del equipo explica que hizo ayer, que va a hacer hoy y si se encontró
con algún problema, el ScrumMaster entonces debe fijarse cuales fueron los
problemas para ayudar a solucionarlo.

El desarrollo debe seguir entonces el proceso de definir las historias de
usuario y el product backlog, definir el sprint backlog, una vez terminado
definir otro sprint backlog y así hasta terminar el proyecto.

## ¿Por qué Scrum te ayuda en tu trabajo?

Scrum posee muchos beneficios al implementarlo en el desarrollo de software. Voy
a enumerar los que me parecen más útiles.

**Mayor productividad**: Al hacer que el equipo de desarrollo se auto-organice
se alcanza una mayor productividad al eliminar los tiempos muertos que
representa el esperar que se asignen tareas.

**Flexibilidad a cambios**: La forma de trabajo de Scrum permite que realizar
cambios no sean molesto, de hecho hasta es ideal que se hagan, esto lleva a que
si los requisitos del proyecto cambian el equipo se pueda adaptar sin problemas.

**Mayor calidad del software**: Al necesitar que cada sprint termine con una
versión funcional del software lleva a que el mismo tenga una mayor calidad
final.

Estas tres son para mí los mayores beneficios de trabajar con Scrum. Hay varios
más que se pueden leer en otro sitios, pero me parece que solo estos ya hacen
que valga la pena implementar Scrum en desarrollo de un software.