Capítulo 1. Analizar los dominios empresariales

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

Si eres como yo, te encanta escribir código: resolver problemas complejos, idear soluciones elegantes y construir mundos completamente nuevos elaborando cuidadosamente sus reglas, estructuras y comportamiento. Creo que eso es lo que te ha interesado del diseño orientado a dominios (DDD): quieres ser mejor en tu oficio. Este capítulo, sin embargo, no tiene nada que ver con escribir código. En este capítulo, aprenderás cómo funcionan las empresas: por qué existen, qué objetivos persiguen y sus estrategias para alcanzarlos.

Cuando enseño este material en mis clases de diseño basado en el dominio, muchos alumnos preguntan: "¿Necesitamos conocer este material? Estamos escribiendo software, no dirigiendo empresas". La respuesta a su pregunta es un rotundo "sí". Para diseñar y construir una solución eficaz, tienes que entender el problema. El problema, en nuestro contexto, es el sistema de software que tenemos que construir. Para entender el problema, tienes que entender el contexto en el que existe: la estrategia empresarial de la organización y el valor que pretende obtener construyendo el software.

En este capítulo, aprenderás herramientas de diseño basadas en el dominio para analizar el dominio empresarial de una empresa y su estructura: su núcleo, sus subdominios de apoyo y genéricos. Este material es la base para diseñar software. En los capítulos restantes, aprenderás las distintas formas en que estos conceptos afectan al diseño del software.

¿Qué es un dominio empresarial?

Un dominio empresarial define el área principal de actividad de una empresa. En general, es el servicio que la empresa presta a sus clientes. Por ejemplo:

  • FedEx proporciona servicios de mensajería.

  • Starbucks es más conocido por su café.

  • Walmart es uno de los establecimientos minoristas más reconocidos.

Una empresa puede operar en múltiples ámbitos empresariales. Por ejemplo, Amazon ofrece servicios de venta al por menor y de computación en la nube. Uber es una empresa de viajes compartidos que también ofrece servicios de reparto de comida y bicicletas compartidas.

Es importante tener en cuenta que las empresas pueden cambiar a menudo de ámbito de negocio. Un ejemplo canónico de ello es Nokia, que a lo largo de los años ha operado en campos tan diversos como la transformación de la madera, la fabricación de caucho, las telecomunicaciones y las comunicaciones móviles.

¿Qué es un subdominio?

Para alcanzar los objetivos y metas de su dominio empresarial, una empresa tiene que operar en múltiples subdominios. Un subdominio es un área detallada de la actividad empresarial. Todos los subdominios de una empresa forman su dominio empresarial: el servicio que presta a sus clientes. Implementar un único subdominio no basta para que una empresa tenga éxito; es sólo un bloque de construcción del sistema global. Los subdominios tienen que interactuar entre sí para alcanzar los objetivos de la empresa en su dominio empresarial. Por ejemplo, puede que Starbucks sea más conocido por su café, pero crear una cadena de cafeterías de éxito requiere algo más que saber hacer un café estupendo. También hay que comprar o alquilar inmuebles en ubicaciones eficaces, contratar personal y gestionar las finanzas, entre otras actividades. Ninguno de estos subdominios por sí solo creará una empresa rentable. Todos ellos juntos son necesarios para que una empresa pueda competir en su(s) dominio(s) empresarial(es).

Tipos de subdominios

Al igual que un sistema de software consta de varios componentes arquitectónicos -bases de datos, aplicaciones frontales, servicios backend y otros-, los subdominios tienen diferentes valores estratégicos/empresariales. El diseño basado en dominios distingue entre tres tipos de subdominios: central, genérico y de apoyo. Veamos en qué se diferencian desde el punto de vista de la estrategia empresarial.

Subdominios principales

Un subdominio principal es lo que una empresa hace de forma diferente a sus competidores. Esto puede implicar inventar nuevos productos o servicios o reducir costes optimizando los procesos existentes.

Tomemos Uber como ejemplo. Al principio, la empresa ofrecía una forma novedosa de transporte: compartir viajes. A medida que sus competidores le alcanzaban, Uber encontró formas de optimizar y hacer evolucionar su negocio principal: por ejemplo, reduciendo costes haciendo coincidir a los pasajeros que iban en la misma dirección.

Los subdominios principales de Uber afectan a su cuenta de resultados. Así es como la empresa se diferencia de sus competidores. Es la estrategia de la empresa para prestar un mejor servicio a sus clientes y/o maximizar su rentabilidad. Para mantener una ventaja competitiva, los subdominios principales implican invenciones, optimizaciones inteligentes, conocimientos empresariales u otra propiedad intelectual.

