Ir al contenido

Clasificación de Servicios

Todo servicio desplegado en HERA tiene una capa y una categoría oficial asignada. Esta página define el modelo de 4 capas, las 13 categorías, el decision tree, las golden rules, la convención de naming y la trazabilidad entre GitLab, SonarQube y Kubernetes. Consulta esta referencia antes de crear cualquier servicio nuevo.


1. Modelo Conceptual: Las 4 Capas Estratégicas

Sección titulada «1. Modelo Conceptual: Las 4 Capas Estratégicas»

Antes de pensar en categorías individuales, todo servicio debe ubicarse en una de cuatro capas que reflejan su propósito estratégico en el ecosistema:

Modelo de 4 Capas Estratégicas — HERA
Cada servicio en HERA pertenece a una de estas 4 capas. La capa define su propósito, sus límites y quién lo opera.
Cliente final (Web · Mobile · Partner)
1
Experience Layer
Adapta y orquesta para el usuario final
frontend bff experience
2
Domain Layer
Lógica de negocio y datos del producto
backend (domain) data cms
↓ ↑
3
Integration Layer
Conexión con sistemas externos y procesamiento async
integration event worker
↓ ↑
Sistemas externos · SAP · CRM · Payments · Marketplaces
4
Platform Layer (Transversal)
Servicios reutilizables consumidos por todas las capas anteriores
platform edge infra docs
Mensaje clave Cada servicio en HERA pertenece a una sola capa. La capa define su propósito, sus límites y quién lo opera.
CapaPropósitoQuién la operaPregunta clave
1. Experience LayerAdapta y orquesta para el usuario finalEquipos de producto + Frontend devs”¿Qué necesita ver el cliente?“
2. Domain LayerLógica de negocio y datos del productoEquipos de producto + Backend devs”¿Cuáles son las reglas del negocio?“
3. Integration LayerConecta con sistemas externos y procesa asyncPlatform Engineers + Backend devs”¿Cómo hablamos con el mundo exterior?“
4. Platform LayerServicios reutilizables consumidos por todas las capasPlatform Engineers (equipo HERA)“¿Qué necesita reutilizarse en toda la organización?”

CapaCategoríaPropósitoEjemplo canónico
ExperiencefrontendApp que el usuario final ve y tocafrontend-web-store
ExperiencebffBackend optimizado para un canal específicobff-mobile-app
ExperienceexperienceOrquestación avanzada por journey de negocioexperience-checkout-journey
DomainbackendLógica de negocio central — Domain Servicebackend-checkout-service
DomaindataExposición de datos read-heavydata-catalog-search
DomaincmsGestión de contenido editorialcms-corporate-site
IntegrationintegrationConexión a sistemas externosintegration-sap-orders
IntegrationeventProductores y consumidores reactivosevent-consumer-orders
IntegrationworkerProcesamiento asíncrono batch/cronworker-loyalty-points
PlatformplatformServicios reutilizables (auth, notifs)platform-auth-service
PlatformedgeAPI Gateway, Ingress, entrada al sistemaedge-apigee-config
PlatforminfraInfrastructure as Codeinfra-terraform-modules
PlatformdocsRepositorios de documentacióndocs-architecture-decisions

Ejemplos de Naming por Categoria

Convencion HERA: <tipo>-<detalle> en kebab-case

frontend Experience
frontend-web-storefrontend-mobile-appfrontend-b2b-portalfrontend-internal-admin
bff Experience
bff-web-storebff-mobile-appbff-b2b-portal
experience Experience
experience-checkout-journeyexperience-customer-onboardingexperience-product-return
backend Domain
backend-checkout-servicebackend-inventory-servicebackend-loyalty-enginebackend-pricing-service
data Domain
data-catalog-searchdata-product-recommendationsdata-customer-360
cms Domain
cms-corporate-sitecms-marketing-contentcms-product-stories
integration Integration
integration-sap-ordersintegration-stripe-paymentsintegration-salesforce-crm
event Integration
event-consumer-ordersevent-handler-inventoryevent-dispatcher-notifications
worker Integration
worker-loyalty-pointsworker-sap-exportworker-reports-generator
platform Platform
platform-auth-serviceplatform-notificationsplatform-feature-flags
edge Platform
edge-apigee-configedge-ingress-rulesedge-cloud-armor-policies
infra Platform
infra-terraform-modulesinfra-helm-checkoutinfra-k8s-base
Mensaje clave Cada servicio HERA sigue la convencion <tipo>-<detalle> en kebab-case. El prefijo de tipo siempre va primero. No repetir el producto (la jerarquia del grupo GitLab ya lo provee). Sin clasificacion, no se crea el repo.

