top of page

Estrategias para tomar decisiones inteligentes en tecnología

En el vertiginoso panorama de hoy, los desarrolladores de software se encuentran en una encrucijada de elecciones tecnológicas casi a diario. La abundancia de lenguajes de programación, frameworks, bibliotecas y herramientas significa que para cada proyecto o tarea, los desarrolladores deben evaluar cuidadosamente y seleccionar las tecnologías más adecuadas que se alineen con los objetivos del proyecto, los requisitos de escalabilidad y la experiencia del equipo.


tecnología

Este proceso de toma de decisiones es crucial ya que afecta la velocidad y eficiencia del desarrollo e impacta en el mantenimiento futuro, la adaptabilidad al cambio y la integración con otros sistemas. Con demasiadas opciones disponibles, la capacidad para tomar decisiones tecnológicas informadas se ha convertido en una habilidad esencial para los desarrolladores que deben equilibrar la innovación con la practicidad para ofrecer buenas soluciones en un mercado muy competitivo.


En el mundo de las startups, los desarrolladores son como aventureros, navegando por mar de opciones tecnológicas con la agilidad para adaptarse rápidamente. A menudo optan por herramientas de vanguardia que prometen velocidad e innovación ya que el tiempo es esencial y necesitan destacarse. Las startups valoran las tecnologías flexibles que puedan acompañar el  constante cambio que atraviesan. Sin embargo, este entorno de ritmo acelerado significa que podrían elegir herramientas que aún están evolucionando, lo que podría llevar a desafíos en cuanto a estabilidad y soporte a largo plazo.


Por otro lado, en entornos empresariales, los desarrolladores son más como arquitectos que construyen rascacielos. Deben elegir tecnologías con una base sólida que resistirá el paso del tiempo. Las empresas priorizan la confiabilidad y la escalabilidad porque tienen más en juego: extensas bases de clientes, sistemas complejos y cargas de datos pesadas. Esto los lleva a inclinarse hacia lenguajes de programación y frameworks establecidos que han demostrado su valía. Si bien esto puede sacrificar algo de innovación y velocidad, asegura que su infraestructura tecnológica sea segura, mantenible y se integre perfectamente con sistemas heredados.


Pero ya sea que estés en un entorno de startup o empresarial, esos fundamentos determinarán el éxito (o no) de un producto. ¿Por qué? El software tiene inercia; una vez que se pone en marcha, tiende a seguir así a menos que sea actuado por una fuerza externa. Entonces, esas "pequeñas" decisiones que toma un único desarrollador o un pequeño equipo de desarrolladores al principio dan forma a la arquitectura del producto futuro. Por eso es tan difícil cambiar la base de un producto después de un tiempo.


La estrategia principal para elegir tecnologías

La siguiente estrategia proporciona un marco integral para evaluar posibles soluciones de software antes de comprometerse con ellas. Debo emitir un descargo de responsabilidad aquí: este marco ha funcionado para mí en el pasado y parece lógico, pero puede adaptarse para satisfacer tus necesidades. Siguiendo estos pasos, he podido tomar decisiones informadas que no sólo satisfacían mis necesidades inmediatas, sino que también predisponen mis proyectos al éxito y la sostenibilidad a largo plazo.


  1. Definir tus necesidades

  2. Evaluar la comunidad y el soporte

  3. Considerar la madurez y estabilidad

  4. Evaluar calidad y rendimiento

  5. Verificar compatibilidad de licencia

  6. Observar dependencias

  7. Consideraciones de seguridad

  8. Alineación con la hoja de ruta del proyecto

  9. Testeabilidad

  10. Popularidad y referencias

  11. Realizar una prueba de concepto (PoC)


Aplicar la estrategia para elegir una tecnología

Cuando elegís pequeños componentes tecnológicos, como paquetes de software o bibliotecas, es esencial ajustar estos factores para garantizar que la elección se alinee con las necesidades y objetivos de tu proyecto.


  1. Definí tus necesidades:

  • Entendé para qué necesitás que haga el paquete o biblioteca.

  • Identificá las características específicas necesarias para tu proyecto y si el paquete o biblioteca es una solución apropiada.

  • Determiná cualquier restricción, como la compatibilidad con plataformas o el soporte de idiomas.


2. Evaluar la comunidad y el soporte:

  • Buscá una comunidad activa alrededor de la biblioteca, lo que puede significar buena salud y longevidad. 

  • Verificá si hay documentación adecuada y tutoriales disponibles. Considerá la receptividad de los mantenedores ante problemas y solicitudes de extracción.