Considera otro ejemplo: El algoritmo de clasificación de Google Search. En el momento de escribir estas líneas, la plataforma publicitaria de Google representa la mayor parte de sus beneficios. Dicho esto, Google Ads no es un subdominio, sino un dominio empresarial independiente con subdominios que lo componen, entre su servicio de computación en nube (Google Cloud Platform), herramientas de productividad y colaboración (Google Workspaces) y otros campos en los que opera Alphabet, la empresa matriz de Google. Pero, ¿qué pasa con la Búsqueda de Google y su algoritmo de clasificación? Aunque el motor de búsqueda no es un servicio de pago, sirve como la mayor plataforma de visualización para los anuncios de Google. Su capacidad para proporcionar excelentes resultados de búsqueda es lo que impulsa el tráfico y, por consiguiente, es un componente importante de la plataforma de anuncios. Ofrecer resultados de búsqueda subóptimos debido a un error en el algoritmo o a que un competidor presente un servicio de búsqueda aún mejor perjudicará los ingresos del negocio publicitario. Así pues, para Google, el algoritmo de clasificación es un subdominio esencial.

Complejidad

Un subdominio central sencillo de implementar sólo puede proporcionar a una ventaja competitiva efímera. Por lo tanto, los subdominios centrales son naturalmente complejos. Siguiendo con el ejemplo de Uber, la empresa no sólo creó un nuevo espacio de mercado con los viajes compartidos, sino que trastocó una arquitectura monolítica de décadas de antigüedad, el sector del taxi, mediante el uso selectivo de la tecnología. Al comprender su ámbito de negocio, Uber pudo diseñar un método de transporte más fiable y transparente. Debe haber altas barreras de entrada para el negocio principal de una empresa; debe ser difícil para los competidores copiar o imitar la solución de la empresa.

Fuentes de ventaja competitiva

Es importante señalar que los subdominios principales no son necesariamente técnicos. No todos los problemas empresariales se resuelven mediante algoritmos u otras soluciones técnicas. La ventaja competitiva de una empresa puede proceder de diversas fuentes.

Piensa, por ejemplo, en un fabricante de joyas que vende sus productos online. La tienda online es importante, pero no es un subdominio principal. El diseño de las joyas sí lo es. La empresa puede utilizar un motor de tienda online ya existente, pero no puede externalizar el diseño de sus joyas. El diseño es la razón por la que los clientes compran los productos del joyero y recuerdan la marca.

Como ejemplo más intrincado, imagina una empresa especializada en la detección manual del fraude. La empresa forma a sus analistas para que revisen documentos dudosos y marquen posibles casos de fraude. Tú estás construyendo el sistema de software con el que trabajan los analistas. ¿Es un subdominio principal? No. El subdominio principal es el trabajo que hacen los analistas. El sistema que estás construyendo no tiene nada que ver con el análisis del fraude, sólo muestra los documentos y hace un seguimiento de los comentarios de los analistas.

Subdominios genéricos

Los subdominios genéricos son actividades empresariales que todas las empresas realizan de la misma manera. Al igual que los subdominios principales, los subdominios genéricos suelen ser complejos y difíciles de implementar. Sin embargo, los subdominios genéricos no aportan ningún perímetro competitivo a la empresa. Aquí no hay necesidad de innovación ni optimización: las implementaciones probadas en batalla están ampliamente disponibles, y todas las empresas las utilizan.

Por ejemplo, la mayoría de los sistemas necesitan autenticar y autorizar a sus usuarios. En lugar de inventar un mecanismo de autenticación propio, tiene más sentido utilizar una solución existente. Es probable que dicha solución sea más fiable y segura, puesto que ya ha sido probada por muchas otras empresas que tienen las mismas necesidades.

Volviendo al ejemplo de un fabricante de joyas que vende sus productos online, el diseño de joyas es un subdominio principal, pero la tienda online es un subdominio genérico. Utilizar la misma plataforma de venta online -la misma solución genérica- que sus competidores no afectaría a la ventaja competitiva del fabricante de joyas.

Subdominios compatibles

Como su nombre indica, los subdominios de apoyo respaldan la actividad de la empresa. Sin embargo, a diferencia de los subdominios principales, los subdominios de apoyo no aportan ninguna ventaja competitiva.