Capa: Experience Layer

Qué es: Aplicación que el usuario final consume directamente (web SPA, web SSR, app móvil nativa, app de escritorio).

  • Necesitas renderizar una interfaz de usuario en navegador o dispositivo
  • El servicio tiene estado de UI, no estado de negocio
  • Consume APIs vía HTTP/GraphQL
  • Si el servicio solo expone datos → es data o backend
  • Si orquesta múltiples APIs sin renderizar UI → es bff o experience
frontend-web-store # Next.js SSR para tienda
frontend-mobile-app # React Native
frontend-b2b-portal # SPA del portal de proveedores
frontend-internal-admin # Admin interno
  • Separación clara entre UI y lógica de negocio
  • Despliegue independiente del backend
  • Escalado horizontal del rendering según tráfico
  • A/B testing y feature flags sin tocar el backend
  • Equipos frontend autónomos
AspectoDetalle
LenguajeTypeScript / JavaScript
FrameworksNext.js, Astro, Vite + React, React Native
PipelineGolden Pipeline
Imagen basehera/node-golden:20-alpine
Criticidad típicaAlta (es la cara del negocio)
SLO sugerido99.9% uptime, P95 TTFB < 800ms
Observabilidad claveWeb Vitals, error rate del cliente, latencia de TTFB

Capa: Experience Layer

Qué es: Backend optimizado para un canal específico (web, móvil, partner). Agrega, filtra y transforma datos de servicios backend y data para entregar al frontend exactamente lo que necesita en una sola llamada.

  • Tienes múltiples canales con necesidades diferentes (web rica, móvil ligera, API pública)
  • El frontend necesita datos de 3 o más servicios backend para una sola pantalla
  • Quieres versionar la API del cliente independientemente del core
  • Necesitas aplicar reglas de presentación (formato de fechas, locale, layouts)
  • Tienes un solo canal y un solo backend → es overhead innecesario
  • El BFF tendría lógica de negocio pesada → eso pertenece al backend
  • Solo agrega un endpoint a una llamada → no justifica un servicio separado
  • Es orquestación de un journey completo (checkout, onboarding) → es experience
bff-web-store # BFF para frontend web
bff-mobile-app # BFF optimizado para móvil (payloads ligeros)
bff-b2b-portal # BFF para portal de proveedores
  • Menos llamadas desde el frontend — el BFF agrega N llamadas en una sola respuesta
  • Mejor performance percibida — menos round trips, payload optimizado por canal
  • Desacoplamiento frontend/backend — el frontend evoluciona sin tocar servicios core
  • Control de seguridad centralizado — autenticación y autorización en el borde
  • Versionado independiente — el BFF web puede ir en v3 mientras el móvil sigue en v2
AspectoDetalle
LenguajeNode.js (más común), Java, .NET
FrameworksExpress, Fastify, NestJS, Spring Boot
PipelineGolden Pipeline
Criticidad típicaAlta (bloquea el frontend si falla)
SLO sugerido99.9% uptime, P95 < 300ms
Observabilidad claveLatencia P95, error rate por endpoint, fan-out a backends

Capa: Experience Layer

Qué es: Servicio que orquesta un journey completo de negocio (no un canal). Agrupa múltiples servicios backend, data y platform para entregar una experiencia end-to-end del usuario, independiente del canal por el que entre.

AspectoBFFExperience Service
PropósitoOptimización por canalOrquestación de journey de negocio
Ejemplo”Datos para móvil vs web""Todo el flujo de checkout o de onboarding”
Cambia conEl cliente (canal)El proceso de negocio
Owner típicoEquipo frontend del canalEquipo de producto/journey
Reusable cross-canalNo (uno por canal)Sí (lo consumen múltiples BFFs)
  • Tienes un journey complejo que toca 5+ servicios (checkout, onboarding, devolución)
  • El journey es igual o muy similar entre canales (web y móvil hacen lo mismo)
  • Quieres encapsular la lógica del proceso en un solo lugar
  • Múltiples BFFs consumirían exactamente la misma orquestación
  • Es solo agregación técnica → es bff
  • El journey tiene reglas de negocio puras sin orquestación → es backend
  • Solo lo usa un canal → puede vivir en el BFF de ese canal
