Mi equipo y yo estamos reconstruyendo un sitio que desarrollamos hace unos diez años, y queremos hacerlo en Agile.
Entonces, después de pasar mucho tiempo leyendo (probablemente no lo suficiente), tengo problemas con la pregunta de cómo dividir el trabajo entre los desarrolladores.
Seré más específico y diré que el sitio está dividido en módulos separados que no tienen mucha integración entre sí.
¿Cuál es la forma mejor / más aceptada de dividir el trabajo entre los desarrolladores?
- Dar a cada persona un módulo diferente para trabajar.
- Asigne a todos los desarrolladores al mismo módulo y divida el trabajo por diferentes partes del módulo (UnitTesting, DAL y Mapping, Logics, UI)
- Asigne a todos los desarrolladores al mismo módulo y divida el trabajo por diferentes lógicas (por ejemplo, cada desarrollador está a cargo de una lógica específica (probablemente un método en el BL) y Es UnitTesting, DAL y Mapping and UI ...
¿O tal vez algo completamente diferente?
web-development
agile
Amir
fuente
fuente
Respuestas:
Mi equipo ha estado tratando de ser "ágil" durante algunos lanzamientos, pero ser parte de una gran corporación no lo ha hecho exactamente fácil. No voy a fingir que tengo la respuesta, pero puedo compartir algunas de mis observaciones.
División de desarrolladores por módulo:
Todos trabajan en el mismo módulo al mismo tiempo
Hemos estado haciendo lo último, y aunque hay mucho espacio para mejoras, en general todo nuestro equipo ha estado muy contento y eso dice mucho, cuando somos parte de una corporación gigante.
Una cosa importante que nos equivocamos las primeras 3 veces que "nos volvimos ágiles" es que cada una de esas personas se les dijo cómo trabajar y se les dijo en qué trabajar. Esa es la forma número uno de hacer que su equipo pierda por completo el interés en el proyecto y luego se encuentre en problemas reales.
En cambio, intente lo contrario. Dígale al equipo que pueden hacer lo que quieran y como gerente / líder (si usted es uno, si su gerente no repite estas palabras), su trabajo es asegurarse de que sean lo más productivos y felices posible. El proceso no es algo malo, pero debe estar allí para ayudar a su equipo cuando se dé cuenta de que necesita uno, y no al revés.
Si algunos de los miembros de su equipo prefieren trabajar de forma aislada, déjenlos (hasta cierto punto). Si prefieren trabajar en parejas, déjelos hacer eso. Asegúrese de dejar que su gente elija su propio trabajo tanto como pueda.
Por último, y esto es muy importante y siempre se pasa por alto. NO OBTENDRÁS ESTE DERECHO (a menos que seas superman, o al menos Batman). Tener reuniones retrospectivas regulares es extremadamente importante. Cuando lanzamos las retrospectivas, el libro las hizo y se sintió como otro proceso más por el que tuvo que pasar. Para eso no es retrospectiva. Es para escuchar a su equipo, identificar las áreas que causan más dolor y arreglarlas para que todos puedan seguir con su trabajo. Aparentemente, a los ingenieros de software en general les gusta comunicar productos y características, y la reunión retrospectiva de mensajes más importante para comunicarse es que es únicamente para su beneficio. Desea identificar y abordar obstáculos, comenzando con los más grandes (o los más fáciles, allí '
fuente
Tenga una reunión con el equipo, muéstreles la lista de tareas y pregunte quién quiere hacer qué.
fuente
No pienses en módulos. Piensa en elementos funcionales. Describa esos elementos de funcionalidad por historias de usuario (u otra forma) y no olvide describir los criterios de aceptación (probablemente definidos por su aplicación actual y los cambios que espera el negocio). Ponga sus elementos funcionales en la cartera de pedidos. Luego, permita que el negocio priorice qué funcionalidad debe entregarse primero (trabajará de forma incremental e iterativa y la prioridad le dirá qué debe implementarse primero).
Una vez que tenga esto, al menos para parte de su aplicación original, estará listo para el desarrollo. Lo que suceda después depende de su metodología ágil seleccionada. La parte importante es que cada funcionalidad generalmente se puede dividir en múltiples tareas y los miembros del equipo seleccionarán qué tareas quieren hacer, eso se llama autoorganización. Cuando comienzas con agile, la autoorganización puede necesitar ayuda para que alguien se asegure de que las tareas impopulares y populares sean compartidas por igual por el equipo. Una vez que el equipo sea más maduro, los desarrolladores no dudarán en expresar su desacuerdo con la organización actual y esto se manejará automáticamente dentro del equipo.
Pensar en módulos desde el principio no tiene que ser una buena manera. Está reescribiendo la aplicación por alguna razón y tal vez la arquitectura actual de la aplicación basada en la separación incorrecta del módulo es una de las razones ocultas detrás de los problemas visibles. También puede encontrar que algunas funciones de los módulos existentes se redefinirán por completo y se trasladarán a otro lugar.
fuente
Aunque estoy de acuerdo con la respuesta de David, sentí que podría sacar provecho de algunos detalles:
Básicamente, la conclusión es: nadie aquí en SE puede responder esa pregunta por usted, ni tiene mucho sentido, porque es mucho mejor si encuentra una respuesta como equipo.
fuente
El enfoque más simple es a menudo el mejor.
Evitaría dividir las tareas en grupos como testing / log / UI / etc a menos que pueda definir algunas razones muy buenas y claras para hacerlo. Mi razonamiento es que cuando permite que los programadores trabajen fuera de sus áreas habituales de experiencia, puede hacer que las cosas sean más interesantes y desafiantes para ellos, y les permite desarrollarse y crecer dentro de su campo. Si cree que las limitaciones de tiempo requieren que divida el trabajo en función de la experiencia, como mínimo, asegúrese de que cada desarrollador aún tenga que realizar sus propias pruebas unitarias, y utilice la revisión del código y las pruebas de aceptación para resolver los problemas. Escribir sus propias pruebas es muy ágil, y esperar que el tiempo de los probadores esté disponible puede ser muy derrochador.
Cuando me enfrento a este mismo tipo de dilema, he empleado el siguiente enfoque:
Alcance del proyecto. Dése una idea sobre en qué se está metiendo y desarrolle una lista de características dividiendo el proyecto en una serie de tareas.
Priorizar características. Decida qué características deben completarse antes y cuáles proporcionarán un valor inmediato a sus clientes. No se preocupe si sus desarrolladores terminan trabajando en los mismos módulos, pero asegúrese de tener un buen proceso y herramientas para administrar las fusiones de código.
Involucre a su equipo y solicite a sus desarrolladores que lo ayuden a desglosar las características en una lista de tareas más fáciles de administrar. Revise como grupo y ajuste las tareas según sea necesario para que puedan estimarse más fácilmente.
Pídale a cada desarrollador que elija una tarea para implementar, o un grupo de tareas dependiendo de cómo se ejecutarán sus iteraciones, desde la parte superior de la cola de prioridad, en la que el desarrollador desea trabajar.
Haga que cada desarrollador trabaje en una sola cosa hasta que se complete antes de pasar a seleccionar el siguiente elemento de la parte superior de la cola de prioridad. Es posible que sienta la tentación de hacer que su personal cambie las tareas ocasionalmente, sin embargo, esto generará un desperdicio en términos del tiempo del desarrollador. Si se encuentra con cuellos de botella de dependencia, deberá ajustar las prioridades de su tarea y minimizar el desperdicio.
No tenga miedo de que los desarrolladores se ejecuten con iteraciones superpuestas, y administre sus versiones en consecuencia. Esto ayudará a minimizar el tiempo perdido entre lanzamientos esperando que se completen las tareas.
En última instancia, ser ágil se trata de encontrar una solución que funcione bien para su equipo, su empresa y sus clientes. Depende de usted ajustar su proceso al encontrar el equilibrio de prácticas que funcione mejor para usted. La forma de dividir sus tareas será una parte muy importante de un proceso mucho más grande, pero debe ser lo más simple posible para alentar la participación voluntaria y evitar problemas difíciles de resolver que se desarrollen más adelante.
fuente
Ninguna discusión organizacional del equipo desarrollador estaría completa sin mencionar el Equipo Quirúrgico del Dr. Fred Brooks .
La fórmula básica es: un equipo quirúrgico por unidad de trabajo
Definiendo un equipo quirúrgico
El concepto del equipo quirúrgico se basa en dos ideas fundamentales:
Un equipo quirúrgico está compuesto por 3-10 desarrolladores:
Definiendo una Unidad de Trabajo
Entonces, ahora que podemos formar un equipo, ¿qué les asignamos?
Debería ver emerger tres patrones básicos y aceptables:
fuente
Dependiendo del número de desarrolladores y módulos (y escalas de tiempo), generalmente hago que mis desarrolladores elijan un módulo interesante (para ellos) y un módulo desafiante (preferiblemente algo que no han hecho) y luego el resto lo divido por nivel de habilidad y limitaciones de tiempo Creo que esto les da a mis desarrolladores algo en lo que quieren trabajar y algo para impulsarlos.
Por supuesto, esto no siempre funciona ...
fuente
Esto es lo que haría:
Si todos los módulos son pequeños, puede dar a cada uno un módulo para trabajar. De lo contrario, haga esto:
Lo anterior no funcionará si las personas a las que no les gusta trabajar con otros son las más competentes y este es un caso común, así que haga una excepción a 4 y 5 en consecuencia
fuente