Por ejemplo, pensemos en una empresa de publicidad online cuyos subdominios principales son adecuar los anuncios a los visitantes, optimizar la eficacia de los anuncios y minimizar el coste del espacio publicitario. Sin embargo, para lograr el éxito en estas áreas, la empresa necesita catalogar sus materiales creativos. La forma en que la empresa almacena e indexa sus materiales creativos físicos, como banners y páginas de destino, no repercute en sus beneficios. No hay nada que inventar u optimizar en ese ámbito. En cambio, el catálogo creativo es esencial para implantar los sistemas de gestión y servicio de la publicidad de la empresa. Eso hace que la solución de catalogación de contenidos sea uno de los subdominios de apoyo de la empresa.

La característica distintiva de los subdominios de apoyo es la complejidad de la lógica empresarial de la solución. Los subdominios de apoyo son sencillos. Su lógica empresarial se parece sobre todo a las pantallas de entrada de datos y a las operaciones ETL (extraer, transformar, cargar); es decir, a las llamadas interfaces CRUD (crear, leer, actualizar y eliminar). Estas áreas de actividad no aportan ninguna ventaja competitiva a la empresa, por lo que no requieren barreras de entrada elevadas.

Comparar subdominios

Ahora que comprendemos mejor los tres tipos de subdominios empresariales, exploremos sus diferencias desde ángulos adicionales y veamos cómo afectan a las decisiones estratégicas de diseño de software.

Ventaja competitiva

Sólo los subdominios principales proporcionan una ventaja competitiva a una empresa. Los subdominios principales son la estrategia de la empresa para diferenciarse de sus competidores.

Los subdominios genéricos, por definición, no pueden ser fuente de ninguna ventaja competitiva. Son soluciones genéricas, las mismas que utilizan la empresa y sus competidores.

Los subdominios de apoyo tienen pocas barreras de entrada y tampoco pueden proporcionar una ventaja competitiva. Normalmente, a una empresa no le importaría que sus competidores copiaran sus subdominios de apoyo, ya que esto no afectaría a su competitividad en el sector. Por el contrario, estratégicamente la empresa preferiría que sus subdominios de apoyo fueran soluciones genéricas, ya hechas, eliminando así la necesidad de diseñar y construir su implementación. Conocerás en detalle estos casos de subdominios de apoyo que se convierten en subdominios genéricos, así como otras permutaciones posibles, en el Capítulo 11. En el Apéndice A se esbozará un caso real de un escenario de este tipo.

Cuanto más complejos sean los problemas que pueda abordar una empresa, más valor empresarial podrá aportar. Los problemas complejos no se limitan a la prestación de servicios a los consumidores. Un problema complejo puede ser, por ejemplo, hacer que la empresa sea más optimizada y eficiente. Por ejemplo, prestar el mismo nivel de servicio que los competidores, pero con menores costes operativos, también es una ventaja competitiva.

Complejidad

Desde una perspectiva más técnica, es importante identificar los subdominios de la organización, porque los distintos tipos de subdominios tienen diferentes niveles de complejidad. Al diseñar software, tenemos que elegir herramientas y técnicas que se adapten a la complejidad de los requisitos empresariales. Por tanto, identificar los subdominios es esencial para diseñar una solución de software sólida.

Dar soporte a la lógica empresarial de los subdominios es sencillo. Se trata de operaciones ETL básicas e interfaces CRUD, y la lógica empresarial es obvia. A menudo, no va más allá de validar entradas o convertir datos de una estructura a otra.

Los subdominios genéricos son mucho más complicados. Debe haber una buena razón para que otros ya hayan invertido tiempo y esfuerzo en resolver estos problemas. Estas soluciones no son ni sencillas ni triviales. Considera, por ejemplo, los algoritmos de encriptación o los mecanismos de autenticación.

Desde la perspectiva de la disponibilidad del conocimiento, los subdominios genéricos son "incógnitas conocidas". Son las cosas que sabes que no sabes. Además, este conocimiento está fácilmente disponible. Puedes utilizar las buenas prácticas aceptadas por el sector o, si es necesario, contratar a un consultor especializado en la materia para que te ayude a diseñar una solución a medida.

Los subdominios principales son complejos. Deben ser tan difíciles de copiar como sea posible para los competidores de : la rentabilidad de la empresa depende de ello. Por eso, estratégicamente, las empresas buscan resolver problemas complejos como sus subdominios centrales.

A veces puede resultar difícil diferenciar entre los subdominios centrales y los de apoyo. La complejidad es un principio orientador útil. Pregúntate si el subdominio en cuestión puede convertirse en un negocio secundario. ¿Pagaría alguien por él por sí solo? Si es así, se trata de un subdominio principal. Un razonamiento similar se aplica para diferenciar los subdominios de apoyo de los genéricos: ¿sería más sencillo y barato piratear tu propia implementación, en lugar de integrar una externa? Si es así, se trata de un subdominio de apoyo.