experience-checkout-journey # Journey completo de checkout
experience-customer-onboarding # Alta de cliente end-to-end
experience-product-return # Proceso de devolución
experience-loyalty-redemption # Canje de puntos
  • Encapsulamiento del journey — un cambio de proceso se hace en un solo lugar
  • Reusabilidad cross-canal — múltiples BFFs consumen el mismo Experience Service
  • Visibilidad end-to-end del proceso de negocio
  • Testing del journey completo centralizado
  • Observabilidad del proceso (métricas de cada paso del journey)
AspectoDetalle
LenguajeJava, .NET, Node.js
FrameworksSpring Boot, NestJS
PipelineGolden Pipeline
Patrones útilesSaga, State Machine, Workflow Engine
Criticidad típicaAlta (bloquea journeys completos del negocio)
SLO sugerido99.9% uptime, P95 según journey
Observabilidad claveMétricas por paso del journey, conversion rate, drop-off points

Capa: Domain Layer

Qué es: Servicio que implementa lógica de negocio central y es propietario de un dominio o subdominio del producto. Es el corazón funcional del software. En arquitectura empresarial se conoce como Domain Service.

  • Implementa reglas de negocio que son propias del producto (checkout, inventario, loyalty)
  • Es propietario de los datos de su dominio
  • Otros servicios lo consumen como source of truth de su dominio
  • Solo conecta a un sistema externo → es integration
  • Solo expone datos sin lógica → es data
  • Es reutilizable transversalmente (auth, notifs) → es platform
  • Orquesta un journey end-to-end → es experience
backend-checkout-service # Procesamiento de orden de compra
backend-inventory-service # Gestión de stock
backend-loyalty-engine # Motor de puntos y recompensas
backend-pricing-service # Cálculo de precios y promociones
  • Bordes claros de dominio — cada servicio tiene una responsabilidad
  • Escalado independiente — el inventario escala distinto al checkout
  • Despliegue independiente — un cambio en pricing no toca checkout
  • Equipos autónomos — un equipo dueño por servicio
  • Source of truth clara para auditoría y compliance
AspectoDetalle
LenguajeJava, .NET, Node.js, Python
FrameworksSpring Boot, ASP.NET Core, NestJS, FastAPI
PipelineGolden Pipeline
Acceso a datosSí — propietario de tablas en Cloud SQL
Criticidad típicaAlta
SLO sugerido99.95% uptime, P95 < 500ms
Observabilidad claveLatencia de operaciones de negocio, error rate, throughput

Capa: Domain Layer

Qué es: Servicio que expone datos para consumo de lectura intensiva (catálogos, búsquedas, reportes). No contiene lógica de negocio compleja — su valor está en cómo modela y entrega los datos.

  • Datos consultados por muchos clientes simultáneamente con queries complejas
  • Necesitas caché agresivo, índices especializados o motores de búsqueda
  • Los datos son denormalizados desde múltiples fuentes (proyecciones, vistas materializadas)
  • El read pattern es muy distinto al write pattern (CQRS)
  • Solo es CRUD básico de un dominio → vive en el backend propietario
  • Tiene reglas de negocio complejas → es backend
data-catalog-search # Catálogo con búsqueda y facetas (Elasticsearch)
data-product-recommendations # Recomendaciones personalizadas
data-sales-reporting # Reportes de ventas pre-calculados
data-customer-360 # Vista 360 del cliente
  • Performance optimizada para consultas intensivas
  • Escalado horizontal independiente de los servicios transaccionales
  • Caché especializado sin contaminar el modelo transaccional
  • Múltiples consumidores sin acoplar al backend de origen
  • Read replicas y motores de búsqueda específicos
AspectoDetalle
LenguajeNode.js, Java, Python, Go
FrameworksExpress, Spring, FastAPI
Storage típicoRead replicas de Cloud SQL, BigQuery, Elasticsearch, Redis
PipelineGolden Pipeline
Acceso a datosSolo lectura — los datos vienen de eventos o ETL desde el backend propietario
Criticidad típicaMedia-Alta
SLO sugerido99.9% uptime, P95 < 200ms
Observabilidad claveCache hit rate, latencia de query, freshness de datos

Capa: Domain Layer

