Lights.

馃寠 Una gu铆a para la elecci贸n de dependencias

February 08, 2024

Introducci贸n

Esta es una peque帽a gu铆a para tratar de simplificar el proceso de elecci贸n de estas dependencias que invite a la reflexi贸n y el debate dentro de los equipos de desarrollo con el objetivo de que los pilares de nuestra aplicaci贸n sean lo m谩s s贸lidos posibles.

Esto no garantiza que en futuro no tengamos que cambiar nuestras dependencias, por lo que siempre es recomendable hacer uso de t茅cnicas como la inyecci贸n de dependencias y wrappers de librer铆as para abstraer nuestro c贸digo de negocio lo m谩s posible de estas dependencia y ayudando a simplificar los cambios lo m谩ximo posible.

Riesgos

Tenemos que tener en cuenta que hacer uso de dependencias de terceros puede conllevar riesgos que pongan en jaque la confianza de clientes e inversores. Por ejemplo, en los negocios que trabajan con datos la seguridad es un valor muy importante a tener en cuenta y tener vulnerabilidades no es una opci贸n.

Algunos riesgos de usar dependencias de terceros:

Vulnerabilidades

Con el paso del tiempo, las dependencias que no se actualicen frecuentemente son v铆ctimas de m煤ltiples exploits. Esto es un riesgo a帽adido que debemos limitar para que la confianza de nuestro c贸digo no implique perdida de confianza de la organizaci贸n.

Coste de aprendizaje

Adoptar soluciones de terceros siempre tienen curva de aprendizaje. Siempre tendremos que tender a reducirla as铆 como dej谩rselo f谩cil a aquellos desarrolladores que van a trabajar despu茅s de que nosotros nos hayamos marchado.

Coste de mantenimiento

Este coste, aunque es menor que el coste de generar y mantener nuestro propio c贸digo, tambi茅n es algo a tener en cuenta, ya que muchas veces, librer铆as y frameworks suelen tener conflictos entre ellos, cosa que hay que solucionar.

Riesgo de abandono por parte del creador

Este siempre es un riesgo que existe, no solo en desarrollo de software, sino en cualquier herramienta de terceros. Notion, la herramienta con la que estoy escribiendo ahora mismo, ma帽ana podr铆a cerrar y mandar a la papelera todo mi trabajo. 驴Por qu茅 sigo trabajando en Notion entonces? Porque tengo la confianza de que no lo har谩 o al menos no lo har谩 pr贸ximamente, lo que me dar谩 un tiempo para buscar otra alternativa.

Entonces, asumiendo este riesgo, debemos encontrar herramientas que sean merecedoras de nuestra confianza y sepamos que no van a caer en los pr贸ximos a帽os. (Aunque nunca se sabe!)

驴Necesitamos una dependencia?

Lo primero antes de lanzarse a la elecci贸n de una dependencia debemos plantearnos si realmente la necesitamos.

驴Existe una soluci贸n con las librer铆as por defecto que puedan solucionar el problema?

Si existe no necesitamos buscar m谩s.

驴Podemos desarrollar una soluci贸n?

Si la respuesta es s铆 hay que valorar si merece la pena en t茅rminos de tiempo, esfuerzo y mantenimiento del c贸digo.

Criterios para elegir una dependencia

A continuaci贸n vamos a ver una serie de criterios que considero importantes a la hora de elegir una dependencia. Puede haber muchos m谩s y tenemos que adaptarnos a nuestro caso particular. Estas son solo unas sugerencias para poder empezar.

Impacto de la dependencia en el negocio

Nunca est谩 de m谩s analizar el impacto tiene la adopci贸n de una dependencia en nuestro negocio, as铆 como reflexionar sobre qu茅 pasar铆a en caso de error fatal.

Esto nos guiar谩 a la hora de decidir si queremos hacer un desarrollo propio o depender de un tercero.

Por lo general, no se suele depender de terceros cuando nuestro negocio depende de ello. Se suelen adoptar soluciones de terceros en detalles referidos a la infraestructura, ya sea propia tecnolog铆a como bases de datos o comunicaci贸n HTTP. Tambi茅n operaciones que no son core de negocio, como la autenticaci贸n de usuarios, frameworks de front end, frameworks de inyecci贸n de dependencias entre otros muchos ejemplos.

