Si trabajan o han trabajado en una startup sabrán que unas de las mayores ventajas es la posibilidad de implementar tecnologías relativamente nuevas o que son tendencia, esto esta super cool ya que además a la par te brinda la oportunidad de explorar stacks que son o serán muy demandados en el mercado, ahora esto puede ser una "navaja de doble filo" y más si la responsabilidad de implementación (o el que alzó la mano para sugerirla fuiste tu) ya que algunas tecnologías pueden nacer con mucha fuerza pero después pueden pasar al olvido o simplemente son reemplazadas, en este artículo quiero mencionar 5 pasos o técnicas que me han servido para indagar la viabilidad de la implementación de una tecnología

Como mencione anteriormente y hablando en mi contexto las startups tienden a darse bastante libertad con las soluciones que implementan, para estos casos me gusta citar la Figura 1 este gráfico se aprecia donde las startups generalmente podrían ubicarse, en innovadores por ejemplo están empresas más grandes como google, amazon y microsoft que se pueden dar ese lujo de "probar y fracasar" sin mucho impacto,  las startups se ubican en adoptadores tempranos es decir cuando la implementación de los innovadores les funcionó o fue un exito, aqui todavia existe un riesgo de que esta tecnología fracase o simplemente no  aplique para lo que se necesita, por eso a continuación explicaré algunas técnicas que recientemente me han servido para poder validar estas tecnologías antes de lanzarse de lleno a implementarlas

Figura 1 Theory of Innovation. Tomado de la pagina "Smartinsights"

1. Licenciamiento de la tecnología

Existen una gran variedad de licencias, dentro del mundo del software encontramos unas que son bastante permisivas , otras que no tanto y algunas muy ambiguas, en este punto es importante saber para que se requiere esta tecnología, por ejemplo una de las licencias más comunes  que nos encontramos es la MIT como se Aprecia en la Figura 2  este es una de las licencias ideales pues es permisiva y bastante simple

Figura 2 Descripción de la licencia MIT

Pero se debe tener cuidado sobre el uso que queremos dar, ya sea que se requiera usar esta tecnología de manera privada en la empresa, o si se planea usar de manera comercial , un caso bastante interesante para analizar sería una tecnología que quería utilizar hace poco, esta utiliza la licencia Apache 2  la cual sus permisos se pueden ver en la Figura 3 y que también es bastante permisiva, sin embargo esta venía condicionada por commonclause esta cláusula condiciona la venta del producto, es decir no permite que se venda esta tecnología tal cual como está sin realizar ningún cambio, esto se basa en el principio de valor agregado, sin embargo la licencia puede ser ambigua, ya que para poder explotar de manera comercial esta tecnología, entre otras cosas  la tecnología no debe ser el core del producto final que se desea comercializar, esto ha generado mucho debate , sin duda alguna al utilizar estas cláusulas en la tecnología deja de ser open source por los principios mismos, por eso es muy importante este análisis y más si se usara dentro de una empresa, una herramienta muy útil para revisar cada licencia es la página choosealicense

Figura 3 Descripción de la licencia Apache 2.0

2. Validación del repositorio

Actualmente creo que sería raro encontrar alguna librería o framework que no esté disponible en un repositorio (aunque algunas que he usado no muy conocidas solamente documentan la información para ser publicadas en el gestor de paquetes) a continuación dejaré las razones por las cuales es importante que estén disponibles en algún repositorio de código abierto

  • Issues: creo que con ester sería suficiente (y los que han pasado por errores raros me entenderán) aquí se publican entre otros, bugs encontrados, errores de usuarios e incluso también sugerencias de nuevos features para futuras versiones, esto muchas veces complementa a stackoverflow y también permite visualizar que tan activa es la comunidad viendo la participación en las preguntas cómo se puede apreciar en la Figura 4
Figura 4 Ejemplo de bugs y issues en github
  • Pull Request(PR) son básicamente los aportes de mejoras o soluciones a bugs que realiza la comunidad (algunos conectados con los issues) esto demuestra el crecimiento no solo en código, si no tambien documentación, ejemplos de implementación etc, como se aprecia en la Figura 5, algunas herramientas sobre todo más pequeñas no tienen abierto los PR esto por que requiere atención del creador para revisarlos, sin embargo es por eso que precisamente tener esta característica demuestra que los creadores generalmente dedican gran cantidad de tiempo a trabajar en ella (a veces incluso full time)
Figura 5  pull request de un repositorio publico
  • Branchs El uso de ramas es otro beneficio grandísimo, en este contexto como consumidores de la tecnología nos permite si es el caso escoger otra versión de la librería o framework diferente de la del último release de manera sencilla, solamente clona la rama que se desea,  por ejemplo si la tecnología era compatible en una versión pero actualmente ya no lo es o aún no lo es (aunque no sería la mejor práctica) se podría utilizar la versión  disponible dentro de sus ramas como se ve en la Figura 6
