Últimamente he estado pensando mucho sobre cómo construir un equipo de desarrollo eficiente. En última instancia, me gustaría abrir mi propia pequeña casa de software con un pequeño número de personas de ideas afines. El objetivo no será hacerse rico, sino tener un ambiente de trabajo saludable.
Hasta ahora, estoy definiendo un equipo esbelto de la siguiente manera:
- Pequeña;
- Autoorganizado;
- Todos los miembros deben tener QA en mente;
- Los miembros deben ser capaces de realizar múltiples roles.
El último punto es donde estoy un poco preocupado porque, como dice el mantra ...
Los desarrolladores hacen malos probadores.
Si bien entiendo que, a menudo, los desarrolladores están "demasiado cerca" de su código o del código de su colega para hacer evaluaciones de calidad de nivel superior, no estoy convencido de que sean de hecho probadores malos. Por el contrario, soy de la opinión de que las cualidades de un buen desarrollador se superponen en gran medida con las cualidades de un buen probador.
Asumiendo que esto es correcto, he estado pensando en diferentes formas de solucionar el problema del desarrollador / evaluador y creo que he encontrado un modelo viable.
Mi modelo requiere:
- Una pequeña casa de software con más de 2 proyectos.
- Un enfoque ágil (iterativo) para el desarrollo y la entrega
- 1 equipo por proyecto
- Todos los miembros del equipo serán desarrolladores de software
- La descripción de su trabajo indicará claramente el desarrollo , el aseguramiento de la calidad , las pruebas y la entrega como responsabilidades.
Si se han cumplido todas estas condiciones previas, los proyectos se pueden organizar de la siguiente manera (este ejemplo se referirá a dos proyectos, A y B ):
- Cada miembro del equipo alternará entre el rol de desarrollador y el rol de probador
- Si un miembro del equipo es un Desarrollador en el proyecto A , será un Probador en el proyecto B
- Los miembros trabajarán en sólo el 1 proyecto a la vez, y por lo tanto se espera que esté actuando como tampoco una Dev o un probador.
- Un ciclo de roles consiste en 3 iteraciones como Dev y 2 iteraciones como Tester (nuevamente, en dos proyectos diferentes)
- Los equipos del proyecto tendrían 3 desarrolladores y 2 evaluadores en todo momento.
- Los ciclos de roles de los miembros deben estar desfasados por 1 iteración.
- Esto minimiza la brusquedad de los cambios del equipo. Para cada iteración, 2 Devs y 1 Tester permanecerán igual que la iteración anterior.
Dado lo anterior, veo los siguientes Pros y Contras:
Pros
- Distribuye conocimiento del proyecto en toda la empresa.
- Asegura que los miembros del equipo no estén probando el código que ayudaron a escribir.
- Los ciclos de roles fuera de fase significan que ningún proyecto tiene un cambio de 100% de miembros.
- Alternar roles rompe la monotonía de los proyectos aburridos.
Contras
- Las iteraciones de ambos proyectos están estrechamente relacionadas. Si un proyecto cancelara una iteración a mitad de camino y comenzara de nuevo, entonces los dos proyectos no estarían sincronizados. Esto dificultaría la gestión del ciclo de roles.
- Las bisagras en la contratación de desarrolladores también trabajan como probadores.
Recibí críticas mixtas cuando discutí este enfoque con amigos y colegas. Algunos creen que pocos desarrolladores querrían alternar roles como este, mientras que otros me dicen que personalmente les encantaría probarlo.
Entonces mi pregunta es: ¿podría un modelo así funcionar en la práctica? Si no es así, ¿podría modificarse en un modelo de trabajo?
Nota: En aras de la brevedad, solo me he centrado en los roles de Dev y Tester. Expandiré otros roles si es necesario.