Saltar al contenido

Selección de stack tecnológico: framework de decisión para 2025

A
abemon
| | 11 min de lectura | Escrito por profesionales
Compartir

La decision mas cara que tomas sin darte cuenta

Elegir un stack tecnologico no es una decision tecnica. Es una decision de negocio con implicaciones a 5-10 años. Porque una vez que tienes 50.000 lineas de codigo en un framework, 8 desarrolladores que lo dominan, y 3 años de deuda tecnica acumulada, cambiar es un proyecto de meses (a veces años) que consume recursos que deberian ir a producto.

Y sin embargo, la mayoria de las empresas eligen su stack de una de estas tres formas: “lo que el CTO conocia en su trabajo anterior,” “lo que sale primero en las busquedas de Google,” o “lo que usa [empresa famosa].” Ninguna de las tres es un proceso de decision.

Este articulo propone un framework de evaluacion que va mas alla de las features tecnicas. Porque las features son el 20% de la decision. El otro 80% son factores que solo se hacen visibles cuando llevas 18 meses en produccion.

Factor 1: Familiaridad del equipo

El factor mas ignorado y probablemente el mas importante. Un equipo productivo en Django que cambia a NestJS porque “es mas moderno” pierde entre 3 y 6 meses de productividad mientras aprende. Y no es solo el framework: son las convenciones, las librerias del ecosistema, los patrones de testing, las herramientas de debugging, los trucos que se aprenden con años de uso.

La regla practica: si tu equipo actual es productivo en un stack, necesitas razones muy solidas para cambiar. “El nuevo es mas rapido” no es una razon solida a menos que el rendimiento sea un cuello de botella medible. “El nuevo tiene mejor soporte para X” es una razon solida solo si X es critico para tu producto.

Cuando contratas un equipo nuevo o empiezas un proyecto greenfield, la familiaridad del equipo se convierte en “que puedes contratar.” Y eso nos lleva al segundo factor.

Factor 2: Mercado laboral

En España, en agosto de 2025, el mercado laboral para desarrolladores se ve asi (datos de LinkedIn e InfoJobs):

  • JavaScript/TypeScript: 12.400 ofertas activas. El pool de candidatos mas grande. Salario medio senior: 42.000-55.000 euros.
  • Python: 8.700 ofertas. Crecimiento fuerte por IA/data. Salario medio senior: 45.000-60.000 euros.
  • Java: 7.200 ofertas. Estable, concentrado en banca y grandes corporaciones. Salario medio senior: 48.000-65.000 euros.
  • Go: 890 ofertas. Creciendo rapido pero pool pequeño. Salario medio senior: 55.000-75.000 euros.
  • Rust: 210 ofertas. Pool minimo. Salario medio senior: 60.000-80.000 euros.

Elegir Rust para tu API backend cuando necesitas contratar 4 desarrolladores en Madrid tiene un coste oculto: vas a tardar mas en encontrarlos, vas a pagarlos mas, y vas a tener menos opciones. Rust es un lenguaje excelente. Eso no significa que sea la eleccion correcta para tu contexto.

La pregunta que todo consultor tecnologico deberia hacer es: si tu desarrollador principal se va mañana, cuanto tardas en reemplazarlo? Si la respuesta es “6 meses,” tu stack es un riesgo de negocio.

Factor 3: Madurez del ecosistema

Un lenguaje o framework no es solo el runtime. Es el ecosistema que lo rodea: librerias, herramientas, documentacion, comunidad, y empresas que lo soportan comercialmente.

Evaluamos madurez del ecosistema con cinco indicadores:

Librerias para tu dominio. Si construyes una aplicacion logistica, necesitas librerias de geocodificacion, calculo de rutas, generacion de PDFs, integracion con APIs de transporte. Existen en tu stack? Son mantenidas? Tienen documentacion decente?

ORM y acceso a datos. Cada proyecto serio necesita acceso a base de datos. La calidad del ORM importa enormemente en productividad. Prisma (TypeScript), SQLAlchemy (Python), Hibernate (Java), GORM (Go) son opciones maduras en sus ecosistemas. Si tu stack no tiene un ORM robusto, vas a escribir mucho codigo repetitivo.

