main content

Cómo implementar una arquitectura de plugins y extensiones con marketplace interno para personalizar funcionalidades en tu web app a medida

Llega un viernes cualquiera y en la reunión de roadmap te encuentras con que ventas pide un nuevo campo en la ficha de cliente, finanzas necesita un cálculo de impuestos para Portugal, soporte quiere un widget que muestre el SLA por cuenta y, de fondo, legal recuerda que el reglamento europeo de turno entra en vigor en seis semanas. El equipo de desarrollo mira al techo. Otra vez.

Si esa escena te resulta familiar, ya conoces el síntoma: tu aplicación se ha convertido en un cajón de condicionales, las releases tardan, y cada cambio mete miedo. La solución pasa por dejar de añadir piezas al núcleo y empezar a permitir que otros las añadan por su cuenta. Aquí te cuento cómo implementar una arquitectura de plugins y extensiones con marketplace interno para personalizar funcionalidades en tu web app a medida sin que el invento se te vaya de las manos.

Por qué el núcleo monolítico ya no te sirve

Cuando todo vive en el mismo repositorio y comparte ciclo de release, cada petición compite por el mismo cuello de botella: tu equipo. Diez clientes, diez variaciones del flujo de facturación, una sola pipeline. Cualquiera que haya estado tres años en un proyecto así sabe cómo acaba: ramas eternas, feature flags olvidados y QA que tarda más que el desarrollo.

Una arquitectura de plugins separa lo que no debería cambiar (autenticación, datos, API base) de lo que cambia cada semana. El núcleo expone puntos donde otros enchufan comportamiento, y nadie toca el código que sostiene la casa. Las palancas que ganas:

  • Cadencia de entrega real. Cada plugin se despliega cuando está listo, sin esperar al tren de releases del núcleo.
  • Radio de impacto controlado. Un plugin con un bug se desactiva en treinta segundos. El resto sigue como si nada.
  • Equipos en paralelo. Logística construye su plugin, marketing el suyo. No se pisan porque su contrato está en la API.

Diseñar un núcleo que sepa dejarse extender

Puntos de extensión: pocos y bien elegidos

El error más común al arrancar es abrir demasiadas puertas. Cuantos más puntos publicas, más superficie tienes que mantener compatible para siempre. Empieza con cuatro categorías:

  • Hooks de ciclo de vida que se disparan antes y después de crear, actualizar o borrar entidades. Un plugin de auditoría se engancha aquí sin saber nada del resto.
  • Slots de interfaz en los puntos calientes de la UI: una pestaña extra en la ficha de cliente, un widget en el dashboard, una acción en un menú.
  • Pasos de pipeline donde un plugin transforma o valida datos en mitad de un flujo. Calcular IVA de Canarias sin tocar el motor de facturación, por ejemplo.
  • Proveedores de servicio intercambiables. El núcleo dice "necesito enviar una notificación" y el plugin de turno responde con email, SMS o Slack.

Contratos: el documento más importante del proyecto

Cada punto de extensión va acompañado de un contrato formal. No un PDF, sino una interfaz tipada, versionada y documentada que diga: estos datos entran, este formato sale, este es el tiempo máximo de ejecución y estos efectos secundarios están permitidos.

Si los contratos son inestables, nadie querrá escribir un plugin para tu plataforma. Y sin plugins, no hay marketplace que valga.

Versionado semántico, sin atajos

La API de extensión va a evolucionar. Aplica semver con disciplina: las versiones menores añaden, nunca rompen. Las mayores pueden romper, pero con un periodo de deprecación de al menos dos releases y aviso explícito a los autores afectados.

El ciclo de vida del plugin, paso a paso

Manifiesto y empaquetado

Cada plugin se entrega como unidad cerrada: código, dependencias, assets y un manifiesto declarativo. El manifiesto declara nombre, versión, autor, puntos de extensión que consume, permisos que solicita y versión mínima de la API compatible. Este fichero es lo que mira el sistema antes de aceptar nada. Si está mal, el plugin ni siquiera llega a instalarse.

Instalación y activación: dos pasos, no uno

Instalar registra el plugin, verifica compatibilidad y solicita los permisos declarados. Activar es lo que efectivamente lo enchufa a los puntos de extensión. Separar ambas operaciones te da margen para hacer despliegues canary, probar en preproducción y desplegar a un subconjunto de usuarios antes de abrir el grifo.

Apagar sin estruendo

Desactivar tiene que ser instantáneo y sin reinicio. El plugin se desengancha, su configuración se preserva y los demás plugins ni se enteran. La desinstalación elimina el código, con opción de conservar o borrar datos. Si tu sistema necesita reiniciar el servicio para desactivar un plugin, vuelve a la pizarra.

El marketplace interno: catálogo, no bazar

Para qué sirve realmente

Un marketplace interno no es un AppStore privado. Es el sitio donde tu organización publica, descubre, audita y gobierna los plugins disponibles. La diferencia con un repositorio Git compartido es la gobernanza: en un repo, cualquiera mete lo que quiere; en un marketplace, todo plugin pasa por un proceso reproducible antes de estar disponible.