Figura 6  releases lanzados en la ramas del repositorio
  • Wiki En el caso de github tenemos esta increíble opción que contiene información básica del proyecto sobre canales de comunicación adicionales pero también algo genial es que contiene información de librerías derivadas de la librería principal que complementan la herramienta y que muchas veces se aplican a lo que buscamos y nos permite ahorrar tiempo

3. Validación del feedback actual del repositorio

El feedback que ha dado la comunidad sobre una  librería o framework es otro de los grandes parámetros para saber la viabilidad de la implementación de esta tecnología, para el caso podríamos tomar por ejemplo github y evaluar sobre el número de estrellas (esta técnica se la vi por primera vez a mi amigo @carlosivan ) que esta tecnología tiene, para ello me apoyaré sobre la herramienta star-history la cual permite visualizar el crecimiento que ha tenido un repositorio de código en función de estrellas desde el lanzamiento de su primer release como se puede apreciar en la Figura 7 (use de ejemplo el repositorio diagrams)

Figura 7 resultado de evaluacion de estrellas de github en el tiempo

Además en diferentes tecnologías se tiene gestores de paquetes por ejemplo tenemos npm donde desde la versión web se pueden ver las cantidades de descarga semanales, por mes o incluso por año como se aprecia en la Figura 8

Figura 8 información sobre la librería express en npm

Más de 12 millones de descargas en una semana para la librería express con este indicador ya tenemos una visión muchísimo más clara y si aun tienen dudas la herramienta libraries te proporcionará un feedback total con más de 4 millones de paquetes open source indexados en diferentes tecnologías (javascript, python, go) como se puede ver en la Figura 9

Figura 9  información del framework Django en libraries

libraries proporciona un feedback completo desde información de su repositorio hasta parte del README y como se instala en su respectivo manejador de paquetes

4. Consulta de casos de éxito a destacar y las problemáticas resueltas

Esta información es valiosa ya que de aquí podemos incluso encontrar si algun caso de estudio resolvió un problema similar al que tenemos, generalmente esta información se encuentra al inicio de la documentación de cada librería por ejemplo como es el caso de la herramienta pydantic

Figura 11 proyectos que usan la librería pydantic

En los servicios en nube incluso se puede apreciar un poco mejor este punto por ejemplo para AWS S3 como se aprecia en la Figura 11 se pueden ver casos de uso utilizando este servicio

Figura 11 casos de éxito utilizando el servicio AWS S3

Incluso se encuentran videos y material didácticos (con arquitecturas utilizadas) que además sirven a la hora de sustentar una justificación para la implementación de dicha tecnología antes un grupo de personas

5. Búsqueda de estudios que hablen de esa tecnología o del concepto que implementa la tecnología

Existen una gran cantidad de empresas dedicadas a realizar estudios sobre temas tecnologías para no ir muy lejos por ejemplo tenemos las encuestas estilo state technology que son encuestas realizadas a profesionales de cada área sobre el uso, interés y diferentes opciones en cada ecosistema, statejs es uno de ellos y sus resultados se pueden  apreciar en la Figura 12

Figura 12  gráfico sobre el uso frecuente de librerías backend en javascript
Figura 13 Uso de frameworks en python

Estas encuestas son geniales, además de contener una gran cantidad de gráficos (confieso que me gustaron mas lo del statejs) nos dan un vistazo amplio de cada ecosistema de forma sencilla y lo mejor su consulta es libre y se realizan de forma anual, por otro lado se tienen estudios realizados más por el lado empresarial como puede ser gartner (aunque es de suscripción, en su blog publican resúmenes de sus estudios)

Para destacar un ejemplo, en mi caso recientemente estoy usando para mis diagramas de arquitectura una herramienta llamada diagrams para justificar su uso decidí investigar un poco y me encontré con una edición bastante interesante que es el resultado de discusiones e investigaciones de personas de TI con amplia experiencia en donde precisamente mencionan el concepto de "diagrama como código" (concepto sobre el cual se construye la herramienta que utilice) como una técnica tendencia esto se aprecia Figura 14

Figura 14 definición del concepto diagrams as a code como tendencia

Estos estudios son super importantes a la hora de justificar su uso en tu empresa ante un comité ya que mayormente estas reuniones se debe tener un muy buen estado del arte con resultados positivos o que apunten a un futuro prometedor. Estos estudios como los buenos libros es más fácil que ellos de encuentren a ti, esto se puede lograr utilizando algún canal previo que estés suscripto, por eso la mejor herramienta para esta técnica es constantemente estar leyendo de diferentes fuentes de información.

Espero que estas técnicas que describi les puedan ayudar asi como me han sido de utilidad y les facilite el proceso de seleccionar qué tecnología deben implementar