Testing. Frameworks de testing, librerias de mocking, herramientas de coverage, test runners. Si testear tu codigo requiere configurar el entorno de test durante dos dias, la calidad del testing (y por tanto del producto) sufrira.

Observabilidad. Integracion con OpenTelemetry, exporters para Prometheus, structured logging. Si tu stack no tiene integracion nativa o bien soportada con el ecosistema de observabilidad, vas a construir tu propio pegamento. Y ese pegamento sera fragil.

Comunidad y respuestas. Cuando te atascas a las 11 de la noche con un error críptico, Stack Overflow (o ahora, una conversacion con un LLM) necesita tener la respuesta. Los stacks con comunidades grandes tienen mas respuestas disponibles. Es un factor menor pero acumulativo: 10 minutos menos de busqueda por problema, multiplicado por 200 problemas al ano, son 33 horas de productividad.

Factor 4: Costes de mantenimiento a largo plazo

Aqui es donde las elecciones “modernas” a veces resultan caras. Un framework nuevo y cool tiene actualizaciones frecuentes, breaking changes entre versiones, y migraciones que consumen tiempo del equipo. Un framework maduro y estable tiene actualizaciones de seguridad predecibles y APIs que no cambian entre versiones mayores.

Django lleva 20 años. Rails lleva 20 años. Spring Boot lleva 10. Sus APIs son estables. Las migraciones entre versiones estan documentadas y son manejables. Eso tiene un valor enorme que no aparece en ninguna comparativa de features.

Para frameworks mas nuevos (Next.js, SvelteKit, Astro), la velocidad de evolucion es una ventaja competitiva y un coste de mantenimiento. Next.js ha tenido cambios significativos de arquitectura entre versiones mayores (Pages Router a App Router, por ejemplo) que requieren esfuerzo de migracion.

La pregunta: cuanto tiempo al trimestre dedica tu equipo a actualizar dependencias y migrar entre versiones? Si la respuesta es “mas de una semana,” ese es un coste de mantenimiento que debiste prever al elegir el stack.

Factor 5: Lock-in

Lock-in no es solo de cloud provider. Tambien es de framework, de lenguaje, y de ecosistema.

Lock-in de cloud. Si tu aplicacion usa 15 servicios especificos de AWS (Lambda, DynamoDB, SQS, Step Functions, AppSync…), migrar a GCP o Azure es un proyecto de 6-12 meses. Si usa Kubernetes con PostgreSQL y Redis, migrar es cuestion de semanas. La pregunta no es “voy a migrar” (probablemente no) sino “cuanto poder de negociacion tengo con mi proveedor?”

Lock-in de framework. Django te ata a Django. Spring te ata a Spring. Eso es inevitable y aceptable si el framework es estable y mantenido. Lo que no es aceptable es lock-in en frameworks mantenidos por una sola empresa que puede cambiar de estrategia. Parse (comprada y cerrada por Facebook), StrongLoop (absorbida por IBM), Meteor (perdio momentum). Si tu framework depende de los intereses comerciales de una empresa, tienes un riesgo que debes evaluar.

Lock-in de lenguaje. Menos relevante a nivel tecnico (puedes reescribir de Python a Go) pero muy relevante a nivel de equipo. Tu equipo de 8 desarrolladores Python no se convierte en un equipo de 8 desarrolladores Go en un mes. El coste de cambio de lenguaje incluye formacion, perdida de productividad, y posiblemente rotacion de personal.

El framework de decision

Proponemos una evaluacion en cinco dimensiones, cada una puntuada de 1 a 5 para cada opcion:

DimensionPregunta clavePeso
Familiaridad del equipoLo dominan hoy? Cuanto tardan en ser productivos?25%
Mercado laboralPuedo contratar en mi ciudad/pais al precio que puedo pagar?20%
Madurez del ecosistemaLas librerias que necesito existen y estan mantenidas?20%
Coste de mantenimientoCuanto tiempo al ano consume en actualizaciones y migraciones?20%
Lock-inSi necesito cambiar, cuanto cuesta?15%

Los pesos son una propuesta, no una verdad universal. Si tu empresa esta en un sector donde el talento es extremadamente escaso (IA, blockchain), el peso del mercado laboral deberia subir. Si tu producto necesita durar 15 años con mantenimiento minimo, el peso del coste de mantenimiento sube.