Desde una perspectiva más técnica, es importante identificar los subdominios centrales cuya complejidad afectará al diseño del software. Como hemos dicho antes, un subdominio central no está necesariamente relacionado con el software. Otro principio rector útil para identificar los subdominios principales relacionados con el software es evaluar la complejidad de la lógica empresarial que tendrás que modelar e implementar en código. ¿La lógica empresarial se parece a las interfaces CRUD para la entrada de datos, o tienes que implementar algoritmos complejos o procesos empresariales orquestados por reglas empresariales e invariantes complejas? En el primer caso, es señal de un subdominio de apoyo, mientras que el segundo es un subdominio básico típico.

El gráfico de la Figura 1-1 representa la interacción entre los tres tipos de subdominios en términos de diferenciación empresarial y complejidad de la lógica empresarial. La intersección entre los subdominios de apoyo y los genéricos es una zona gris: puede ir en cualquier dirección. Si existe una solución genérica para la funcionalidad de un subdominio de apoyo, el tipo de subdominio resultante depende de si es más sencillo y/o barato integrar la solución genérica que implementar la funcionalidad desde cero.

The business differentiation and business logic complexity of the three types of subdomains
Figura 1-1. La diferenciación empresarial y la complejidad de la lógica empresarial de los tres tipos de subdominios

Volatilidad

Como ya se ha mencionado, los subdominios principales pueden cambiar a menudo. Si un problema de puede resolverse al primer intento, probablemente no sea una buena ventaja competitiva: los competidores se pondrán al día rápidamente. En consecuencia, las soluciones para los subdominios centrales son emergentes. Hay que probar, refinar y optimizar diferentes implementaciones. Además, el trabajo en los subdominios centrales nunca termina. Las empresas innovan y evolucionan continuamente los subdominios centrales. Los cambios se producen en forma de adición de nuevas funciones o de optimización de la funcionalidad existente. En cualquier caso, la evolución constante de sus subdominios principales es esencial para que una empresa se mantenga por delante de sus competidores.

Al contrario que los subdominios principales, los subdominios de apoyo no cambian a menudo. No aportan ninguna ventaja competitiva a la empresa, y por tanto la evolución de un subdominio de apoyo aporta un valor empresarial minúsculo en comparación con el mismo esfuerzo invertido en un subdominio principal.

A pesar de contar con soluciones existentes, los subdominios genéricos pueden cambiar con el tiempo. Los cambios pueden venir en forma de parches de seguridad, correcciones de errores o soluciones totalmente nuevas a los problemas genéricos.

Estrategia de solución

Los subdominios principales proporcionan a la empresa su capacidad para competir con otros actores del sector. Se trata de una responsabilidad crítica para la empresa, pero ¿significa esto que los subdominios genéricos y de apoyo no son importantes? Por supuesto que no. Todos los subdominios son necesarios para que la empresa funcione en su dominio empresarial. Los subdominios son como bloques de construcción fundacionales: si se quita uno, toda la estructura puede venirse abajo. Dicho esto, podemos aprovechar las propiedades inherentes a los distintos tipos de subdominios para elegir estrategias de implementación que permitan aplicar cada tipo de subdominio de la manera más eficaz.

Los subdominios centrales deben implantarse internamente. No pueden comprarse ni adoptarse; eso socavaría la noción de ventaja competitiva, ya que los competidores de la empresa podrían hacer lo mismo.

Tampoco sería prudente externalizar la implementación de un subdominio principal. Se trata de una inversión estratégica. Hacer recortes en un subdominio principal no sólo es arriesgado a corto plazo, sino que puede tener consecuencias fatales a largo plazo: por ejemplo, bases de código imposibles de mantener que no pueden respaldar las metas y objetivos de la empresa. El talento más capacitado de la organización debe asignarse a trabajar en sus subdominios principales. Además, implantar los subdominios principales internamente permite a la empresa hacer cambios y evolucionar la solución más rápidamente, y por tanto construir la ventaja competitiva en menos tiempo.

Dado que se espera que los requisitos de los subdominios centrales cambien a menudo y de forma continua, la solución debe ser mantenible y fácil de evolucionar. Así pues, los subdominios centrales requieren la aplicación de las técnicas de ingeniería más avanzadas.

Como los subdominios genéricos son problemas difíciles pero ya resueltos de, es más rentable comprar un producto listo para usar o adoptar una solución de código abierto que invertir tiempo y esfuerzo en implantar un subdominio genérico internamente.