Por ejemplo, en el caso de una librer铆a de autenticaci贸n, si se detectan vulnerabilidades recurrentes o incluso su sistema se ve comprometido, siempre podremos migrar a otro sistema de autenticaci贸n. Ser铆a un bache en el camino sin duda, pero podr铆amos recuperarnos.

Para minimizar este riesgo, podemos analizar otros criterios.

Popularidad

El nivel de popularidad de una dependencia siempre es un buen indicativo ya que, un alto nivel de adopci贸n por la comunidad indica que su fiabilidad ha sido probada por una gran cantidad de developers.

Para medir la popularidad de una dependencia podemos fijarnos en el n煤mero de descargas que tiene, ya sean semanales, mensuales o en total. Tambi茅n es deseable ver la tendencia de uso de la librer铆a. Si esta es descendente casi que podemos concluir que hay otras opciones mejores en el mercado.

Por otro lado, la cantidad de estrellas y forks en Github nos puede dar informaci贸n valiosa sobre su popularidad. Sin embargo, tenemos que cuidarnos de que estas estrellas no sean fruto de plataformas de venta de estrellas de github. Si bien es verdad que es una pr谩ctica minoritaria, esta m茅trica tenemos que analizarla en contexto con otras m茅tricas para demostrar su veracidad.

Mantenimiento

El mantenimiento de la soluci贸n que vayamos a adoptar es vital. No queremos estar trabajando con una dependencia y darnos cuenta que hace 3 a帽os que no es actualizada.

Para asegurarnos de que la dependencia est谩 adecuadamente mantenida, nos fijaremos en la 煤ltima fecha de actualizaci贸n, as铆 como la frecuencia de actualizaciones. Es deseable tambi茅n que se incluya un change log que especifique los cambios en cada versi贸n, cosa que nos orientar谩 en los cambios que debemos hacer en caso de que rompa nuestra build.

Por otro lado, podemos analizar los Issues y las Pull Requests de Github. Podemos mirar superficialmente el n煤mero de Issues y Pull Requests lo que nos puede dar una ligera idea del estado de salud de la librer铆a. Sin embargo, para que sea una m茅trica de verdad a tener en cuenta podemos analizar la calidad de estos Issues y PR. Ver issues cerrados y comprobar si son resueltos por los mantenedores o la archivan sin solucionarlo. Ver si las PR son mergeadas o rechazadas sin ninguna raz贸n. Sobre todo, valorar si el mantenedor de la dependencia tiene una buena comunicaci贸n con respecto a los posibles problemas de la dependencia o mejoras funcionales.

Otra informaci贸n interesante es saber qui茅n o quienes mantienen la dependencia. 驴Una sola persona? 驴Un grupo de desarrolladores? 驴La comunidad? 驴Una empresa?

Documentaci贸n

Una buena documentaci贸n y gu铆as de como usar la dependencia pueden hacer que nos decantemos por una u otra, siendo este uno de los puntos m谩s importantes puesto que, reducir la curva de aprendizaje es muy importante.

Comunidad

Que exista una comunidad activa detr谩s del producto siempre es una buena se帽al. Que haya preguntas y discusiones siempre enriquecedor para todos los usuarios y para los creadores de la herramienta.

En muchos repositorios de estos paquetes podemos encontrar la secci贸n de Discussions que viene a ser un foro donde interact煤a la comunidad. Tambi茅n podemos buscar en las p谩ginas oficiales en las que a veces encontramos foros oficiales.

Conclusi贸n

En definitiva, para elegir una dependencia hay que tener en cuenta:

  • Popularidad
    • N潞 de descargas
    • Tendencia de uso
    • Estrellas y forks de Github
  • Mantenimiento
    • Fecha de la 煤ltima actualizaci贸n
    • Frecuencia de actualizaciones
    • Calidad del change log
    • Issues y Pull Requests
    • Qui茅n o quienes mantienen la dependencia
  • Documentaci贸n
  • Comunidad

Como ya hemos indicado anteriormente, estas son varios de los criterios que nos pueden guiar nuestra elecci贸n, pero no quiere decir que sean los 煤nicos y que tengan el mismo valor en todas las situaciones. As铆 que siempre tendremos que adaptarnos a nuestro caso en particular, qu茅 problema tenemos y qu茅 criterios tienen m谩s valor a la hora de elegir nuestra dependencia.

Gracias a Eric Driussi por hacer este post mejor.