wandres.dev
NIVEL DIOS: SÍNTESIS · arquitectura y trade-offs

Cuándo Solid NO es la elección correcta

La decisión técnica más madura suele ser elegir la tecnología aburrida. Esta lección analiza sin fanatismo los costes que ningún benchmark mide —contratación, ecosistema de librerías, familiaridad del equipo, respaldo y longevidad— y traza los escenarios concretos donde Solid pierde frente a alternativas más grandes: un equipo de React con plazos, una dependencia de librerías que solo existen para otro framework, un sitio casi estático que Astro haría mejor, o una organización que exige una apuesta segura. Cómo decidir por la restricción que domina, no por el mérito técnico.

⏱ 18 min

Todo el track te ha mostrado por qué Solid es un modelo brillante. Esta lección hace lo contrario, y es la más adulta de todas: te enseña cuándo no usarlo. Porque la señal de un ingeniero senior no es defender su tecnología favorita, sino reconocer que la elección correcta depende de la restricción que domina el proyecto, y esa restricción rara vez es el rendimiento del render. Elegir la tecnología “aburrida” —la que el equipo ya sabe, la que tiene la librería que necesitas, la que nadie discutirá en tres años— es a menudo la decisión de arquitectura más sabia. Solid es excelente; no es siempre lo correcto, y saber distinguirlo es maestría.

🎯 Al terminar esta lección sabrás
  • Ver los costes de una tecnología que ningún benchmark mide: gente, librerías, riesgo.
  • Identificar escenarios concretos donde Solid es la peor elección pese a su mérito técnico.
  • Decidir por la restricción dominante del proyecto, no por la superioridad del modelo.
  • Separar “mejor tecnología” de “mejor elección”, que casi nunca son la misma cosa.

El coste que no está en el benchmark

Un benchmark mide milisegundos de render. Un proyecto se paga en otra moneda, y son cuatro los costes que ningún gráfico refleja.

El primero es la contratación: hay órdenes de magnitud más desarrolladores de React que de Solid, así que un equipo Solid tarda más en crecer, cuesta más caro por experto y depende de menos personas —un riesgo de bus factor que no aparece en ningún benchmark—.

El segundo es el ecosistema: si tu producto necesita una librería concreta de tablas, gráficos, edición de texto rico, mapas o un SDK de auth que solo publica versión para React, ganar dos milisegundos de render no compensa reescribir esa pieza desde cero.

El tercero es la familiaridad: un equipo que ya piensa en React entrega antes en React, y el modelo de Solid —el componente que corre una vez, las props que no se destructuran— es una curva real que cuesta semanas de errores sutiles antes de rendir.

Y el cuarto es la longevidad: el respaldo institucional de React o Vue tranquiliza a una organización que planea mantener el código una década; el de Solid, más comunitario, es un riesgo que algunas no pueden asumir por política, no por ingeniería.

Fíjate en que los cuatro costes tienen algo en común: se pagan en personas y tiempo, no en CPU. Son exactamente la clase de coste que un benchmark no puede ver, porque no ocurre en la máquina sino en el equipo, en el mercado laboral y en el calendario. Ignorarlos porque no aparecen en un gráfico de rendimiento es el error de categoría más caro de la ingeniería de frontend.

flowchart TD
D[que restriccion domina el proyecto] --> P[rendimiento y DX de grano fino]
D --> T[equipo y contratacion]
D --> E[ecosistema y librerias concretas]
D --> R[riesgo y longevidad corporativa]
P -->|aqui Solid brilla| SI[elige Solid]
T -->|pool React enorme plazos cortos| NO[probablemente no Solid]
E -->|dependes de libs solo-React| NO
R -->|se exige una apuesta segura| NO
style SI fill:#a6e3a1,color:#11111b
style NO fill:#f38ba8,color:#11111b

Escenarios donde Solid pierde