Qué es: Servicio especializado en gestión de contenido editorial (textos, imágenes, banners, campañas). Generalmente es un Headless CMS que expone contenido vía API a frontends.

  • El contenido lo edita gente de negocio o marketing, no devs
  • Necesitas versionado de contenido, workflow de aprobación, programación de publicaciones
  • Múltiples frontends consumen el mismo contenido (web, móvil, kioscos)
  • El “contenido” son datos transaccionales (productos, precios) → es data o backend
  • Solo necesitas un endpoint estático → no justifica un CMS
cms-corporate-site # CMS para sitio corporativo (Strapi)
cms-marketing-content # Banners, landings, contenido de marketing
cms-product-stories # Historias de producto multi-idioma
  • Autonomía del negocio — marketing publica sin pasar por devs
  • Workflow editorial — borradores, revisiones, programación
  • Multi-canal — un solo contenido alimenta web, móvil y partners
  • Versionado y rollback de contenido publicado
  • Localización y soporte multi-idioma
AspectoDetalle
Software típicoStrapi, Sanity, Contentful, Directus
LenguajeNode.js (Strapi, Sanity)
PipelineGolden Pipeline
StoragePostgreSQL (Cloud SQL) + Cloud Storage para assets
Criticidad típicaMedia-Alta
SLO sugerido99.9% uptime
Observabilidad claveLatencia de API de lectura, uptime del editor, errores de publicación

Capa: Integration Layer

Qué es: Servicio cuya única responsabilidad es conectar HERA con un sistema externo (SAP, CRM, payment gateway, marketplace). Encapsula el protocolo, la autenticación y la traducción de modelos.

  • Necesitas hablar con un sistema fuera del ecosistema HERA
  • Quieres aislar a los servicios de negocio de los detalles del sistema externo (SOAP, IDoc, archivos, formatos legacy)
  • Necesitas resiliencia ante caídas o lentitud del sistema externo
  • La integración es trivial (una sola llamada HTTP) → puede vivir dentro del backend
  • El sistema externo es de Grupo Herdez y ya tiene API moderna → llámalo directo
integration-sap-orders # Integración con SAP ERP
integration-salesforce-crm # Sincronización con Salesforce CRM
integration-stripe-payments # Gateway de pagos Stripe
integration-mlibre-marketplace # Conector a Mercado Libre
  • Aislamiento de sistemas legacy — el resto del ecosistema no conoce SOAP ni IDocs
  • Resiliencia — circuit breakers, retries, timeouts en un solo lugar
  • Traducción de modelos — el sistema externo cambia su contrato y solo tocas un servicio
  • Auditabilidad — todas las llamadas al sistema externo pasan por aquí
  • Rate limiting controlado — protege al sistema externo de saturación
AspectoDetalle
LenguajeJava, .NET (común para sistemas enterprise)
FrameworksSpring Integration, Apache Camel
PipelineGolden Pipeline
Patrones obligatoriosCircuit Breaker, Retry con Backoff, Timeout, ACL
Criticidad típicaVariable (depende del sistema externo)
SLO sugerido99.5% uptime (limitado por el sistema externo)
Observabilidad claveTasa de éxito hacia el externo, latencia, errores por código

Capa: Integration Layer

Qué es: Servicio que reacciona a eventos publicados en un bus (Pub/Sub, Kafka). No expone APIs HTTP — su trigger es la llegada de mensajes.

  • Necesitas acoplamiento débil entre dominios (pedido creado → muchos servicios reaccionan)
  • Quieres propagación de cambios sin que el origen sepa quién consume
  • Tienes patrones event-driven o coreografía de servicios
  • Procesamiento near-real-time (no es batch, no es síncrono)
  • El procesamiento es periódico y no reactivo → es worker
  • Necesitas respuesta sincrónica al productor → debe ser HTTP
event-consumer-orders # Reacciona a eventos de orden creada/cancelada
event-handler-inventory # Actualiza stock al recibir eventos de venta
event-dispatcher-notifications # Envía notifs al recibir eventos de negocio
event-collector-audit # Persiste eventos para auditoría
  • Acoplamiento débil entre dominios — el publisher no conoce a los consumers
  • Escalabilidad natural — múltiples consumers procesan en paralelo
  • Coreografía sobre orquestación — cada dominio reacciona autónomamente
  • Reprocesamiento — eventos persistidos pueden replayed
  • Auditoría completa del flujo de negocio
