Como adoptar una nueva tecnología sin morir en el intento

Jonathan Nolasco
Crehana
Published in
7 min readNov 10, 2022

Si estás leyendo este post es muy probable que estés trabajando o seas parte de una empresa de tecnología y, de no ser el caso, es casi seguro que lo compartido en este post será de mucha utilidad para cualquier tipo de empresa que quiere mantenerse innovando en tecnología.

Si estás desarrollando un nuevo producto digital o una nueva funcionalidad donde las tecnologías que actualmente usas no están funcionando como esperas o simplemente has notado que hay mejores formas de desarrollar esa nueva funcionalidad, pues te toparás con un reto super interesante del cual queremos hablar en este post y el cual es adoptar una nueva tecnología en tu equipo de desarrollo.

Otro escenario que te podría llevar a evaluar adoptar una nueva tecnología es buscar eficiencia en el proceso de construcción.

🎲 Contexto

Para que este post resulte útil plantearé 2 situaciones reales en las que tuve la oportunidad de participar.

Caso 1

Somos una agencia digital o software factory y actualmente el proceso de desarrollo móvil para construir un MVP resulta ser costoso debido a los siguientes factores:

  • El equipo necesario para construir una aplicación móvil nativa requiere de 2 perfiles para cada plataforma (1 android developer y 1 iOS developer).
  • El proceso de búsqueda y selección de talento se hace complejo al requerir 2 perfiles técnicos diferentes (stack tecnológico diferentes por cada plataforma).
  • Las fechas de lanzamiento de nuevas versiones de la app suelen ser diferentes para cada plataforma debido a que cada equipo (Android y iOS) maneja un cronograma diferente cada uno con retos y particularidades propias de cada plataforma.

Con lo antes mencionado decidimos evaluar alternativas tecnológicas que nos permitan optimizar el proceso de desarrollo y minimizar la complejidad de mantener un equipo motivado.

Caso 2

Somos una startup y tenemos un producto consolidado en el mercado que tiene muchos años de haber sido desarrollado y cada vez se vuelve más difícil darle mantenimiento para que siga funcionando óptimamente por los siguientes motivos:

  • Cada año las plataformas (iOS y Android) proponen nuevas capacidades, mejoras de arquitectura y propuestas técnicas para mejorar seguridad y performance en las apps.
  • Mantener la retrocompatibilidad en las aplicaciones requiere mantener código legacy y a su vez crear nuevo código para las versiones mas modernas.

Necesitamos evaluar nuevas tecnologías (libraries, frameworks, SDKs, etc) que nos permitan mantener una aplicación móvil de forma ágil.

A continuación planteo 4 pasos que podemos seguir evaluar la adopción de una nueva tecnología, minimizando inversión y controlando riesgos.

🧬 Research

Definitivamente, uno de los primeros pasos es investigar sobre las tecnologías que tenemos disponibles en el mercado y cuáles se están alineadas a lograr nuestro objetivo.
Aquí lo que sugiero en primera instancia es recurrir a tu red de contactos para conocer y entender que tecnologías están usando tus pares, sean empresas del mismo rubro o con similitudes en cuanto a desarrollo de software se refiere.
Si tu red no logra darte alguna respuesta, siempre podrás encontrar en internet algunas referencias.
Puedes revisar el blog de tecnología que tienen algunas empresas referentes en el mercado donde muchas veces describen las tecnologías que ellos usan para el desarrollo interno y también comentan como les fue con algunos experimentos realizados.

Aquí te dejo un claro ejemplo de Airbnb y aquí otro caso de Uber.

Debemos sacar todo el provecho de la cultura de los equipos de tecnología por compartir experiencias y aprendizajes, lo que nos permitirá tener un punto de referencia antes de experimentar por cuenta propia con alguna nueva adopción.

Otra fuente interesante de información para saber sobre las tendencias tecnológicas en el mercado del software es el Survey Report que publica año tras año Stackoverflow, aquí te dejo el último reporte donde encontrarás la sección tecnologías con lenguajes de programación y frameworks top que se usan en la región y en el mundo.

✏️ Selección