3. Considerar madurez y estabilidad:

  • Preferí paquetes que hayan alcanzado cierto nivel de madurez con versiones estables sobre los que son vanguardistas pero potencialmente inestables. 

  • Revisá el historial de versiones para ver con qué frecuencia se realizan actualizaciones y si hay un patrón de mantenimiento regular.


4. Evaluar calidad y rendimiento:

  • Leé revisiones de código, si están disponibles, o revisá el código para evaluar la calidad.

  • Verificá benchmarks de rendimiento relevantes para tu caso de uso.


5. Verificá la compatibilidad de licencia:

  • Asegurate de que la licencia de la biblioteca sea compatible con los requisitos de licencia de tu proyecto.

  • Evitá problemas legales entendiendo las obligaciones o restricciones impuestas por la licencia.


6. Revisar dependencias:

  • Revisá qué otros paquetes o bibliotecas son necesarios para el que estás considerando.

  • Tené cuidado con las bibliotecas con muchas dependencias que podrían aumentar la complejidad y los puntos potenciales de fallo.


7. Consideraciones de seguridad:

  • Investigá vulnerabilidades de seguridad conocidas utilizando bases de datos como CVE (Vulnerabilidades y Exposiciones Comunes).

  • Verificá si los mantenedores proporcionan parches de seguridad de manera oportuna.


8. Alineación con la hoja de ruta del proyecto:

  • Asegurate de que la hoja de ruta de la biblioteca se alinee con las necesidades futuras de tu proyecto.

  • Considerá si se agregarán nuevas características que beneficien tu caso de uso o si hay planes para depreciar funcionalidades en las que te apoyás.


9. Testeabilidad:

  • Verificá si podés escribir pruebas rápidamente para tu código al integrar con este paquete o biblioteca.

  • Buscá paquetes que admitan objetos de prueba simulados o que tengan un diseño propicio para las pruebas.


10. Popularidad y referencias:

  • La popularidad a veces puede ser un indicador útil; sin embargo, no te confíes únicamente en esta métrica ya que puede no reflejar la idoneidad para tus necesidades específicas.

  • Buscá referencias de proyectos similares en tamaño, alcance o industria.


11. Realizá una prueba de concepto (PoC):

  • Si es posible, implementá un PoC utilizando el paquete dentro del contexto de tu aplicación para verificar su compatibilidad y rendimiento en un escenario real antes de comprometerte con él.


Bueno, ya sé lo que estás pensando en este momento. Nunca voy a hacer estos 11 pasos para cada paquete que necesite en un proyecto, y está bien. Pero no podés elegir todos tus paquetes, generar dependencias y complicarlo todo sin hacer ninguno de estos pasos.


Cada proyecto tiene requisitos únicos, por lo que lo que funciona bien para una situación puede que solo sirva para una. También vale la pena mencionar que elegir bibliotecas más pequeñas a veces puede reducir la complejidad en comparación con los marcos más grandes si hacen exactamente lo que necesitás sin florituras adicionales. Siempre pondera estos factores de acuerdo a tu situación específica al tomar decisiones sobre la adopción de tecnología.


