Se me ha encomendado la tarea de enseñar a otros equipos una nueva base de código, pero sigo teniendo problemas. Cada vez que voy a recorrer el código con las personas, no llegamos muy lejos antes de que todo el ejercicio se convierta en un ejercicio de eliminación de bicicletas (miembros de una organización que otorgan un peso desproporcionado a cuestiones triviales). Como no conocen la base de código, pero creen que necesitan ayudar a mejorarla, se centran en las cosas que pueden entender:
Why is that named that?
(2 minutos para explicar por qué se llama así, más de 10 minutos debatiendo un nuevo nombre)
Why is that an abstract base class rather than an interface?
(2 minutos para explicar, más de 10 minutos para debatir los méritos relativos de esta decisión)
...y así. Ahora, no me malinterpreten: los buenos nombres y el buen diseño consistente son importantes, pero nunca llegamos a discutir qué hace realmente el código o cómo está diseñado el sistema de manera significativa. He realizado algunas reuniones de arbitraje para sacar a la gente de estas tangentes, pero se han ido, distraídos por lo que el código será / debería ser cuando se arregle su trivialidad mascota, y se pierdan el panorama general.
Así que lo intentamos más tarde (o con una parte diferente de la base de código) y dado que la gente no tenía suficiente conocimiento para superar el efecto de cambio de bicicletas, se repite.
He intentado grupos más pequeños, grupos más grandes, código, pizarra, diagramas de visio, muros de texto gigantes, dejándolos simplemente discutirlo hasta la muerte, acortando los argumentos de inmediato ... algunos ayudan más que otros, pero nada funciona . Demonios, incluso intenté que otras personas de mi equipo lo explicaran porque pensé que podría ser que soy malo para explicar las cosas.
Entonces, ¿cómo educas a otros programadores lo suficiente como para que dejen de obsesionarse con las trivialidades y puedan contribuir significativamente al diseño?