Los criterios abstractos se vuelven nítidos en casos concretos. Un equipo grande de React con un plazo ajustado: introducir Solid añade una curva de aprendizaje y una tanda de refactors justo cuando lo único que importa es entregar; la tecnología aburrida, la que el equipo ya domina, gana sin discusión.

Una app atada al ecosistema de React: si compartes componentes con una app React Native, o dependes de una librería de UI empresarial, un editor de texto rico o un SDK que solo publican versión para React, la interoperabilidad pesa más que la elegancia del modelo. Reescribir esa pieza para ahorrar milisegundos de render es negativo en el balance.

Un sitio mayormente estático de contenido —un blog, una documentación, un marketing site—: ahí una SPA de Solid es sobreingeniería. Astro con islas entrega más rápido con menos JavaScript, y cuando de verdad hace falta interactividad puntual, incrusta una isla de Solid justo en ese punto sin cargar una SPA entera. La pregunta no es «qué framework de SPA», sino «¿necesito siquiera una SPA?», y muchas veces la respuesta honesta es que no.

---
// pagina .astro: HTML estatico por defecto, cero JavaScript...
import Buscador from "../components/Buscador"; // ...salvo esta isla de Solid
---
<article>{contenidoEstatico}</article>
<Buscador client:visible />   {/* solo ESTE trozo hidrata Solid */}

Una organización con procura conservadora: si la política exige tecnologías con respaldo corporativo demostrable, el mérito técnico de Solid no entra siquiera en la conversación —la decisión la toma un comité de riesgo, no un ingeniero—. En los cuatro escenarios, Solid no falla por malo: falla porque la restricción que manda no es la que Solid optimiza.

Conviene recordar, eso sí, que la elección rara vez es binaria. Si tienes una app React consolidada pero un widget concreto —una tabla de miles de filas, un editor en vivo— donde el grano fino de Solid marcaría la diferencia, Solid compila a custom elements, así que puedes incrustar esa isla dentro del React existente sin migrar nada.

import { customElement } from "solid-element";
// registra un widget Solid como elemento nativo, usable desde React, Vue o HTML plano
customElement("tabla-veloz", { filas: [] }, (props) => <TablaVeloz filas={props.filas} />);
// en el JSX de React: <tabla-veloz filas={datos} /> — Solid solo donde de verdad paga

La lección es que «no elegir Solid para la app» y «no usar Solid en ningún sitio» no son lo mismo: casi siempre existe un punto intermedio donde aplicas su fuerza sin pagar su coste de ecosistema en todo el proyecto.

⚠️
El rendimiento rara vez es tu cuello de botella real

La trampa que empuja a elegir mal es sobrevalorar lo que Solid hace mejor. Sí, su render es más rápido y su reactividad más fina, pero pregúntate con honestidad si el render es siquiera tu cuello de botella. En la mayoría de las apps, el tiempo se va en la red, en consultas a la base de datos, en el tamaño del bundle o en un diseño que rebota al usuario —no en reconciliar un árbol—. Elegir un framework por su ventaja de render cuando tu cuello de botella está en otra capa es optimizar la parte equivocada, y encima pagando el coste de ecosistema y contratación. La velocidad de Solid es real; que sea tu restricción dominante es una hipótesis que debes verificar antes de apostar el proyecto a ella.

El sesgo hacia lo nuevo

Hay una fuerza psicológica que empuja a elegir mal, y hay que nombrarla para resistirla: el sesgo hacia lo nuevo y lo elegante. Quien acaba de aprender Solid quiere usarlo, igual que quien compra una herramienta busca dónde clavarla.

El resume-driven development —elegir tecnología para tu currículum, no para el problema— disfraza ese deseo de criterio técnico, y es tanto más peligroso cuanto más brillante es el ingeniero, porque sabe construir buenos argumentos para lo que ya quería hacer. La inteligencia, usada para racionalizar una decisión ya tomada, no protege del error: lo blinda.

