¿La propiedad de características es una buena práctica?

22

Recientemente en mi empresa se ha sugerido que un desarrollador debe centrarse (y solo uno) en una función. Eso significaría algo como dejar al desarrollador a un lado de la rutina normal del equipo, liberarlo de algunas otras responsabilidades (reuniones y demás) y esta persona sería el "único" responsable de la función, en cuanto a tecnología.

Para el registro, usamos SCRUM dentro de SAFe, y tenemos desarrolladores a tiempo completo por equipo, compartiendo el control de calidad y los propietarios de productos entre nuestros dos equipos (Android e iOS).

Si bien estoy de acuerdo en que esto aumentaría la productividad a corto plazo, tengo la sensación (y creo que lo aprendí en la universidad) de que esta es una mala práctica por muchas razones:

  • La revisión del código pierde valor.
  • Mínimo intercambio de conocimientos.
  • Incremento de riesgo.
  • Pérdida de flexibilidad del equipo.

¿Tengo razón o no es una mala práctica?

mdelolmo
fuente
3
Mi reacción inmediata es que esto podría funcionar si se hace con moderación, pero tiene razón sobre los problemas si se lleva demasiado lejos. Por otro lado, mi experiencia es que cada característica ya tiene un propietario de facto: la última persona que pasó mucho tiempo trabajando en ella.
Ixrec
" un desarrollador debe enfocarse (y solo uno) ": si desea un SPOF, es una buena idea hacerlo de esa manera. Recientemente formulé una teoría empírica en el sentido de que la persona que más necesita en una determinada situación (" ¡¿wtf?!? ¿Por qué la escribió de esa manera? ") Suele ser exactamente la que en realidad es absolutamente inalcanzable.
JensG
@JensG: meh, tengo una teoría empírica de que la persona que más necesito ("wtf? ¿Por qué la escribió de esa manera?") Soy yo y, como tal, el factor determinante para "recordar cosas que deberían haber sido escritas en ese momento "es 0. Es más notable cuando alguien más me bloquea, porque me preocupo por eso en lugar de volver a examinar el código existente desde cero por sus propios méritos ;-)
Steve Jessop
@SteveJessop: Claro, tratar de rediseñar la forma de pensar de otras personas examinando un montón de KLOC de su código mientras el cliente te grita que necesita una solución ahorao de lo contrario! ) Puede ser una buena idea para algunas personas, pero yo No soy lo suficientemente nerd como para ver algo gracioso en perder el tiempo que podría gastar más productivamente.
JensG
@JensG: afortunadamente, mis clientes están mejor socializados que los suyos. Por lo tanto, no estoy bajo tanta presión como para involucrarme en el tipo de pensamiento mágico que resulta en la conclusión de que ser importante para mí realmente hace que las personas sean menos accesibles para mí. Como tal, pensé que había un elemento de broma en lo que dijiste, así que sí, soy lo suficientemente nervioso como para encontrar una situación divertida en la que compensas el código incomprensible al tratar de mantener a varias personas cerca que recuerdan cómo funciona. Especialmente porque tales wtfs son frecuentemente mi culpa estúpida y no la de mis colegas.
Steve Jessop

Respuestas:

37

En mis 20 años de experiencia, es mejor tener la propiedad del código para rotar las responsabilidades entre los diseñadores o al menos tener un par de propietarios. La propiedad de una sola característica tiene los siguientes problemas, varios de los cuales mencionó:

  • tiende a encasillar a los diseñadores y limita sus oportunidades de crecimiento
  • pone todos los huevos en una canasta, por lo que si alguien es atropellado por un autobús o se detiene, puede haber un vacío en el conocimiento
  • una sola persona puede no ver un problema en el código y sin un par de revisiones de código de propietario son mucho menos eficaces
  • es difícil mantener la coherencia y la legibilidad del código si todos están trabajando en el código usando su propio estilo; si bien esto se puede solucionar con pautas de estilo, las sutilezas pueden aparecer especialmente cuando se usa la convención sobre la configuración en la que las personas confían en el comportamiento predeterminado
  • los desarrolladores pueden tender a ser protectores y defensivos de su código si lo poseen, lo que puede inhibir la evolución del código; si varias personas lo poseen, esta tendencia se reduce
Jason K.
fuente
66
Absolutamente. Es importante mencionar el factor del autobús como el problema más evidente con una propiedad de una sola persona.
JensG
1
Sin embargo, el factor del bus debe intercambiarse con el costo y el YAGNI, y si el bus realmente paralizaría su organización o simplemente causaría muchos problemas. Si fuera una opción entre perder, digamos, 3 horas a la semana para siempre, asegurando que dos personas estén educadas sobre un código particular en lugar de solo uno, o perder, por ejemplo, 60 horas como una sola vez para que alguien se críe acelerar en caso de que uno de sus desarrolladores sea golpeado, luego, en muchos casos, elegiría el costo único. Pero por las razones indicadas, los silos de conocimiento tienen otras desventajas más importantes (aunque menos evidentes).
Steve Jessop
13

La propiedad de funciones es inevitable, y hacerlo bien puede ser algo bueno. Ayuda a construir el dominio y permite la autonomía, dos de los pilares de compromiso generalmente reconocidos . Deja en claro quién tiene la responsabilidad de ese código y ayuda a la delegación, la comunicación y, de lo contrario, a hacer la mierda.

Pero no estás hablando de eso. Estás hablando de formar un nuevo equipo de uno: separar a esta persona del resto del código. Eso no es genial. Limita su carrera. Agrega riesgo al proyecto / empresa. Daña a la camaradería.

Por lo tanto, podría haber moderación para alejar esto de una mala idea.

Telastyn
fuente
1
No estoy de acuerdo con que la propiedad del código de una sola persona sea inevitable, pero será propiedad de un pequeño número de personas. He visto organizaciones que hicieron un mal trabajo al compartir código, pero lo hicieron igual. Las configuraciones más efectivas que vi fueron cuando 2 o 3 personas conocían fragmentos de código y colaboraban. Esto redujo el estrés y el aislamiento entre los programadores porque no estaban solos cuando las cosas fallaban y las características rezagadas podían recibir más atención para cumplir con los plazos sin las rampas de capacitación rápida de otras personas en la organización.
Jason K.
1
@jason: claro, debería haber algunas personas en el equipo cómodas y capaces de trabajar en un código. Pero una persona terminará siendo el experto en la materia simplemente por trabajar más en él.
Telastyn
Estoy de acuerdo en que eso sucede a menudo, es el escenario más probable y que la experiencia en el tema es algo bueno; solo estoy en desacuerdo porque es inevitable simplemente porque he visto un mayor éxito con varias personas como PYME en un área al tener una superposición considerable
Jason K .