Lo que no puede faltar el día uno

  • Catálogo con búsqueda, filtros y una página de detalle por plugin con capturas, changelog y permisos solicitados.
  • Gestión de versiones con notas de cambio obligatorias, rollback de un clic y notificación automática cuando hay actualización.
  • Flujo de revisión con estados visibles: borrador, en revisión, aprobado, retirado. Sin eso, todo lo demás es maquillaje.
  • Métricas por plugin: instalaciones activas, llamadas a la API, tasa de errores. Sin datos, no decides qué mantener.

Gobernanza que no espante a nadie

El equilibrio es delicado. Si la revisión tarda tres semanas, los desarrolladores se buscan la vida y vuelves al caos previo. Si es demasiado laxa, se cuela el plugin que tumba producción. Lo que funciona: análisis automático en cada push (linting, seguridad estática, contract tests), revisión humana centrada solo en arquitectura y permisos, y un SLA público. Cuarenta y ocho horas para plugins simples, una semana para los que tocan permisos sensibles.

Seguridad: el plugin es código ajeno corriendo en tu casa

Sandboxing en serio

Un plugin que corre en el mismo proceso que tu núcleo puede leer cualquier variable de entorno, montar conexiones a tu base de datos y borrar lo que le dé la gana. Aislarlos no es opcional. Las opciones reales: procesos separados con IPC, contenedores ligeros tipo Firecracker, Web Workers en cliente o WebAssembly. Para casos críticos, WASM se está convirtiendo en la respuesta estándar.

Permisos granulares, no roles vagos

Cada plugin pide en su manifiesto lo que necesita: acceso al modelo Pedido, envío de emails, lectura de la cola de eventos. El administrador concede o rechaza permiso a permiso durante la instalación, y cualquier intento de usar algo no concedido se deniega y se registra. Nada de "permiso total porque es de un equipo interno". Esa frase ha hundido muchos sistemas.

Validación bidireccional

Los datos que el núcleo entrega al plugin se validan. Los que el plugin devuelve al núcleo también. Esquemas estrictos, tamaños máximos, rechazo sin contemplaciones de cualquier formato inesperado.

Rendimiento: límites duros desde el primer día

Carga perezosa por defecto

No cargues todos los plugins al arrancar. Cárgalos cuando se invoca su punto de extensión o cuando llega el evento que les corresponde. La diferencia entre arrancar con 200 plugins activos o con tres y cargar el resto bajo demanda son segundos de cold start y cientos de megas de memoria.

Cuotas por plugin

Tiempo máximo por invocación, memoria límite, número máximo de llamadas a la API del núcleo por minuto. Si un plugin se pasa, se le corta. Sin esto, basta un bucle infinito mal escrito para llevarse por delante al resto.

Métricas separadas

Mide cada plugin por su nombre: latencia, throughput, errores, uso de recursos. Cuando aparece un problema, la pregunta no es "qué está pasando" sino "qué plugin lo está provocando". Esa diferencia te ahorra horas de bisección a las tres de la mañana.

Cómo lanzar esto sin quemar el proyecto

SDK y documentación que la gente lea

Un SDK que abstraiga lo aburrido (autenticación, logging, persistencia), una CLI para crear un plugin esqueleto en treinta segundos y un entorno local que permita probar sin desplegar son la diferencia entre tener cinco plugins en seis meses o cincuenta. Si tus propios desarrolladores tardan medio día en montar un "hello world", olvídate de que se anime alguien de fuera.

Plugins semilla que demuestren el camino

Publica tres o cuatro plugins hechos por el equipo del núcleo antes de abrir la veda. Una exportación a Excel, una integración con email, un widget de gráficos. Sirven de referencia, dan valor inmediato y enseñan buenas prácticas mejor que cualquier documento.

Iterar antes de prometer

No prometas todos los puntos de extensión en la primera versión. Abre dos o tres, valida con un puñado de plugins reales, escucha a los desarrolladores y amplía la superficie cuando tengas certeza de qué necesitas.

Cuándo merece la pena y cuándo no

Si tu aplicación atiende a múltiples stakeholders con necesidades divergentes, prevé crecimiento funcional sostenido o quiere ofrecer personalización sin fragmentar el código, la inversión se amortiza al segundo o tercer plugin que entra sin tocar el núcleo. Si tu producto es pequeño, estable y con un alcance acotado, no te metas en esto. La complejidad te comerá.

Si estás en el primer escenario y quieres revisar el diseño antes de comprometerte con una arquitectura que te va a acompañar varios años, hablemos de tu caso y te damos una opinión honesta. Mejor invertir una conversación que tres meses en algo que luego hay que rehacer.

La idea que conviene no olvidar

Una arquitectura de plugins bien hecha convierte tu producto en una plataforma. La gracia no está en escribir mil extensiones, sino en construir un núcleo que sepa quedarse quieto mientras todo lo demás evoluciona a su ritmo. Diseña pocos puntos de extensión, contratos sólidos, gobernanza visible y métricas por plugin desde el principio. Lo demás vendrá solo, plugin a plugin, sin necesidad de tocar el código que de verdad sostiene el sistema.