Cualquiera puede cambiar cualquier código. Responsabilidad compartida de toda la base de código.
En los modelos tradicionales, el código tiene propietarios. "Ese es el módulo de Alice." "Habla con Bob sobre la capa de base de datos." Esto crea problemas:
Cuellos de botella: Cuando Alice está de vacaciones, su módulo no puede cambiarse. Cuando Bob está ocupado, el trabajo de base de datos se acumula.
Silos: Las personas no entienden el código que no poseen. La integración se vuelve dolorosa.
Factor de autobús: Si Alice se va, el conocimiento se va con ella.
La propiedad colectiva significa que cualquiera en el equipo puede cambiar cualquier código. No hay territorios personales. El equipo es propietario de la base de código en conjunto.
Esto da miedo al principio. ¿No romperán las personas cosas que no entienden? ¿No se volverá inconsistente el código? ¿No surgirá el caos?
No si tienes las prácticas de apoyo.
El Equilibrio
La propiedad individual protege el código de cambios desinformados. La propiedad colectiva permite el flujo y el aprendizaje compartido. XP usa prácticas (pruebas, estándares, parejas) para obtener los beneficios de la propiedad colectiva sin el caos.
La propiedad colectiva requiere prácticas de apoyo:
Pruebas exhaustivas: Si rompes algo, las pruebas lo detectan inmediatamente. Esto hace que sea seguro para los no expertos cambiar código.
Programación en parejas: Al cambiar código desconocido, trabaja en pareja con alguien que lo conozca. El conocimiento se transfiere y los errores se detectan.
Estándares de codificación: Un estilo consistente significa que cualquiera puede leer cualquier código. No hay traducción entre "el estilo de Alice" y "el estilo de Bob."
Integración continua: Los cambios se integran inmediatamente. Si algo entra en conflicto o se rompe, lo sabes rápido.
Refactorización: Todos mejoran el código mientras trabajan. La base de código mejora, no empeora, con el tiempo.
Sin estas prácticas, la propiedad colectiva es caos. Con ellas, es liberadora.
La propiedad individual tiene su lugar. Proporciona:
Pero los costos son altos:
XP dice que los costos superan los beneficios. La propiedad compartida con prácticas de apoyo supera a la propiedad individual.
Algunos equipos usan un híbrido: propietarios primarios y secundarios. El primario conoce mejor el código; el secundario está aprendiendo. Esto proporciona experiencia mientras reduce el riesgo de cuello de botella.
Un desarrollador necesita corregir un error en un módulo desconocido. Abre el código, lee las pruebas, trabaja en pareja con alguien que conoce el área, hace la corrección y ejecuta todas las pruebas. El conocimiento se difunde.
Se encuentra un error crítico en el módulo de Alice. Alice está de vacaciones. El equipo decide esperar hasta que regrese porque nadie más 'debería' tocar su código. El error permanece en producción durante una semana.
Pasar a la propiedad colectiva puede ser difícil:
"¡Pero yo soy el experto!" Sigues siendo el experto. Trabajarás en pareja con otros cuando cambien tu código. Tu experiencia se difunde, no disminuye.
"La gente arruinará mi código." Las pruebas protegen contra errores. La revisión de código (o trabajar en parejas) detecta problemas. Y "tu" código no es realmente tuyo, es del equipo.
"No puedo mantenerme al día con todo el código." No tienes que hacerlo. Aprendes lo que necesitas cuando lo necesitas. Trabaja en pareja con expertos. Lee las pruebas. Sigue los estándares.
"Nuestro código es demasiado complejo para los no expertos." Eso es un mal olor del código, no un argumento de propiedad. El código complejo debe simplificarse. Hasta entonces, la programación en parejas protege contra cambios desinformados.
El cambio es tanto cultural como técnico. Requiere confianza, transparencia y una mentalidad de crecimiento.
Pasar a la propiedad colectiva gradualmente:
Semana 1-2: Trabaja en parejas entre dominios. Haz que los expertos trabajen en pareja con no expertos en el código de cada uno.
Semana 3-4: Elimina las etiquetas de propiedad explícitas. Deja de decir "el módulo de Alice." Comienza a decir "el módulo de pagos."
Semana 5-6: Fomenta la polinización cruzada. Al asignar historias, pon intencionalmente a las personas en código desconocido (con apoyo de parejas).
Continuo: Celebra el intercambio de conocimiento. Reconoce cuando alguien aprende una nueva área o cuando un "propietario" transfiere conocimiento exitosamente.
Mide el factor de autobús: ¿Cuántas personas pueden trabajar significativamente en cada área de la base de código? Apunta a al menos 2, idealmente 3+.
Una verificación rápida del factor de autobús: para cada área principal del código, ¿quién podría corregir un error de producción allí a las 3 AM? Si la respuesta es una persona, tienes un problema.