Luego de completar tu research definitivamente te verás inclinado por alguna opción. Sin embargo, es importante minimizar los riesgos en cada etapa y por ello te dejo algunos factores a considerar antes de seleccionar alguna tecnología que te haya parecido atractiva.

  • Tamaño y actividad de la comunidad, si la tecnología tiene un soporte importante en su comunidad puedes estar más tranquilo para cuando te encuentres en una situación de duda o problemas de implementación. La comunidad podrá ayudarte a encontrar una solución o simplemente alguien ya habrá pasado por ese problema y encuentres fácilmente la solución en los foros más populares.
  • Estabilidad de las versiones, en la industria del software es muy común que te encuentres con tecnologías muy nuevas que se encuentran en su versión alfa o beta, una versión alfa suele tener muchas cosas por mejorar y de hecho no recomiendo usarlo para un producto que vas a lanzar a producción o que será de un uso masivo. Por otro lado tenemos las famosas versiones beta, estás suelen presentar menos complicaciones y en muchos casos están casi listas para lanzar pronto una versión estable, usar esta versión será un win to win porque tendrás a tu disposición una nueva tecnología y los desarrolladores de la misma tendrán feedback valioso para implementar mejoras en el corto plazo para lanzar su primera versión estable.
  • Versiones enterprise, si bien la comunidad detrás de una tecnología es importante, hay casos donde la solución tiene un nicho de mercado y tiene un costo por su uso, usualmente estas soluciones ofrecen un soporte técnico o acompañamiento en el proceso de implementación y estaría bueno elegir un plan de pago que ofrezca estas bondades.
  • Casos de estudio, algunas tecnologías sobre todo en sus primeras etapas cuando no cuentan con un soporte interesante de la comunidad buscan el apoyo en empresas muy reconocidas para que estas usen su propuesta de solución y así tengan casos de éxito con un detalle interesante en su website que puede ser un input interesante para tomar la decisión de adoptar o no dicha solución.

👍 Validación

Una vez elegida la tecnología a usar recomiendo entrar en una fase de testing y validación.

Usualmente una nueva librería o lenguaje de programación lleva consigo una documentación que nos permite entender el alcance de la misma. Sin embargo, no siempre es suficiente con leer la documentación para estar seguros que la tecnología funcionará como imaginamos.

Es por ello que aquí te dejo algunas sugerencias para realizar la validación:

  • Realizar una POC (prueba de concepto).

Aquí debemos de cambiar a una mentalidad tipo MVP, debemos definir un alcance con los mínimo necesario para validar que la tecnología se comportará como esperamos.

Definitivamente es un tiempo que vamos a invertir pero será necesario para adoptar una nueva tecnología en el largo plazo.

El tiempo que se debería invertir en una POC es variable pero si les sirve de referencia he tenido casos en donde hemos invertido de 20 a 30 días con personas solo enfocadas en dicha validación.

  • Realizar una Hackathon interna

Otra forma más ágil e interesante es organizar una hackathon donde el equipo le invierte de 48 a 72 horas a probar la tecnología y resolver retos específicos con equipos multidisciplinarios.

En este caso no solo necesitarás del equipo de ingeniería sino también de perfiles como UX, UI, PO, PM entre otros. Consideremos que toda hackathon tiene un objetivo y también un reconocimiento o premio.

🧵 Adopción y Next steps

Finalmente el equipo está listo para adoptar la nueva tecnología. Sin embargo, podemos ir progresivamente para minimizar los riesgos de toparnos con algún stopper o blocker técnico.

Podemos empezar con un feature de bajo impacto y podemos utilizar las feature flags para encender o apagar las features en caso encontremos bugs técnicos que escapen de nuestro proceso de calidad.

Algunas consideraciones a tener en cuenta:

  • Tu equipo necesitará estar en constante auto-capacitación para seguir mejorando en el uso de la nueva tecnología hasta llegar a un punto donde la dominen, esto parece negativo al inicio pero por el contrario debería motivar al equipo tech por que resulta ser un reto interesante dominar una nueva tecnología y mantenerse a la vanguardia.
  • La curva de aprendizaje suele variar en cada equipo y miembro del equipo así que debería ser una variable a considerar y tolerar en las primeras semanas y meses.
  • Deberíamos ir graduando el riesgo que queremos asumir a medida que lanzamos nuevas funcionalidades a producción y estas resulten tener un alto grado de estabilidad, aquí será importante integrar alguna herramienta de monitoreo de performance como puede ser Sentry o Crashlytics para según eso incrementar el coverage de la nueva herramienta en los siguientes releases.
  • Un punto que muchas veces se ignora al adoptar una nueva tecnología son las buenas prácticas que ya teníamos en el pasado y que por la emoción del momento ignoramos en nuestro proceso de adaptación y desarrollo, tales como patrones de arquitectura, principios solid, unit testing, entre otras.

Recuerda que si este post te fue de mucha utilidad puedes compartirlo en tus redes y si estás interesado en recibir más detalles de alguno de los tópicos revisados puedes dejarnos tus comentarios y los tomaremos en cuenta para futuras publicaciones.

--

--

Jonathan Nolasco
Crehana

Engineering Manager at Crehana, Software Developer, Blockchain Developer & Tech Entrepreneur