La falta de ventaja competitiva hace que sea razonable evitar implantar internamente los subdominios compatibles con. Sin embargo, a diferencia de los subdominios genéricos, no existen soluciones prefabricadas. Por tanto, una empresa no tiene más remedio que implementar ella misma los subdominios de soporte. Dicho esto, la simplicidad de la lógica empresarial y la poca frecuencia de los cambios hacen que sea fácil tomar atajos.

Los subdominios compatibles no requieren patrones de diseño elaborados ni otras técnicas avanzadas de ingeniería. Un marco de desarrollo rápido de aplicaciones bastará para implementar la lógica empresarial sin introducir complejidades accidentales.

Desde el punto de vista de la dotación de personal, los subdominios de apoyo no requieren aptitudes técnicas muy cualificadas y brindan una gran oportunidad para formar a talentos prometedores. Reserva para los subdominios principales a los ingenieros de tu equipo que tengan experiencia en afrontar retos complejos. Por último, la sencillez de la lógica empresarial hace que los subdominios de soporte sean un buen candidato para la externalización.

El Cuadro 1-1 resume los aspectos en los que difieren los tres tipos de subdominios.

Tabla 1-1. Diferencias entre los tres tipos de subdominios
Tipo de subdominio Ventaja competitiva Complejidad Volatilidad Aplicación Problema
Núcleo Alta Alta En casa Interesante
Genérico No Alta Baja Comprar/adoptar Resuelto
Apoyando No Baja Baja Internos/externos Obvio

Identificar los límites de los subdominios

Como ya puedes ver, identificar los subdominios y sus tipos puede ayudar considerablemente a tomar diferentes decisiones de diseño al construir soluciones de software. En capítulos posteriores, aprenderás aún más formas de aprovechar los subdominios para agilizar el proceso de diseño de software. Pero, ¿cómo identificamos realmente los subdominios y sus límites?

Los subdominios y sus tipos vienen definidos por la estrategia empresarial de la empresa : sus ámbitos de negocio y cómo se diferencia para competir con otras empresas del mismo campo. En la inmensa mayoría de los proyectos de software, de un modo u otro los subdominios "ya están ahí". Sin embargo, eso no significa que siempre sea fácil y sencillo identificar sus límites. Si pides a un director general una lista de los subdominios de su empresa, probablemente recibirás una mirada perdida. No conocen este concepto. Por lo tanto, tendrás que hacer tú mismo el análisis de los dominios para identificar y categorizar los subdominios en juego.

Un buen punto de partida son los departamentos de la empresa y otras unidades organizativas. Por ejemplo, una tienda minorista online puede incluir departamentos de almacén, atención al cliente, recogida, envío, control de calidad y gestión de canales, entre otros. Sin embargo, se trata de áreas de actividad de grano relativamente grueso. Tomemos, por ejemplo, el departamento de atención al cliente. Es razonable suponer que se trataría de un subdominio de apoyo, o incluso genérico, ya que esta función suele subcontratarse a proveedores externos. Pero, ¿es esta información suficiente para que tomemos decisiones acertadas sobre el diseño del software?

Destilar subdominios

Los subdominios de grano grueso son un buen punto de partida, pero el diablo está en los detalles. Tenemos que asegurarnos de que no se nos escapa información importante oculta en los entresijos de la función empresarial.

Volvamos al ejemplo del departamento de atención al cliente. Si investigamos su funcionamiento interno, veremos que un departamento de atención al cliente típico se compone de componentes de grano más fino, como un sistema de help desk, gestión y programación de turnos, sistema telefónico, etc. Cuando se ven como subdominios individuales, estas actividades pueden ser de distintos tipos: mientras que el servicio de asistencia y los sistemas telefónicos son subdominios genéricos, la gestión de turnos es de apoyo, mientras que una empresa puede desarrollar su ingenioso algoritmo para encaminar las incidencias a agentes que hayan tenido éxito con casos similares en el pasado. El algoritmo de enrutamiento requiere analizar los casos entrantes e identificar similitudes en la experiencia pasada, tareas ambas que no son triviales. Dado que el algoritmo de enrutamiento permite a la empresa ofrecer una experiencia de cliente mejor que la de sus competidores, el algoritmo de enrutamiento es un subdominio central. Este ejemplo se muestra en la Figura 1-2.

Analyzing the inner workings of a suspectedly generic subdomain to find the finer-grained core subdomain, supporting subdomain, and two generic subdomains
Figura 1-2. Análisis del funcionamiento interno de un subdominio supuestamente genérico para encontrar el subdominio central de grano más fino, el subdominio de apoyo y dos subdominios genéricos

