¿Qué hacer cuando la funcionalidad crítica de una dependencia se rompe e impide el desarrollo?

12

Ayer estaba trabajando en un proyecto API de Rails 5 que está utilizando la biblioteca act-as-taggable-on para permitir que las cosas tengan etiquetas (como preguntas en SE). Rails 5 está en soporte alfa en este momento. Actualmente hay un RP para corregir un error que espera fusionarse en maestro; el error causó que mi rama de características se detuviera a la mitad de la finalización: no pude implementar ninguna de las funciones de la biblioteca porque la carga se interrumpió.

Como solución rápida, simplemente cloné el repositorio, arreglé el problema con el mismo código que tenía el RP y apunté mi Gemfile (archivo de control de versión de dependencia) a mi propia bifurcación de Github, hasta que la corrección de errores finalmente se fusionó nuevamente en el maestro.

Tuve suerte de que la solución fuera simple ( y de que alguien ya lo hubiera hecho ), así que pude solucionar el problema. Pero, ¿y si esta biblioteca fuera crítica para el desarrollo de mi aplicación? ¿Qué pasa si la corrección de errores que estaba deteniendo mi desarrollo no era un problema generalizado para otras personas , por lo que la solución no se produjo rápidamente como lo hizo esta vez?

Imagine que esta característica necesita ser completada antes del desarrollo en otras características dependientes . ¿Qué hace en esa situación? ¿Qué pasaría si, para mí, el etiquetado fuera absolutamente crítico para la siguiente frase de desarrollo, donde todo lo demás dependía de él, pero la dependencia del etiquetado está defectuosa para mi configuración? ¿Qué hace uno cuando la funcionalidad crítica de una dependencia impide el desarrollo de (a) características?

Y, seguramente, las peleas de espadas en sillas de oficina durante horas o días no son una opción ...

Chris Cirefice
fuente

Respuestas:

19

Esta es una de las razones por las que está utilizando software de código abierto, ¿verdad?

Podría hacer el mismo argumento para "¿qué sucede si mi biblioteca muy costosa, propietaria y de código cerrado se cae repentinamente? ¿Habrá alguien disponible en [una gran compañía de software monolítico] para arreglarlo?" Con el software de código abierto, al menos tiene la oportunidad de corregir ese error usted mismo.

Si su software toma una dependencia crítica de una biblioteca de código abierto, hay tres cosas que puede hacer para mitigar el riesgo:

  1. Familiarícese con la base del código, tal vez incluso haciendo contribuciones usted mismo. Esta es otra razón por la que elegiste el código abierto, ¿verdad?

  2. Tenga una biblioteca alternativa si la primera biblioteca se cae. Es por eso que programa a las interfaces; para que pueda cambiar la implementación si es necesario, ¿verdad?

  3. Equilibre su deseo de vanguardia con su necesidad de estabilidad (es decir, no use el software alpha). Sabías en lo que te metías, ¿verdad?

Robert Harvey
fuente
Gracias por tu respuesta Robert; sí, decidí usar Rails 5 para sus nuevas funciones, y no había planeado completamente el proyecto y no sabía que esta biblioteca tendría problemas de compatibilidad con Rails 5. Sin embargo, está bien, dejé esa rama como WIP y Estoy monitoreando el repositorio de Github para la solución. Supongo que una de las principales lecciones aquí es planificar bien . Si hubiera investigado más de una hora antes de comenzar el desarrollo, ¡habría visto el problema!
Chris Cirefice
11

La solución para desarrollar aplicaciones donde los errores o la falta de características tienen un alto riesgo de detener su trabajo es no usar bibliotecas de alto riesgo. Aburrido y cojo, lo sé ...

Dijiste que esta es una versión alfa. No use versiones alfa para proyectos críticos. Ni siquiera es una versión beta, y mucho menos 1.0, por lo que es de esperar este tipo de cosas. El objetivo de esta etapa de un proyecto es encontrar problemas y fortalecer el proyecto.

Si te encuentras en esta situación, básicamente tienes que hacer lo que hiciste (hemos hecho exactamente lo mismo). Arreglarlo y PR el proyecto.

Pero la solución está utilizando bibliotecas más estables con funcionalidades y API entendidas o al menos manteniendo la compatibilidad con versiones anteriores. Debe tener cuidado al depender al 100% de algo sobre lo que no tiene control y que necesita para tener éxito.

Enderland
fuente
1

Por lo general, se recomienda ocultar bibliotecas de terceros detrás de adaptadores o envoltorios que usted mismo escriba. Esto tiene dos ventajas:

  • Puede cambiar la biblioteca de terceros por otra sin cambiar ningún código
  • Puede programar el resto de su código contra su propia interfaz de adaptador. En caso de un problema temporal con la biblioteca, simplemente conecte su propio stub / falso o versión simplificada de la funcionalidad de la biblioteca. De ese modo, el desarrollo y las pruebas de las funciones posteriores no se bloquean (aunque la implementación del programa completo aún lo está).
jhyot
fuente