El panorama de la empresa y sus capacidades
En resumen: Un mapa de capacidades describe qué hace el negocio, sin depender de sus sistemas; unido a las aplicaciones muestra huecos y duplicaciones, y el modelo TIME dice en qué invertir.
Problema
Tres sistemas para las facturas y ninguno para las devoluciones
La tienda lleva cinco años creciendo. Con cada pedido, la tienda emite una factura por sí misma. Contabilidad compra su propio sistema y emite las facturas de las empresas. Después marketing paga un SaaS de facturas para las suscripciones, porque «era más rápido».
La directora financiera pregunta por qué las facturas tienen tres numeraciones. Mientras tanto, atención al cliente lleva las devoluciones en correos y en una hoja de cálculo, y el contador copia cada devolución a mano.
Cada equipo conoce su propio sistema. Nadie ve el conjunto.
La idea
Qué hace el negocio, no qué sistemas tiene
La arquitectura empresarial mira toda la empresa: todos los sistemas, cómo se conectan y para qué sirven. No empieza por los sistemas, sino por las capacidades: lo que hace el negocio. Vende, factura, envía, recibe devoluciones. Eso cambia poco. Los sistemas, los departamentos y los proveedores se reemplazan, y la tienda sigue facturando diez años después.
Un mapa de capacidades las ordena en grupos, normalmente en una sola página:
MAP = { "Ventas": ["Catálogo", "Carrito", "Pedidos"], "Finanzas": ["Pagos", "Facturación", "Contabilidad"], "Logística": ["Almacén", "Envío", "Devoluciones"], "Clientes": ["Notificaciones", "Soporte"],}
APPS = { "Tienda": ["Catálogo", "Carrito", "Pedidos", "Facturación"], "Almacén 2009": ["Almacén"], "Sistema de contabilidad": ["Contabilidad", "Facturación"], "SaaS de facturas": ["Facturación"], "Proveedor de pagos": ["Pagos"], "Mensajero": ["Envío"], "Servicio de correo": ["Notificaciones"], "Helpdesk": ["Soporte"],}Debajo del mapa cuelgas las aplicaciones: para cada capacidad, qué sistemas la respaldan. Entonces aparecen dos cosas que de otro modo son invisibles:
- un hueco: una capacidad sin sistema; la gente la hace a mano;
- una duplicación: una capacidad con varios sistemas; pagas varias veces y tienes varias versiones de la verdad.
Míralo
El mapa, coloreado por cobertura
# los sistemas que respaldan la capacidaddef apps_for(cap, apps): return [name for name, caps in apps.items() if cap in caps]
def coverage(names): if not names: return "✗ sin sistema" if len(names) == 1: return names[0] joined = ", ".join(names) return f"⚠ {len(names)} sistemas: {joined}"Paso a paso, en palabras
- El mapa de capacidades: lo que hace el negocio, en grupos. Todavía sin ningún sistema.
- Las 8 aplicaciones llegan una por una. Cada una dice qué capacidades respalda, y los contadores crecen.
- Una capacidad con exactamente un sistema está cubierta: verde.
- Facturación: lo hacen 3 sistemas. Tres licencias, tres numeraciones de facturas, tres lugares donde corregir.
- Devoluciones: ningún sistema. La gente las lleva en correos y hojas de cálculo.
- El mapa coloreado por cobertura: 1 hueco y 1 duplicación. De aquí parte el estado objetivo.
# los sistemas que respaldan la capacidaddef apps_for(cap, apps): return [name for name, caps in apps.items() if cap in caps]
def coverage(names): if not names: return "✗ sin sistema" if len(names) == 1: return names[0] joined = ", ".join(names) return f"⚠ {len(names)} sistemas: {joined}"
def print_map(cap_map, apps): gaps = duplicated = 0 for group, capabilities in cap_map.items(): print(group) for capability in capabilities: names = apps_for(capability, apps) gaps += len(names) == 0 duplicated += len(names) > 1 print(f" {capability}: {coverage(names)}") print(f"Huecos: {gaps}, duplicadas: {duplicated}")print_map(MAP, APPS)Ventas Catálogo: Tienda Carrito: Tienda Pedidos: TiendaFinanzas Pagos: Proveedor de pagos Facturación: ⚠ 3 sistemas: Tienda, Sistema de contabilidad, SaaS de facturas Contabilidad: Sistema de contabilidadLogística Almacén: Almacén 2009 Envío: Mensajero Devoluciones: ✗ sin sistemaClientes Notificaciones: Servicio de correo Soporte: HelpdeskHuecos: 1, duplicadas: 1dict conserva el orden de inserción, así que los grupos y los sistemas salen en el orden en que se escribieron.El programa es pequeño, pero el trabajo de verdad está en los datos: qué cuenta como una capacidad aparte y qué hace realmente cada sistema. Eso se averigua hablando con los equipos, no con código.
Pruébalo
Completa
¿Cómo compruebas que la aplicación respalda la capacidad?
[name for name, caps in apps.items() if cap caps]La comprobación consiste en ver si la capacidad está en la lista de la aplicación. La lista es pequeña, así que una búsqueda lineal basta de sobra.
La idea
Portafolio de aplicaciones: TIME
El mapa dice dónde está el problema. El portafolio de aplicaciones dice qué hacer con cada sistema. De cada uno anotas cuánto cuesta al año y dos puntuaciones de 1 a 5:
- valor para el negocio: cuánto lo necesita el negocio;
- estado técnico: qué tan sano está por dentro (si se mantiene, si hay gente que lo conoce, cuántas veces se cae).
Las dos puntuaciones dan cuatro decisiones, conocidas como el modelo TIME (Gartner):
| técnicamente sano | técnicamente enfermo | |
|---|---|---|
| valioso para el negocio | Invest | Migrate |
| de poco valor | Tolerate | Eliminate |
@dataclassclass Rating: app: str cost_per_year: int # € business: int # 1..5 technical: int # 1..5# TIME: ¿vale mucho para el negocio y está sano por dentro?def decide(r): valuable = r.business >= 3 healthy = r.technical >= 3 if valuable and healthy: return "invertir" if valuable: return "migrar" if healthy: return "tolerar" return "eliminar"Los precios de abajo son ejemplos, y las puntuaciones son las del equipo.
ratings = [ Rating("Tienda", 60000, 5, 3), Rating("Almacén 2009", 18000, 4, 1), Rating("Sistema de contabilidad", 24000, 4, 4), Rating("SaaS de facturas", 9600, 2, 2), Rating("Helpdesk", 4800, 2, 4),]total = saved = 0for r in ratings: decision = decide(r) print(f"{r.app}: {decision} (negocio {r.business}, técnica {r.technical})") total += r.cost_per_year if decision == "eliminar": saved += r.cost_per_yearprint(f"Al año: {total} €, quitas {saved} €")Tienda: invertir (negocio 5, técnica 3)Almacén 2009: migrar (negocio 4, técnica 1)Sistema de contabilidad: invertir (negocio 4, técnica 4)SaaS de facturas: eliminar (negocio 2, técnica 2)Helpdesk: tolerar (negocio 2, técnica 4)Al año: 116400 €, quitas 9600 €TIME no es un veredicto, sino el comienzo de una conversación. «Tolerate» significa «no gastes en eso», no «olvídalo»: el Helpdesk funciona y no estorba. «Eliminate» necesita una fecha y un plan, o la aplicación vive cinco años más.
Pruébalo
Predice la salida
La app móvil trae la mitad de los pedidos (negocio 4), pero está escrita sobre un framework que ya no se mantiene (técnica 2). ¿Qué dice decide?
print(decide(Rating("App móvil", 30000, 4, 2)))Valiosa (4 ≥ 3) pero enferma (2 < 3): migrar. El negocio necesita la función, no el sistema.
Pruébalo
Encuentra el error
Un colega escribió decide con copiar y pegar. Ahora el portafolio dice:
Tienda: invertir (negocio 5, técnica 3)Almacén 2009: invertir (negocio 4, técnica 1)Sistema de contabilidad: invertir (negocio 4, técnica 4)SaaS de facturas: eliminar (negocio 2, técnica 2)Helpdesk: eliminar (negocio 2, técnica 4)Al año: 116400 €, quitas 14400 €De pronto el Almacén 2009 pasa a recibir inversión y el Helpdesk va a eliminarse. ¿En qué línea está el error?
Elige la línea con el error.
healthy lee la puntuación del negocio en lugar de la técnica: la línea se copió de la de arriba y no se cambió. Así el Almacén 2009 (negocio 4) parece sano y el Helpdesk (negocio 2) parece enfermo. Dos puntuaciones parecidas se confunden con facilidad: una prueba con una aplicación cuyas dos puntuaciones difieran atrapa el error al instante.
La idea
Estado objetivo y hoja de ruta
El mapa y el portafolio dan el estado objetivo: cómo debería verse el panorama dentro de uno o dos años. Para la tienda:
- las facturas están solo en el sistema de contabilidad, con una sola numeración; el SaaS de facturas se va (eliminate), y el módulo de facturas de la tienda se apaga;
- el almacén se reemplaza (migrate) por uno nuevo que también respalda las devoluciones: el hueco se cierra donde está la mercancía;
- todo lo demás se queda.
La hoja de ruta es el orden de los pasos para llegar ahí, con estados intermedios que funcionan:
- el almacén nuevo se encarga de las devoluciones, y el viejo se queda con la mercancía; la conexión con el Almacén 2009 pasa por una anti-corruption layer, para que su CSV no se filtre al código nuevo;
- la mercancía pasa poco a poco al almacén nuevo, como en «Cambiar un sistema en marcha (Strangler Fig, Expand–Contract)», hasta que el Almacén 2009 se queda sin tráfico;
- las facturas de la tienda pasan al sistema de contabilidad; la numeración cambia con el año nuevo, para que quede claro a los contadores;
- la suscripción al SaaS se cancela después de la última factura emitida en él.
Cada paso es una decisión aparte con un ADR, su propio costo y sus propios riesgos en el registro. El orden se elige por el dolor y por las dependencias: las devoluciones van primero, porque hoy ahí se pierde dinero.
Más precisamente, para curiosos
Los frameworks. TOGAF es el framework de arquitectura empresarial más conocido: describe un método (ADM) para estos pasos y muchos documentos. ArchiMate es un lenguaje para diagramas del panorama, y Zachman es una tabla para clasificar las descripciones. Aquí solo los nombramos: el curso enseña el trabajo, y la certificación es otro camino.
Capacidad, proceso y departamento. Una capacidad es el «qué» (facturar). Un proceso es el «cómo», en pasos (pedido → factura → pago). Un departamento es el «quién». El mapa se hace con capacidades porque son lo que menos cambia.
Las herramientas. Las empresas grandes llevan el portafolio en herramientas de EA específicas o en una CMDB. Una empresa pequeña lo lleva en una hoja de cálculo. Lo que importa es que sea un solo lugar y que se mantenga al día.
La idea
Cuándo ayuda y cuándo es burocracia
La arquitectura empresarial ayuda cuando:
- los sistemas son decenas y nadie los tiene todos en la cabeza;
- la empresa se fusiona con otra y debe decidir qué sistema se queda;
- el gasto en software crece y nadie sabe por qué se paga;
- un regulador pregunta dónde están los datos de los clientes.
Hace daño cuando:
- el mapa es el objetivo. Dibujado, impreso y olvidado. Un mapa con el que nunca se tomó una decisión es decoración.
- un comité aprueba cada biblioteca. Las decisiones que un equipo puede revertir por sí solo se quedan con el equipo. Solo se decide de forma central lo que es caro para toda la empresa: la identidad compartida, los pagos, los datos de los clientes.
- la empresa es pequeña. Tres sistemas y un equipo no necesitan un framework: basta una tabla de una página y los ADR.
- el framework sustituye a la conversación. Los documentos del framework no son el trabajo. El trabajo es la decisión que sale de ellos.
Ejercicio
El estado objetivo
Resuelve este ejercicio en tu editor.
Escribe el estado objetivo como una lista nueva de aplicaciones: la tienda ya no factura, el SaaS de facturas desaparece, y el Almacén 2009 se reemplaza por un «Almacén nuevo» que respalda el almacén y las devoluciones. Ejecuta sobre ella la misma comprobación de cobertura:
Ventas Catálogo: Tienda Carrito: Tienda Pedidos: TiendaFinanzas Pagos: Proveedor de pagos Facturación: Sistema de contabilidad Contabilidad: Sistema de contabilidadLogística Almacén: Almacén nuevo Envío: Mensajero Devoluciones: Almacén nuevoClientes Notificaciones: Servicio de correo Soporte: HelpdeskHuecos: 0, duplicadas: 0Más ejercicios
- Una fitness function para el panorama. Convierte la comprobación en una prueba que falle si hay un hueco o una duplicación sin decisión registrada (una lista de duplicaciones permitidas con sus motivos).
- El costo de la duplicación. Añade el costo de cada aplicación e imprime cuánto cuestan al año todos los sistemas de las capacidades duplicadas.
- Dos países. La tienda arranca en Grecia con un mensajero local. ¿Son dos sistemas de envío una infracción? ¿Cómo lo muestras en el mapa?
Test
Ponte a prueba
Lecciones relacionadas
Sección «Lecciones relacionadas»- Se basa en: Requisitos no funcionales que puedes medir · Integrar sistemas antiguos y ajenos · Cambiar un sistema en marcha (Strangler Fig, Expand–Contract) · Revisión de arquitectura
- Continúa en: Tu primera tarea de arquitectura
- Ejercicios sobre el tema: El arquitecto en acción