El antídoto es invertir la carga de la prueba. En vez de preguntar «¿por qué no usar Solid?», pregunta «¿qué restricción concreta de este proyecto hace que Solid sea mejor que la opción aburrida, y cuánto duele si me equivoco?». Si no sabes responder con una restricción real y medible, la respuesta honesta es la tecnología que el equipo ya mantiene. La novedad se justifica; no se presume.

📝
La regla de los pocos tokens de innovación

Hay una heurística clásica de arquitectura que vale oro aquí: cada proyecto dispone de muy pocos «tokens de innovación», y gastarlos en tecnología nueva reduce los que te quedan para el resto. Si vas a innovar en tu base de datos, en tu infraestructura o en tu dominio de negocio, quizá no puedas permitirte innovar también en el framework de UI, porque cada apuesta nueva multiplica los modos de fallo desconocidos. Elegir Solid es gastar un token; a veces es la mejor inversión de tu presupuesto de novedad, y a veces lo sensato es reservarlo para donde de verdad no hay alternativa madura. La pregunta no es si Solid es bueno, sino si es ahí donde quieres gastar tu escasa cuota de riesgo.

Cómo decidir sin fanatismo

La decisión se reduce a una pregunta: ¿cuál es la restricción que domina este proyecto? Si es rendimiento de interacción con estado muy dinámico, DX de reactividad y un equipo capaz de absorber el modelo, Solid brilla y elegirlo es correcto. Si la restricción dominante es la velocidad de contratación, la dependencia de un ecosistema ajeno, la familiaridad del equipo bajo plazo, o una exigencia de longevidad institucional, entonces la mejor tecnología no es la mejor elección, y forzarla es un error de juicio disfrazado de rigor técnico.

// La decision no es un benchmark: es una funcion de coste ponderada
function elegirStack(p: Proyecto) {
  if (p.dependeDeLibsSoloReact) return "React";        // ecosistema manda
  if (p.equipoReact && p.plazoCorto) return "React";   // familiaridad manda
  if (p.sitioCasiEstatico) return "Astro + isla Solid"; // contenido manda
  if (p.politicaExigeRespaldo) return "opcion conservadora";
  if (p.interaccionMuyDinamica && p.equipoDispuesto) return "Solid"; // aqui brilla
  return "la que el equipo mantenga mejor";            // por defecto, lo aburrido
}

Pesa también la reversibilidad, y conviene hacerla explícita porque cambia el umbral de riesgo aceptable. Un prototipo de fin de semana o una herramienta interna que usarán diez personas son baratos de rehacer: ahí puedes gastar el token de innovación en Solid casi sin coste, aprender, y si no encaja, reescribir sin drama. Un core de negocio que vivirá cinco años y sobre el que trabajarán treinta ingenieros es lo contrario: cada decisión se amortiza y se hereda, así que la apuesta debe ser mucho más conservadora.

Cuanto más irreversible es la elección, más peso tienen los costes de gente y ecosistema frente a los de rendimiento, porque los primeros se pagan cada día durante años y el segundo se paga una vez. La madurez, en definitiva, es sostener sin contradicción dos cosas que el principiante cree opuestas: que Solid puede ser a la vez la tecnología superior y la elección equivocada para este caso concreto.

Aplícalo a un caso real para ver el método en acción. Imagina un panel de trading en tiempo real, con miles de celdas que parpadean cada milisegundo, construido por un equipo pequeño que puede aprender, para un producto propio y de larga vida. La restricción dominante es el rendimiento de actualización de grano fino, el equipo está dispuesto, y no dependes de ninguna librería solo-React: las cuatro señales apuntan a Solid, y elegirlo es de manual.

