Autor en Google+
Saltar al contenido

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web ASP.NET, ASP.NET Core, MVC, SignalR, Entity Framework, C#, Azure, Javascript... y lo que venga ;)

10 años online 🎂

el blog de José M. Aguilar

Inicio El autor Contactar

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web
ASP.NET, ASP.NET Core, MVC, SignalR, Entity Framework, C#, Azure, Javascript...

¡Microsoft MVP!
martes, 2 de febrero de 2016
Ojo a los autobusesMe encanta encontrar definiciones más o menos conocidas de conceptos o ideas que se nos han pasado por la cabeza en algún momento sin saber que otros ya les habían dado forma, porque demuestra que todos los que nos dedicamos a esto tenemos poco más o menos las mismas inquietudes.

En este caso, me ha entusiasmado dar por casualidad con el "bus factor", un término que seguro muchos conocíais pero para mi ha sido un descubrimiento reciente, que básicamente da forma a la pregunta que seguro que todos nos hemos hecho sobre la continuidad de algunos proyectos ante determinados acontecimientos inesperados.

Imaginemos que todo el equipo de desarrollo de un proyecto va caminando por la calle, y un autobús que circulaba cerca pierde el control y les arrolla de forma violenta. ¿A cuántos miembros del equipo tendría que afectar fatalmente este accidente para poner en gran peligro la continuidad del proyecto?

"The bus factor connotes the number of team members that can be unexpectedly lost from a project ('by a bus', as it were) before the project collapses due to lack of knowledgeable or competent personnel"

-- Bus Factor (Wikipedia)
Pues bien, ese número es el "Bus factor", también es conocido por variantes como "Truck factor" o "Lorry factor" o similares, atendiendo al tipo de objeto que provocaría el estropicio. Básicamente, es una medida de la concentración de información y conocimiento en determinadas personas del equipo, y es peor cuanto más pequeño resulta.

Un valor de uno es el mínimo, y seguro que lo reconocéis en muchos proyectos que habréis visto a lo largo de los años: indica que toda la información y conocimientos vitales del proyecto están depositados en una única persona, por lo que bastaría con que el autobús se cebara con ella para que el proyecto fuera al traste. Como muestra, hace años se decía que Linux tenía un Bus factor 1, lo cual se entendía como un gran riesgo para el proyecto por la gran dependencia que existía hacia su creador.

Por aportar algo a la causa, yo casi añadiría que también existe un "Bus factor 0": proyectos que se ve a la legua que van a ir al traste aunque el autobús no atropelle a nadie, pero esto es harina de otro costal… ;)

En bastantes empresas y proyectos de tamaño pequeño o mediano es curioso, a la vez que espeluznante, ver que el Bus factor suele ser uno, o acercarse peligrosamente a este valor. Esto podemos detectarlo fácilmente, por ejemplo, cuando:
  • La visión completa del proyecto está concentrada en muy pocas personas.
  • El equipo tiene uno o algunos key developers, cowboys o rockstars que llevan sobre sus hombros gran parte del desarrollo.
  • Hay "zonas delicadas" en el código, que sólo algunos pocos iluminados son capaces de entender y tocar.
  • Hay información secreta o datos que conocen pocas personas.
  • Hay demasiada especialización en los miembros del equipo, por lo que cada uno gestiona áreas o tecnologías en la que no entran los demás y gestionan en exclusividad.
  • Hay pocas personas con implicación real en el proyecto o el equipo está muy desmotivado.
Claro, la probabilidad del accidente descrito anteriormente ocurra es bastante escasa, pero pero no hay que ser tan trágico para ver la importancia del riesgo que conlleva que el bus factor sea muy bajo. Existen muchísimos motivos que pueden llevar a que un miembro clave del equipo sea vea forzado o decida abandonarlo temporal o definitivamente (vacaciones, cambios en situación familiar, enfermedades, búsqueda de nuevos retos, traslados, etc.), y en todos estos escenarios un bus factor bajo hará que el proyecto se tambalee, o al menos se resienta notablemente.