AspectoDetalle
LenguajeJava, Node.js, Python, Go
Bus de eventosPub/Sub (estándar HERA), Kafka (casos especiales)
PipelineGolden Pipeline
Patrones obligatoriosIdempotencia, dead-letter queue, ordering si aplica
Criticidad típicaAlta
SLO sugeridoLag < 1min, 99.9% mensajes procesados
Observabilidad claveLag del consumer, mensajes/segundo, errores por tipo de evento

Capa: Integration Layer

Qué es: Servicio que ejecuta procesamiento asíncrono en background sin atender requests HTTP de usuarios. Procesa jobs programados (cron), batches o tareas encoladas.

  • Tareas que toman minutos u horas y no pueden bloquear una request HTTP
  • Procesamiento periódico (cierre de día, recálculo de loyalty, sincronización nocturna)
  • ETL entre sistemas
  • Generación de reportes pesados, exportaciones masivas
  • La tarea debe responder en tiempo real → es un endpoint del backend
  • Reacciona a un evento puntual del bus → es event
worker-loyalty-points # Recálculo nocturno de puntos
worker-sap-export # Exportación batch de órdenes a SAP
worker-inventory-sync # Sincronización de stock con bodegas
worker-reports-generator # Generación de PDFs de reportes
  • Desacople de tiempos — el usuario no espera operaciones largas
  • Resiliencia ante fallos — un job puede reintentarse sin afectar a usuarios
  • Escalado por demanda — más workers cuando hay backlog
  • Operaciones programadas controladas centralmente
  • Procesamiento masivo sin saturar APIs de usuario
AspectoDetalle
LenguajeJava, Python, Node.js, Go
Patrón típicoCronJob de Kubernetes, BullMQ, Celery, Quartz
PipelineGolden Pipeline
HealthcheckEndpoint mínimo para liveness probe
Criticidad típicaMedia
SLO sugeridoJob duration p95, success rate > 99%
Observabilidad claveJob duration, success rate, backlog size, last run timestamp

Capa: Platform Layer

Qué es: Servicio reutilizable transversalmente por múltiples productos del ecosistema HERA. Resuelve un problema común (autenticación, notificaciones, feature flags) para que cada equipo no lo reinvente.

  • La funcionalidad es necesaria por 3 o más productos del ecosistema
  • Es agnóstica del dominio de negocio (auth no depende de qué vende cada tienda)
  • Tiene un equipo o área dueña que la mantiene como producto interno
  • Solo lo usa un producto → es backend de ese producto
  • Es lógica específica de un dominio de negocio → es backend
  • Es entrada al sistema (API Gateway) → es edge
platform-auth-service # Autenticación y autorización corporativa
platform-notifications # Envío de emails, SMS, push (multi-canal)
platform-feature-flags # Toggles de features
platform-audit-logging # Logging centralizado de eventos de negocio
platform-file-storage # Subida y entrega de archivos
  • DRY a nivel organización — no se reimplementa auth N veces
  • Estándar único — todos los productos manejan auth igual
  • Mantenimiento centralizado — security patches en un solo lugar
  • Compliance simplificado — auditorías pasan por servicios conocidos
  • Time to market acelerado — los productos heredan capacidades
AspectoDetalle
PropietarioEquipo de Plataforma HERA
LenguajeJava, .NET, Go (priorizando estabilidad)
PipelineGolden Pipeline
SLO sugerido99.95% uptime
Criticidad típicaCrítica (caída afecta a múltiples productos)
Observabilidad claveSLOs estrictos, alertas con bajo umbral, runbooks completos

Capa: Platform Layer

Qué es: Punto de entrada al sistema. Maneja routing, rate limiting, autenticación de borde, transformación de protocolos y políticas de tráfico. Es la primera línea de defensa antes de que un request toque cualquier servicio de negocio.

Aspectoplatformedge
PosiciónInterno, llamado por otros serviciosExterno, primer salto desde el cliente
Ejemplosauth, notifications, loggingAPI Gateway, Ingress, WAF
Owner típicoPlatform EngineeringPlatform Engineering + Security
Cambia conNecesidades de negocioTopología de red, seguridad
  • Necesitas un API Gateway (Apigee, Kong, GCP API Gateway)
  • Configuración de Ingress de Kubernetes específica del producto
  • WAF rules custom (Cloud Armor)
  • GraphQL Gateway unificado
  • Es lógica de aplicación → es backend
  • Es infraestructura genérica → es infra
  • Es un servicio reutilizable interno → es platform