Por otra parte, no podemos profundizar indefinidamente, buscando perspectivas a niveles cada vez más bajos de granularidad. ¿Cuándo debes parar?

Subdominios como casos de uso coherentes

Desde una perspectiva técnica, los subdominios se asemejan a conjuntos de casos de uso interrelacionados y coherentes. Estos conjuntos de casos de uso suelen implicar al mismo actor, las entidades empresariales, y todos ellos manipulan un conjunto de datos estrechamente relacionados.

Considera el diagrama de casos de uso de una pasarela de pago con tarjeta de crédito que se muestra en la Figura 1-3. Los casos de uso están estrechamente vinculados por los datos con los que trabajan y los actores implicados. Por tanto, todos los casos de uso forman el subdominio de pago con tarjeta de crédito.

Podemos utilizar la definición de "subdominios como conjunto de casos de uso coherentes" como principio rector para saber cuándo dejar de buscar subdominios de grano más fino. Estos son los límites más precisos de los subdominios.

Use case diagram of a credit card payment subdomain
Figura 1-3. Diagrama de casos de uso de un subdominio de pago con tarjeta de crédito

¿Debes esforzarte siempre por identificar esos límites de subdominio con enfoque láser? Sin duda es necesario para los subdominios centrales. Los subdominios centrales son los más importantes, volátiles y complejos. Es esencial que los destilemos al máximo, ya que eso nos permitirá extraer todas las funcionalidades genéricas y de apoyo e invertir el esfuerzo en una funcionalidad mucho más centrada.

La destilación puede ser algo más relajada para los subdominios de apoyo y genéricos. Si al profundizar más no descubres nada nuevo que pueda ayudarte a tomar decisiones sobre el diseño del software, puede ser un buen momento para detenerse. Esto puede ocurrir, por ejemplo, cuando todos los subdominios de grano más fino son del mismo tipo que el subdominio original.

Considera el ejemplo de la Figura 1-4. Destilar más a fondo el subdominio del sistema de asistencia es menos útil, ya que no revela ninguna información estratégica, y se utilizará como solución una herramienta estándar de grano grueso.

Distilling the help desk system subdomain, revealing generic inner components
Figura 1-4. Destilando el subdominio del sistema de asistencia, revelando los componentes genéricos internos

Otra cuestión importante a tener en cuenta al identificar los subdominios es si los necesitamos todos.

Céntrate en lo esencial

Los subdominios son una herramienta que alivia el proceso de tomar decisiones de diseño de software. Es probable que todas las organizaciones tengan bastantes funcionalidades empresariales que impulsan su ventaja competitiva, pero que no tienen nada que ver con el software. El fabricante de joyas del que hemos hablado antes en este capítulo es sólo un ejemplo.

Cuando busques subdominios, es importante identificar las funciones empresariales que no están relacionadas con el software, reconocerlas como tales y centrarte en los aspectos de la empresa que son relevantes para el sistema de software en el que estás trabajando.

Ejemplos de análisis de dominio

Veamos cómo podemos aplicar la noción de subdominios en la práctica y utilizarla para tomar una serie de decisiones estratégicas de diseño. Voy a describir dos empresas ficticias: Gigmaster y BusVNext. Como ejercicio, mientras lees, analiza los dominios de negocio de las empresas. Intenta identificar los tres tipos de subdominios de cada empresa. Recuerda que, como en la vida real, algunos de los requisitos empresariales están implícitos.

Descargo de responsabilidad: por supuesto, no podemos identificar todos los subdominios implicados en cada dominio empresarial leyendo una descripción tan breve. Dicho esto, es suficiente para entrenarte a identificar y categorizar los subdominios disponibles.

Gigmaster

Gigmaster es una empresa de venta y distribución de entradas. Su aplicación móvil analiza las bibliotecas musicales de los usuarios, sus cuentas de servicios de streaming y sus perfiles en las redes sociales para identificar espectáculos cercanos a los que sus usuarios estarían interesados en asistir.

Los usuarios de Gigmaster son conscientes de su privacidad. Por eso, toda la información personal de los usuarios está encriptada. Además, para garantizar que los placeres culpables de los usuarios no se filtren bajo ninguna circunstancia, el algoritmo de recomendación de la empresa funciona exclusivamente con datos anónimos.

Para mejorar las recomendaciones de la aplicación, se ha implementado un nuevo módulo. Permite a los usuarios registrar los conciertos a los que asistieron en el pasado, incluso si las entradas no se compraron a través de Gigmaster.

Dominio empresarial y subdominios