Para mejorar el bus factor se pueden tomar una serie de medidas, principalmente relacionadas con mejorar la comunicación y hacer que la información y conocimiento esté lo más distribuido posible entre los miembros del equipo. Algunas prácticas que podrían ayudar a ello son:
  • Mantener al equipo continuamente actualizado sobre el avance del proyecto. Por ejemplo, los stand-up meetings de Scrum o Kanban son una buena forma de poner en común los progresos, lo que cada uno hace, lo que piensa hacer o los problemas que está encontrando.
  • Evitar secretismos o información restringida, facilitando la colaboración y el libre intercambio de información entre los miembros del equipo.
  • Tener todos los activos del proyecto siempre disponibles en repositorios compartidos o almacenamientos a los que sea fácil acceder por parte de los miembros del equipo.
  • Hacer a las personas partícipes y responsables del proyecto. Aumentar la sensación de "este es mi proyecto" en lugar de que cada uno se centre en una tecnología, funcionalidad o área. Favorecer la compartición colectiva del código, evitando propietarios en exclusiva de partes específicas.
  • Aumentar la redundancia en habilidades y conocimientos. Esto puede conseguirse promoviendo la formación interna para romper la tendencia natural a la especialización, o llevando a cabo prácticas como pair programming con mucha rotación, pair o code reviews frecuentes.
  • Seguir convenciones y estándares comunes que hagan sencillo el movimiento de responsabilidades de un miembro del equipo a otro.
  • Evitar complejidad excesiva y grandes ideas geniales que sólo unos pocos serán capaz de entender en el futuro. Si estamos seguros de que hay partes del código que no entenderemos ni nosotros mismos algo más adelante, ya estamos tardando en replantearla. El código mantenible es fundamental, así como un cierto nivel de documentación, especialmente los procesos clave.
  • Por último, si el equipo de desarrollo es excesivamente pequeño, tiene mala solución; llevándolo al extremo, imaginad un proyecto que tira adelante con un único desarrollador. Aumentar el bus factor pasa irremediablemente por aumentar el tamaño del equipo. Si esto no es posible, la solución es aún más compleja: la forma de minimizar el riesgo sería aumentando el volumen y calidad de la documentación, de forma que ésta pudiera servir como base para retomar el proyecto si algo sucediera.
Y por vuestra parte, estimados amigos, ¿cuál es el Bus factor de vuestros proyectos? ¿hacéis o hace vuestra empresa algo para mejorarlo? (Admitimos comentarios anónimos XD)

Publicado en Variable not found.

_______________________________________
Referencias y más información en:

Estos contenidos se publican bajo una licencia de Creative Commons Licencia Reconocimiento-No comercial-Compartir bajo la misma licencia 3.0 España de Creative Commons

5 Comentarios:

pge dijo...

Hola Jose, felicidades por el artículo. No conocía este término y creo que es bastante acertado para lo que representa.

En mi empresa es raro el proyecto que este factor es más de uno y creo que no hay conciencia del peligro que supone. Le pasaré el link al jefe a ver si se entera de que tenemos que hacer más equipo XD

Saludos

Anónimo dijo...

Amigo, me temo que ese factor 1 es lo más alto que te vas a encontrar normalmente :(

Juan Parra dijo...

+1 a los proyectos con bus factor cero, lol

Interesante post!

Mauricio Montoya Medrano dijo...

Excelente artículo, cayo de pelos para el proyecto que estoy iniciando con mi equipo de trabajo. Muchas gracias.

Pacheco dijo...

Grande el post, José. Tampoco conocía el "bus factor" pero alguna vez había pensado en el riesgo que tiene para un proyecto la concentración de conocimientos en personas concretas y siempre he intentado que no ocurra.

En mi proyecto actual con un equipo de 6 personas, creo que el autobús tendría que atropellar al menos a cuatro (Dios no lo quiera) para que realmente supusiera un peligro para su continuidad. Obviamente tal percance frenaría su desarrollo, pero no supondría su extinción.

Tema interesante que da para reflexionar un rato sobre cómo hacemos las cosas.

Un saludo y enhorabuena por el post.