edge-apigee-config # Configuración de Apigee API Gateway
edge-ingress-rules # Ingress controllers de Kubernetes
edge-cloud-armor-policies # Reglas WAF Cloud Armor
edge-graphql-gateway # Gateway GraphQL unificado
  • Centralización del borde — todas las políticas de entrada en un solo lugar
  • Defensa en profundidad — primera línea antes de los servicios
  • Transformación de protocolos — REST a GraphQL, HTTP a gRPC
  • Rate limiting global y throttling
  • Observabilidad de tráfico desde el primer hop
AspectoDetalle
Software típicoApigee, Kong, GCP API Gateway, Istio Gateway
ConfiguraciónYAML / declarativa
PipelineGolden Pipeline — variante base-edge.yml
OwnerPlatform Engineering + Security
Criticidad típicaCrítica (todo pasa por aquí)
SLO sugerido99.99% uptime, latencia añadida < 50ms
Observabilidad claveLatencia agregada, RPS por endpoint, rate limit hits, errores 4xx/5xx

Capa: Platform Layer

Qué es: Repositorio que contiene Infrastructure as Code — Terraform, Helm charts, manifiestos Kubernetes — para aprovisionar y configurar la infraestructura cloud.

  • Necesitas crear o modificar recursos en GCP (Cloud SQL, GKE namespaces, buckets, networking)
  • Defines la configuración de despliegue del producto en Kubernetes
  • Contiene módulos Terraform reutilizables
  • Es código de aplicación que corre en runtime → es otro tipo de servicio
  • Es configuración de pipeline (.gitlab-ci.yml) → vive con el código del servicio
  • Es configuración de API Gateway → es edge
infra-terraform-modules # Módulos Terraform compartidos
infra-helm-checkout # Helm chart de un servicio backend
infra-k8s-base # Manifiestos base de Kubernetes
  • Reproducibilidad — el ambiente DEV es idéntico al PRD
  • Auditoría — cada cambio de infra pasa por MR y review
  • Versionado — rollback de infraestructura es trivial
  • Drift detection — Terraform plan detecta cambios manuales
  • Documentación viva — el código ES la documentación de la infra
AspectoDetalle
HerramientasTerraform, Helm, kubectl, kustomize
PipelineGolden Pipeline — variante base-infra.yml
State storageGCS bucket centralizado con locking
Criticidad típicaAlta
Observabilidad claveDrift de Terraform, éxito de plans/applies

Capa: Platform Layer

Qué es: Repositorio dedicado a documentación — ADRs, guías técnicas, runbooks, contratos de API, especificaciones de negocio.

  • Documentación que vive más allá del README
  • Necesitas versionar documentación junto con cambios de producto
  • Contiene ADRs (Architecture Decision Records) o RFCs
  • Solo necesitas un README → vive en el repo del servicio
  • Es documentación de plataforma → vive en platform/docs/
docs-architecture-decisions # ADRs de arquitectura
docs-runbooks-sre # Runbooks operacionales
docs-product-specs # Especificaciones de producto
AspectoDetalle
FormatoMarkdown / MDX
RenderAstro + Starlight, Docusaurus, MkDocs
PipelineGolden Pipeline — variante base-docs.yml
Criticidad típicaBaja (no afecta runtime)

3. Decision Tree — Cuándo usar cada categoría

Sección titulada «3. Decision Tree — Cuándo usar cada categoría»

Cuando no sepas qué categoría usar, sigue este árbol de decisión en orden:

Decision Tree por Caso

Sigue el caso que mejor describa tu escenario para encontrar la categoria correcta

1 UI para el usuario final
Renderiza UI al usuario final?
SI frontend
NO continuar
2 Frontend necesita datos de varios servicios
Consume multiples APIs backend en una vista?
SI
Journey completo de negocio?
SI experience
NO bff
NO consumo directo
3 Logica de negocio
Reglas de negocio complejas y dueno de datos?
SI
Agnostico del dominio?
SI platform
NO backend
NO
Solo read-heavy?
SI data
NO
Contenido editorial?
SI cms
NO revisar
4 Conectar con sistema externo
Sistema externo a Grupo Herdez?
SI integration (con ACL)
NO backend
5 Procesamiento asincrono
Es procesamiento async?
SI
Reactivo a eventos del bus?
SI event
NO
Batch/cron?
SI worker
NO revisar
NO backend sincrono
6 Borde del sistema
Punto de entrada (API GW, Ingress, WAF)?
SI edge
NO
IaC (Terraform, Helm)?
SI infra
NO
Solo documentacion?
SI docs
NO revisar