El ámbito de negocio de Gigmaster es la venta de entradas. Ese es el servicio que presta a sus clientes.

Subdominios principales

La principal ventaja competitiva de Gigmaster es su motor de recomendaciones. La empresa también se toma en serio la privacidad de sus usuarios y sólo trabaja con datos anonimizados. Por último, aunque no se menciona explícitamente, podemos deducir que la experiencia de usuario de la aplicación móvil también es crucial. Así pues, los subdominios principales de Gigmaster son:

  • Motor de recomendación

  • Anonimización de datos

  • Aplicación móvil

Subdominios genéricos

Podemos identificar e inferir los siguientes subdominios genéricos:

  • Cifrado, para cifrar todos los datos

  • Contabilidad, ya que la empresa se dedica a la venta

  • Compensación, por cobrar a sus clientes

  • Autenticación y autorización, para identificar a sus usuarios

Subdominios compatibles

Por último, los siguientes son los subdominios de apoyo. Aquí la lógica empresarial es sencilla y se asemeja a procesos ETL o interfaces CRUD:

  • Integración con servicios de streaming de música

  • Integración con redes sociales

  • Módulo Attended-gigs

Decisiones de diseño

Conociendo los subdominios en juego y las diferencias entre sus tipos, ya podemos tomar varias decisiones estratégicas de diseño:

  • El motor de recomendación, la anonimización de datos y la aplicación móvil tienen que implementarse internamente utilizando las herramientas y técnicas de ingeniería más avanzadas. Estos módulos son los que van a cambiar más a menudo.

  • Para la encriptación de datos, la contabilidad, la compensación y la autenticación deben utilizarse soluciones estándar o de código abierto.

  • La integración con los servicios de streaming y las redes sociales, así como el módulo de conciertos presenciales, pueden externalizarse.

BusVNext

BusVNext es una empresa de transporte público. Su objetivo es proporcionar a sus clientes viajes en autobús que sean cómodos, como coger un taxi. La empresa gestiona flotas de autobuses en las principales ciudades.

Un cliente de BusVNext puede pedir un viaje a través de la aplicación móvil. A la hora de salida programada, la ruta de un autobús cercano se ajustará sobre la marcha para recoger al cliente a la hora de salida especificada.

El mayor reto de la empresa era implementar el algoritmo de encaminamiento. Sus requisitos son una variante del "problema del viajante de comercio". La lógica de encaminamiento se ajusta y optimiza continuamente. Por ejemplo, las estadísticas muestran que la razón principal de los viajes cancelados es el largo tiempo de espera para que llegue el autobús. Por eso, la empresa ajustó el algoritmo de rutas para dar prioridad a las recogidas rápidas, aunque eso supusiera retrasos en las bajadas. Para optimizar aún más las rutas, BusVNext se integra con proveedores externos para conocer las condiciones del tráfico y las alertas en tiempo real.

De vez en cuando, BusVNext ofrece descuentos especiales, tanto para atraer a nuevos clientes como para equilibrar la demanda de viajes en horas punta y valle.

Dominio empresarial y subdominios

BusVNext ofrece viajes optimizados en autobús a sus clientes. El ámbito de negocio es el transporte público.

Subdominios principales

La principal ventaja competitiva de BusVNext es su algoritmo de encaminamiento, que intenta resolver un problema complejo ("viajante de comercio") dando prioridad a distintos objetivos empresariales: por ejemplo, reducir los tiempos de recogida, aunque aumente la duración total del trayecto.

También vimos que los datos de los trayectos se analizan continuamente para obtener nuevos conocimientos sobre el comportamiento de los clientes. Estos conocimientos permiten a la empresa aumentar sus beneficios optimizando el algoritmo de rutas. Por último, las aplicaciones de BusVNext para sus clientes y conductores tienen que ser fáciles de usar y ofrecer una interfaz de usuario cómoda.

Gestionar una flota no es trivial. Los autobuses pueden tener problemas técnicos o necesitar mantenimiento. Ignorarlos puede acarrear pérdidas económicas y una reducción del nivel de servicio.

Por tanto, los subdominios principales de BusVNext son:

  • Enrutamiento

  • Análisis

  • Experiencia de usuario de la aplicación móvil

  • Gestión de flotas

Subdominios genéricos

El algoritmo de encaminamiento también utiliza datos de tráfico y alertas proporcionados por terceras empresas, un subdominio genérico. Además, BusVNext acepta pagos de sus clientes, por lo que tiene que implementar funcionalidades de contabilidad y compensación. Los subdominios genéricos de BusVNext son:

  • Estado del tráfico

  • Contabilidad

  • Facturación

  • Autorización