Aplicar estrategias para tomar decisiones tecnológicas importantes

  1. Definí tus necesidades: Antes de adentrarte en los detalles de cualquier decisión tecnológica, es crucial articular claramente qué problemas necesitás resolver y qué requisitos deben cumplirse. Considerá factores como la escalabilidad, el rendimiento, la eficiencia de costos, la velocidad de desarrollo y el ecosistema. Luego, si necesitás una forma sistemática de tomar la decisión y justificar ante otros, podés utilizar una matriz Pugh.


  2. Evaluá la comunidad y el soporte: La vitalidad de una comunidad puede ser un salvavidas para proyectos cuando surgen desafíos. Para lenguajes de programación o frameworks, revisá plataformas como Stack Overflow para encontrar discusiones activas y soluciones a problemas. También buscá canales de soporte comunitario dedicados, como espacios de trabajo en Slack o servidores de Discord, donde las interacciones en tiempo real con otros desarrolladores pueden proporcionar valiosos conocimientos y asistencia.


  3. Considerá madurez y estabilidad: Las tecnologías maduras a menudo tienen prácticas recomendadas establecidas y versiones estables que reducen el riesgo de introducir errores o vulnerabilidades de seguridad en tu proyecto. Para decisiones de infraestructura, optar por proveedores de nube bien establecidos o hardware probado puede garantizar estabilidad y reducir el tiempo de inactividad.


  4. Evaluá calidad y rendimiento: La calidad abarca no solo la ausencia de errores, sino también buenos principios de diseño y facilidad de mantenimiento. Los benchmarks de rendimiento deben ser revisados para asegurarte de que la tecnología pueda manejar tu carga esperada y los requisitos de eficiencia. Esto es especialmente cierto al decidir sobre bases de datos donde transacciones por segundo (TPS) o latencias de lectura/escritura pueden ser críticas.


  5. Verificá la compatibilidad de licencia: La licencia puede tener importantes implicancias en cómo utilizás y distribuís tu software. Las licencias de código abierto varían mucho en sus términos, desde permisivas (MIT, Apache) hasta copyleft (GPL). Asegurate de que la licencia del software que elijas se alinee con las restricciones legales y los objetivos comerciales de tu proyecto.


  6. Revisá dependencias: Las dependencias pueden introducir complejidad adicional y puntos potenciales de falla en tu sistema. Cuando seleccionés componentes de software fundamentales como sistemas operativos o middleware, considerá cuidadosamente sus árboles de dependencias para mitigar los riesgos asociados con conflictos de versiones o paquetes obsoletos.


  7. Consideraciones de seguridad: El historial de seguridad de una tecnología es fundamental en los procesos de toma de decisiones, ya que las vulnerabilidades pueden llevar a riesgos significativos. Investigá problemas de seguridad pasados, frecuencia de parches y si hay recursos dedicados que garanticen mejoras continuas en la seguridad dentro del proyecto.


  8. Alineación con la hoja de ruta del proyecto: Asegurate de que cualquier tecnología que adoptes tenga una hoja de ruta que se alinee con las necesidades futuras de tu proyecto. Por ejemplo, si estás construyendo una plataforma de análisis en tiempo real que necesitará procesar grandes cantidades de flujos de datos, es crucial seleccionar una tecnología de backend que sobresalga en el procesamiento concurrente y pueda manejar sistemas distribuidos a gran escala.


  9. Testeabilidad: Las tecnologías deben facilitar las pruebas en varios niveles (pruebas unitarias, pruebas de integración) para mantener bases de código de alta calidad a lo largo del tiempo a través de prácticas de integración continua/despliegue continuo (CI/CD), especialmente importante en entornos ágiles de ritmo acelerado.


  10. Popularidad y referencias: La popularidad de una tecnología puede ser un indicador de su confiabilidad; sin embargo, no debería ser el único criterio de selección: la adecuación al propósito siempre debe prevalecer sobre las tendencias (tené en cuenta el Efecto Lindy). Investiga estudios de caso o busca referencias de empresas de tamaño similar en industrias similares para evaluar qué tan bien una tecnología podría adaptarse a tus necesidades.


  11. Realizá una prueba de concepto (PoC): Finalmente, pero no menos importante, validá todas las suposiciones construyendo un PoC mínimo viable antes de comprometerte completamente con una pila tecnológica o una elección de infraestructura: esto revelará problemas prácticos que no son evidentes a través de la investigación sola, al tiempo que permitirá a los interesados obtener experiencia práctica con las soluciones propuestas antes de escalar las inversiones.


Conclusiones

En conclusión, la selección de la tecnología es una decisión crucial que puede dictar el éxito o el fracaso de tu proyecto. Es un proceso que requiere una consideración deliberada, equilibrando la innovación con la confiabilidad y mirando más allá de la publicidad para centrarse en la practicidad y la idoneidad. Mientras navegás por este intrincado proceso, recordá que no hay una solución única; cada elección debe adaptarse a los objetivos y restricciones únicos de tu proyecto. Las estrategias aquí delineadas proporcionan un enfoque estructurado para tomar decisiones informadas que puedan resistir la prueba del tiempo y crecer junto con tus ambiciones.

Como desarrolladores y tecnólogos, debemos educarnos continuamente sobre las tendencias emergentes mientras perfeccionamos nuestro juicio para discernir la sustancia del ruido. Aceptá la naturaleza iterativa de la evaluación tecnológica, reconociendo que lo que funciona hoy puede evolucionar mañana. Seguí aprendiendo, mantenete adaptable y dejá que las necesidades de tu proyecto te guíen a través del siempre cambiante panorama tecnológico. Recordá que las herramientas que elijas son solo instrumentos para realizar tu visión: elegí sabiamente, pero nunca pierdas de vista el objetivo final: crear soluciones valiosas que sirvan a su propósito previsto de manera efectiva y eficiente.


Comments


image.png

¿Querés leer más contenido como este?

Suscribite a nuestro newsletter para recibir mensualmente contenidos novedosos, noticias del sector tecnológico y búsquedas laborales destacadas.

bottom of page