Por que NO repetir el producto

El producto ya esta en la jerarquia del grupo GitLab

grupo-herdez/ products/ ecommerce/ tienda-herdez/ v2-partner-beta/ backend-checkout-service
ya provee el contexto

Estrategia de Namespaces de Kubernetes

Cada producto tiene un unico namespace en GKE con todos sus servicios dentro

GKE Cluster
tienda-herdez/
frontend frontend-web-store
bff bff-mobile-app
bff bff-web-store
experience experience-checkout-journey
backend backend-checkout-service
backend backend-inventory-service
data data-catalog-search
cms cms-marketing-content
integration integration-sap-orders
event event-consumer-orders
worker worker-loyalty-points
Mensaje clave 6 casos de uso comunes con su categoría recomendada. Consulta el árbol antes de crear un servicio.

Estas 8 reglas son obligatorias y no negociables. Aplican a todo servicio que se construye y despliega en HERA:

Regla 1 — Frontend con múltiples backends DEBE tener un BFF

Sección titulada «Regla 1 — Frontend con múltiples backends DEBE tener un BFF»

Todo frontend que cumpla al menos uno de estos criterios DEBE tener un BFF:

  • (a) Consume 3 o más servicios backend en una sola vista
  • (b) Requiere agregación o transformación específica del canal (móvil necesita payload distinto a web)
  • (c) Tiene SLA de latencia agresivo (P95 < 500ms con backends remotos)
  • (d) Necesita centralizar autenticación/autorización del lado del servidor
  • (e) El frontend tiene cadencia de versionado más rápida que los backends que consume

Frontends que NO cumplen ninguno de estos criterios pueden llamar directamente a las APIs si los endpoints son estables, públicos y versionados.

Regla 2 — Toda lógica de negocio vive en Domain Services (backend)

Sección titulada «Regla 2 — Toda lógica de negocio vive en Domain Services (backend)»

Ni el frontend, ni el BFF, ni el integration pueden contener reglas de negocio. La lógica vive en el backend propietario del dominio. Esto evita la duplicación, los bugs de inconsistencia entre canales y las complicaciones durante auditorías de compliance.

Regla 3 — Toda integración externa va en integration con ACL

Sección titulada «Regla 3 — Toda integración externa va en integration con ACL»

No se permite que un backend o frontend llame directamente a SAP, CRM o payment gateways. Todas las integraciones externas pasan por un servicio integration que implementa el patrón Anti-Corruption Layer.

Regla 4 — Todo proceso async se desacopla en event o worker

Sección titulada «Regla 4 — Todo proceso async se desacopla en event o worker»

Si una tarea no es inmediata, no bloquees al usuario. Reactiva (event) si responde a un mensaje del bus, batch (worker) si es periódica o programada. Nunca metas un sleep de 30 segundos en un endpoint HTTP.

Regla 5 — Servicios usados por 3+ productos van en platform

Sección titulada «Regla 5 — Servicios usados por 3+ productos van en platform»

Si tu equipo está reimplementando autenticación, notificaciones o logging, detente. Esa funcionalidad ya debe existir como platform service. Si no existe, propón crearla — no la metas en tu backend.

Regla 6 — Naming obligatorio según convención HERA

Sección titulada «Regla 6 — Naming obligatorio según convención HERA»

Todo repo sigue el formato <tipo>-<detalle>. Ver Convención de Naming más abajo. Ningún repo se crea sin nombre conforme.

Todo servicio tiene service_type declarado en su service-manifest.yml, con uno de los 13 valores oficiales. Sin clasificación no se crea el repo en GitLab.

Regla 8 — Registro en inventario HERA obligatorio

Sección titulada «Regla 8 — Registro en inventario HERA obligatorio»

Todo servicio se registra en el catálogo de servicios HERA con su metadata: dueño, criticidad, dependencias, SLO.


<tipo>-<detalle>

Donde:

  • <tipo> es uno de los 13 valores oficiales (frontend, bff, experience, backend, data, cms, integration, event, worker, platform, edge, infra, docs)
  • <detalle> describe la función específica del servicio en kebab-case

El producto ya está en la jerarquía del grupo GitLab:

Si nombras el repo backend-tienda-herdez-checkout-service, repites “tienda-herdez” innecesariamente. Esto se llama redundancia con el contexto.

Categoría✅ Correcto❌ Incorrecto
frontendfrontend-web-storefrontend-tienda-herdez-web
bffbff-mobile-appbff-tienda-mobile-app
experienceexperience-checkout-journeyexperience-tienda-checkout
backendbackend-checkout-servicebackend-tienda-checkout-service
datadata-catalog-searchdata-tienda-catalog
cmscms-marketing-contentcms-tienda-marketing
integrationintegration-sap-orderssap-integration-tienda
eventevent-consumer-orderstienda-event-orders
workerworker-loyalty-pointstienda-worker-loyalty
platformplatform-auth-serviceauth-service-corporate
edgeedge-apigee-configapigee-tienda-edge
infrainfra-terraform-modulestienda-iac-modules
docsdocs-architecture-decisionstienda-docs-adr

6. Trazabilidad: GitLab + SonarQube + Kubernetes

Sección titulada «6. Trazabilidad: GitLab + SonarQube + Kubernetes»

Las 13 categorías oficiales se propagan a través de toda la cadena de herramientas de HERA, garantizando trazabilidad multi-dimensional. La taxonomía declarada en el repo (dominio → producto → implementación → tipo + detalle) se convierte directamente en:

Cada producto tiene un único namespace en GKE, con todos sus servicios dentro:

ReglaDetalle
Nombre fijoCoincide exactamente con el nombre del producto, sin prefijos (ej. tienda-herdez, sitio-donamaria, cms-corporativo). No incluye versión ni partner
PermanenciaEl namespace sobrevive a cambios de versión y de partner
Separación de ambientesEl mismo nombre de namespace se replica en los clusters de DEV, QA y PRD, cada uno dentro de su GCP project correspondiente
Network policiesCada namespace tiene policies que restringen el tráfico cross-namespace
RBACPermisos por namespace y por categoría de servicio

Estos patrones están explícitamente prohibidos y bloqueados en code review. Si los detectas, abre issue inmediato:

#Anti-patternPor qué es maloQué hacer en su lugar
1Un solo backend giganteImposible de mantener, deploy lento, equipos bloqueados entre síDividir por dominios en backend services
2Frontend llamando 10 APIs directoFrágil, lento, frontend acoplado a la arquitectura internaCrear un bff o experience service
3Lógica de negocio en BFFEl BFF se vuelve un mini-monolito; otros canales reimplementanLa lógica vive en backend o platform
4Repositorios sin clasificaciónImposible de buscar, sin pipeline correcto, sin SLOsAsignar una de las 13 categorías oficiales antes de crear el repo
5APIs genéricas tipo api-generalNombre que no comunica nada, terminan siendo basurerosCada servicio tiene un dominio claro reflejado en su nombre
6Integración directa a SAP desde frontendAcoplamiento total al legacy, sin ACL, sin auditoríaUsar integration service con ACL obligatorio
7Workers tratados como backendsSLOs incorrectos, sin monitoreo de backlog, fallos silenciososUsar la categoría worker con observabilidad adecuada
8Reinventar auth/notifs por productoInconsistencia, deuda técnica, deterioro del complianceUsar los servicios platform existentes
9Llamadas síncronas donde aplicaría un eventoFragilidad, cascadas de fallos, acoplamiento fuerteUsar event services con Pub/Sub
10API Gateway mezclado con servicios de negocioConfusión de responsabilidades, security misconfigurationsSeparar en categoría edge
11Múltiples namespaces por producto en GKEPermisos confusos, observabilidad fragmentadaUn solo namespace con el nombre del producto y todos sus servicios dentro
12Naming sin prefijo de tipoImposible saber qué es el servicio sin abrir el repoAplicar <tipo>-<detalle> siempre

8. Cómo se conecta esta clasificación con el resto de HERA

Sección titulada «8. Cómo se conecta esta clasificación con el resto de HERA»
AspectoDocumento relacionado
Cómo se nombra y crea el repoEstructura de Repositorios
Qué pipeline ejecutaGitLab Workflow
Qué patrón arquitectónico aplicaPatrones de Arquitectura
Quién es responsable de quéResponsabilidad Compartida
Qué imagen base debe usarGolden Images
Cómo se observa en producciónDevSecOps — Introducción