Subdominios compatibles

El módulo de gestión de promociones y descuentos apoya la actividad principal de la empresa. Dicho esto, no es un subdominio principal por sí mismo. Su interfaz de gestión se asemeja a una simple interfaz CRUD para gestionar códigos de cupón activos. Por lo tanto, se trata de un subdominio de apoyo típico.

Decisiones de diseño

Conociendo los subdominios en juego y las diferencias entre sus tipos, ya podemos tomar una serie de decisiones estratégicas de diseño:

  • El algoritmo de encaminamiento, el análisis de datos, la gestión de flotas y la usabilidad de la app tienen que implementarse internamente utilizando las herramientas y patrones técnicos más elaborados.

  • La implantación del módulo de gestión de promociones puede externalizarse.

  • La identificación de las condiciones del tráfico, la autorización de los usuarios y la gestión de los registros y transacciones financieras pueden descargarse en proveedores de servicios externos.

¿Quiénes son los expertos en dominios?

Ahora que tenemos una idea clara de los dominios y subdominios empresariales, echemos un vistazo a otro término de DDD que utilizaremos a menudo en los siguientes capítulos: los expertos en dominios. Los expertos en dominios son expertos en la materia que conocen todos los entresijos del negocio que vamos a modelar e implementar en código. En otras palabras, los expertos de dominio son autoridades del conocimiento en el dominio de negocio del software.

Los expertos del dominio no son ni los analistas que recopilan los requisitos ni los ingenieros que diseñan el sistema. Los expertos de dominio representan al negocio. Son las personas que identificaron el problema empresarial en primer lugar y de quienes procede todo el conocimiento empresarial. Los analistas e ingenieros de sistemas transforman sus modelos mentales del dominio empresarial en requisitos de software y código fuente.

Por regla general, los expertos del dominio son las personas que plantean los requisitos o los usuarios finales del software. El software debe resolver sus problemas.

Los conocimientos de los expertos en la materia pueden tener distintos alcances. Algunos expertos en la materia tendrán un conocimiento detallado del funcionamiento de todo el dominio empresarial, mientras que otros se especializarán en subdominios concretos. Por ejemplo, en una agencia de publicidad online, los expertos en la materia serían gestores de campañas, compradores de medios, analistas y otras partes interesadas del negocio.

Conclusión

En este capítulo hemos tratado las herramientas de diseño basadas en el dominio para dar sentido a la actividad empresarial de una empresa. Como has visto, todo empieza con el dominio empresarial: el ámbito en el que opera la empresa y el servicio que presta a sus clientes.

También has aprendido sobre los distintos elementos necesarios para alcanzar el éxito en un ámbito empresarial y diferenciar a la empresa de sus competidores:

Subdominios principales
Los problemas interesantes. Son las actividades que la empresa realiza de forma diferente a sus competidores y de las que obtiene su ventaja competitiva.
Subdominios genéricos
Los problemas resueltos. Son las cosas que todas las empresas hacen de la misma manera. Aquí no hay lugar ni necesidad de innovar; en lugar de crear implementaciones internas, es más rentable utilizar las soluciones existentes.
Subdominios compatibles
Los problemas con soluciones obvias. Son las actividades que la empresa probablemente tiene que realizar internamente, pero que no aportan ninguna ventaja competitiva.

Por último, has aprendido que los expertos de dominio son los expertos en la materia de la empresa. Conocen en profundidad el ámbito de negocio de la empresa o uno o varios de sus subdominios y son fundamentales para el éxito de un proyecto.

Ejercicios

  1. ¿Cuál o cuáles de los subdominios no proporcionan ninguna ventaja competitiva? Selecciona todo lo que corresponda.

    1. Núcleo

    2. Genérico

    3. Apoyando

    4. B y C

    5. A y C

  2. ¿Para qué subdominio podrían utilizar todos los competidores las mismas soluciones?

    1. Núcleo

    2. Genérico

    3. Apoyando

  3. ¿Qué subdominio se espera que cambie más a menudo?

    1. Núcleo

    2. Genérico

    3. Apoyando

    4. No hay diferencias en la volatilidad de los distintos tipos de subdominios.

  4. ¿Quiénes son los expertos en el ámbito empresarial?

    1. Desarrolladores especializados en una determinada tecnología.

    2. Gestores que controlan los recursos del proyecto.

    3. Colaboradores individuales que comprenden las normas y los procesos empresariales.

    4. El arquitecto de software principal de un proyecto.

Get Aprendizaje del Diseño Orientado al Dominio now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.