Cohesión, acoplamiento e intereses separados en grupos de trabajo.
Quienes estudiamos computación en algún momento de la carrera nos han enseñado de la importancia de la cohesion, el acoplamiento y la separación de intereses. *
Esas características tienen fuerzas en algún sentido opuestas, y la práctica nos ha enseñado a que cuando se logra hacer programas, clases, módulos, servicios, sistemas enteros, etc que tengan ALTA COHESIÓN, BAJO ACOPLAMIENTO e INTERESES SEPARADOS, es mucho más fácil mantener y agregar cambios a los sistemas. En conclusión, se tiene mayor productividad, se pueden hacer más cosas, con menos esfuerzo. Esto es algo un poco contraintuitivo, pues lograr esto en los sistemas, da más trabajo al principio, pero se paga con creces en lo que se ahorra en el futuro.
En lo que no me había puesto a pensar nunca, era en aplicar estos conceptos, a los grupos humanos que producen software. Estudiando porque algunos grupos logran una alta productividad y otros no tanto, veo que muchas veces los grupos que tienen problemas de productividad es porque se trancan en temas que no depende de ellos, pues están altamente acoplados a algún factor externo que los limita y ellos no lo pueden hacer.
Y por otro lado, los grupos que tienen mayor productividad, son aquellos que tienen alta cohesion (tienen trabajos muy relacionados), bajo acoplamiento (no dependen de otros grupos y toman decisiones por ellos mismos) y tienen intereses separados con el resto de la organización (lo que hagan no va a ser resistido por otro grupo).
Supongo que esto se puede también generalizar a nivel de empresas, industrias y países, pero es un ejercicio que me supera por el momento.
Por el momento me conformo con tratar de lograr armar equipos que tengan alta productividad y tener estos factores en cuenta, teniendo en cuenta que siempre habrá acoplamiento (es imposible ser 100% independiente, porque sale carísimo), que la alta cohesión hace tender a tener grupos enormes (mas grande de lo necesario) y lograr separar los intereses de los diferentes grupos implica una gestion y coordinación entre los diferentes grupos.
* Suena mejor en inglés, como mucha cosa en computación, Cohesion, Coupling, and Separation of Concerns
¡Muito interesante, parabens!
ResponderBorrar