Cambia una sola variable y el veredicto se invierte. El mismo panel, pero el equipo son quince desarrolladores de React con un lanzamiento en ocho semanas y una librería de gráficos financieros que solo existe para React: ahora la restricción dominante ya no es el render sino la entrega y el ecosistema, y forzar Solid sería sacrificar el proyecto por la elegancia del modelo. Idéntico problema técnico, decisión opuesta, porque lo que cambió no fue la tecnología sino la restricción que manda.

Un último matiz, y no menor: la decisión casi nunca es tuya en solitario. Elegir un stack es un acto social —lo heredan quienes mantendrán el código, lo sufren quienes no lo eligieron, lo evalúa quien contrata—. Por eso la mejor elección técnica impuesta contra el consenso del equipo suele rendir peor que la segunda mejor adoptada con convicción por todos. Convencer, formar y construir acuerdo son parte de la decisión, no un trámite posterior a ella.

🚩

Señales de que NO

Equipo React con plazo, dependencia de librerías solo-React, sitio casi estático, o política que exige respaldo corporativo. La restricción no es el render.

Señales de que SÍ

Interacción muy dinámica, reactividad fina como ventaja real, equipo dispuesto a aprender el modelo, y libertad para elegir el stack.

⚖️

El criterio

Decide por la restricción dominante y por la reversibilidad de la apuesta, no por quién gana el benchmark de render.

Elegir tecnología es una apuesta socio-técnica, no la lectura de un benchmark

La lección que corona el pensamiento de arquitectura, y la más difícil de tragar para quien ama una herramienta, es que la calidad técnica de un framework y su idoneidad para un proyecto son dos ejes casi independientes, y confundirlos es el error clásico del ingeniero brillante que aún no es senior. Un framework se elige con una función de coste que casi nunca está dominada por el término que los benchmarks miden: la red, la base de datos, el bundle, el diseño y —sobre todo— las personas suelen pesar más que los milisegundos de reconciliación, de modo que ganar el eje del render mientras pierdes el de la contratación, el del ecosistema o el de la longevidad es optimizar una variable menor a costa de las mayores. Solid, que es objetivamente uno de los modelos más limpios y rápidos del frontend, resulta la elección equivocada en abundantes contextos reales por razones que no tienen nada que ver con su mérito: un equipo entero que piensa en React y tiene que entregar el trimestre que viene, una dependencia de una librería que solo el ecosistema grande produce, un sitio de contenido donde una SPA es sobreingeniería y Astro con una isla puntual de Solid haría mejor trabajo con menos código, o una organización cuya política de riesgo simplemente no admite tecnologías sin respaldo corporativo. Reconocer esto no es deslealtad hacia Solid: es entender que una decisión de stack es una apuesta socio-técnica —sobre gente, tiempo, riesgo y reversibilidad— y que la respuesta correcta depende de qué restricción domina y de cuánto duele equivocarse, no de quién tiene el grafo reactivo más elegante. El experto elige a veces la tecnología aburrida a plena consciencia, precisamente porque ha interiorizado tan bien la superior que puede permitirse no usarla; y esa capacidad de renunciar a la mejor herramienta cuando el contexto pide otra es, paradójicamente, la señal más fiable de que de verdad la ha dominado.

⚔️ Decide como un arquitecto, no como un fan
  1. Para tres proyectos imaginarios —una app de trading en tiempo real, un blog corporativo, y un dashboard interno de un equipo React— nombra la restricción dominante y decide si Solid es la elección correcta.
  2. Toma un caso donde Solid tiene el mejor render pero la peor idoneidad y explica, sin contradicción, por qué ambas cosas son ciertas a la vez.
  3. Verifica, para una app tuya, si el render es de verdad el cuello de botella; si no lo es, di qué capa lo es y qué framework cambiaría eso.
  4. Justifica cuándo Astro con una isla de Solid es mejor elección que una SPA de Solid entera, y con qué criterio de contenido lo decides.
  5. Formula tu propia regla de una frase para decidir stack, que incluya restricción dominante y reversibilidad, y pruébala contra los tres proyectos del punto 1.