Lo importante es que el proceso sea explicito. Que la decision se documente con razones. Que dentro de dos años, cuando alguien pregunte “por que elegimos este stack,” haya una respuesta mejor que “porque el CTO lo conocia.”

Tres decisiones frecuentes en 2025

API backend para producto SaaS B2B. Si el equipo es de 3-5 personas, Python (FastAPI o Django) o TypeScript (NestJS) son las opciones pragmaticas. Pool de candidatos amplio, ecosistema maduro, velocidad de desarrollo alta. Si el rendimiento es critico (miles de requests por segundo), Go. Java/Spring si el equipo es de grandes corporaciones y necesita integracion con el ecosistema JVM existente.

Frontend de producto. React sigue siendo la opcion mas segura por tamaño de ecosistema y pool de talento. Vue tiene un ecosistema excelente y un pool de talento mas pequeño pero suficiente en España. Svelte es tecnicamente elegante pero el pool de talento es limitado. La eleccion de meta-framework (Next.js, Nuxt, SvelteKit) depende del framework base y de si necesitas SSR, SSG, o un SPA.

Web corporativa o blog. Astro, WordPress, o un static site generator. Si el contenido lo gestionan no-tecnicos, WordPress sigue siendo la opcion con menor friccion. Si lo gestionan desarrolladores y el rendimiento importa, Astro es nuestra eleccion actual. Para sitios grandes con equipos de contenido, un headless CMS (Strapi, Contentful) con un frontend en Astro o Next.js.

La decision que importa

Al final, la mejor tecnologia es la que tu equipo puede operar de forma sostenible durante los proximos 5 años. No la mas rapida, no la mas nueva, no la que tiene mas estrellas en GitHub. La que tu gente conoce, la que puedes contratar, la que tiene un ecosistema que resuelve tus problemas, y la que no te ata a decisiones que no puedes revertir.

Eso suena menos emocionante que “elegimos Rust porque es el futuro.” Pero a los 18 meses de produccion, cuando tu equipo entrega a tiempo, tus sistemas son estables, y puedes contratar un desarrollador en 3 semanas, la decision aburrida se ve muy bien.

El error del benchmark

Una nota sobre benchmarks, porque aparecen en todas las discusiones de stack. “Go es 3x mas rapido que Python.” “Rust es 10x mas rapido que JavaScript.” Estos numeros son reales en microbenchmarks. Son irrelevantes para el 95% de las aplicaciones.

Si tu API tarda 200ms en responder y 180ms son consultas a base de datos, cambiar de Python a Go te ahorra 6ms de tiempo de procesamiento. Impresionante en un benchmark. Imperceptible para el usuario. Y has pagado esa “mejora” con un equipo mas caro, un ecosistema mas reducido, y 6 meses de productividad perdida.

Los benchmarks importan cuando el procesamiento es el cuello de botella: sistemas de trading de alta frecuencia, procesamiento masivo de datos, motores de rendering. Para una API que lee de base de datos, transforma y devuelve JSON, el lenguaje es el 5% de la latencia. La base de datos, la red y las cachés son el otro 95%.

Mide tu cuello de botella real antes de elegir un stack “porque es rapido.” Probablemente el cuello de botella no es el lenguaje.

Documentar la decision

Un ultimo punto que parece menor pero no lo es: documenta la decision de stack y las razones. Crea un ADR (Architecture Decision Record) que responda:

  • Que opciones se evaluaron y por que
  • Que factores pesaron mas en la decision
  • Que riesgos se identificaron y como se mitigan
  • Cuando se deberia reevaluar la decision

Dentro de dos anos, cuando el equipo haya cambiado y alguien proponga “migremos todo a [framework de moda],” ese documento es la defensa contra decisiones impulsivas. No porque la decision original sea inmutable, sino porque fuerza al proponente del cambio a argumentar contra razones explicitas, no contra inercia. Si necesitas ayuda para evaluar opciones de stack o documentar decisiones de arquitectura, nuestro equipo de consultoria incluye este tipo de evaluacion en nuestras auditorias tecnologicas.

Sobre el autor

A

abemon engineering

Equipo de ingenieria

Equipo multidisciplinar de ingenieria, datos e IA con sede en Canarias. Construimos, desplegamos y operamos soluciones de software a medida para empresas de cualquier escala.