Navegando una Modernización a Gran Escala con DDD

Rate this content
Bookmark

¿Qué tecnología elegir? ¿Qué hacer para deshacernos de las aplicaciones heredadas? ¿Y cómo diablos podemos estructurar nuestros equipos para apoyar nuestros esfuerzos? Vamos a hablar sobre los grandes problemas que pueden surgir durante un esfuerzo de modernización a gran escala, ofreciendo soluciones y medidas preventivas para garantizar una migración exitosa.


Profundizaremos en las complejidades de la transición de una mezcla de proyectos y tecnologías diversas a una arquitectura más eficiente. Vamos a explorar cómo aprovechar el Diseño Dirigido por Dominios (DDD) para estructurar equipos, sus responsabilidades y los límites del proyecto, creando un entorno tecnológico más eficiente y efectivo.

This talk has been presented at JSNation 2024, check out the latest edition of this JavaScript Conference.

Markus Oberlehner
Markus Oberlehner
11 min
17 Jun, 2024

Comments

Sign in or register to post your comment.

Video Summary and Transcription

Aproximadamente hace un año, comenzamos un esfuerzo de modernización, pero nos enfrentamos a desafíos con la política de la empresa y la realidad de nuestra pila tecnológica. La lección uno es la importancia de alinear los objetivos y comprender los problemas actuales. La lección dos es la importancia de lograr que todos estén a bordo y comprometidos con el éxito del proyecto. La lección tres es decir repetidamente a los interesados por qué los grandes cambios tecnológicos valen la inversión.

1. Lecciones aprendidas de un esfuerzo de modernización

Short description:

Hace aproximadamente un año, comenzamos un esfuerzo de modernización. Desafortunadamente, las cosas no salieron como se planeaba. Nuestro objetivo era utilizar el diseño impulsado por dominio y las topologías de equipos para reestructurar nuestra organización y tener equipos eficientes alineados con nuestro dominio empresarial. Sin embargo, enfrentamos desafíos con la política de la empresa y la realidad de nuestra pila tecnológica. La primera lección aprendida es la importancia de alinear los objetivos de todos y comprender los problemas actuales y las realidades tecnológicas.

Hace aproximadamente un año, comenzamos un esfuerzo de modernización. Así que teníamos grandes planes y cuando comenzamos y presenté esta charla, soñaba con hablar sobre la historia de éxito. Pero desafortunadamente, resultó diferente. Hace solo un par de semanas, mi empleador y yo decidimos separarnos. No solo por lo que estoy contando aquí, pero aún así jugó un papel. Así que todo lo que puedo contarles son las lecciones aprendidas y lo que no se debe hacer.

Entonces, ¿cuál era el plan? Nuestro plan era comenzar con el diseño impulsado por dominio, un enfoque de diseño impulsado por dominio, y también inspirarnos en las topologías de equipos. Y una pieza importante también era que queríamos tener una pila tecnológica unificada o más uniforme. En resumen, ¿qué es el diseño impulsado por dominio y qué intentamos hacer con él? Como no tenemos mucho tiempo, en pocas palabras, el diseño impulsado por dominio se trata de construir software de acuerdo con el dominio empresarial. Diseñar su software de manera que esté alineado con su dominio empresarial, con lo que su negocio está haciendo. Lo que hicimos en el primer paso fue utilizar el diseño impulsado por dominio para reestructurar nuestra organización, encontrar los contextos delimitados dentro de nuestra organización y luego planificar nuestros equipos de producto a lo largo de esas líneas. Así que utilizamos algo como el evento de tormenta de ideas de la imagen general para encontrar todos los contextos delimitados y en general, este proceso fue relativamente sencillo. Entonces, al final, teníamos algunos contextos delimitados y teníamos un plan de cómo reorganizar nuestra organización y cómo estructurar nuestros equipos. Y para esto, también echamos un vistazo a las topologías de equipos. Y nuevamente, en resumen, las topologías de equipos se tratan de cuatro tipos fundamentales de equipos. En primer lugar, tenemos equipos alineados con el flujo, lo que probablemente conozcas como equipos de producto o equipos multifuncionales, y luego hay otros tipos como equipos habilitadores y equipos de subsistemas complicados y también un equipo de plataforma. Pero para nosotros, era importante encontrar los equipos alineados con el flujo y allí puedes ver otra diapositiva en el enfoque de las topologías de equipos. También hay diferentes formas en las que esos equipos pueden interactuar entre sí. Pero como dije, para nosotros era importante encontrar cómo utilizar el diseño impulsado por dominio para encontrar los contextos delimitados dentro de nuestro negocio y luego aplicar las reglas de las topologías de equipos o combinar esas dos cosas y tener equipos que tengan equipos eficientes que estén listos para trabajar en un contexto delimitado dado. Eso es todo en teoría, pero en la práctica, las cosas no fueron tan sencillas como esperábamos. Lo primero que se interpuso en nuestro camino fue la política de la empresa, porque queríamos reestructurar nuestra organización a lo largo de esos contextos delimitados. Pero, por supuesto, ya había personas liderando ciertos equipos y tal vez algunos equipos ya no existirían o estarían en una forma completamente diferente. Y, por supuesto, no todas las personas estaban contentas con esto. Y luego está también la realidad de la pila tecnológica actual, a la que no le dimos suficiente importancia. Entonces, nuestro objetivo era reestructurar nuestros equipos de producto. Pero tuvimos que tener en cuenta que la estructura actual del equipo estaba organizada en torno a proyectos, en torno a proyectos técnicos. Entonces, los otros equipos en nuestra nueva estructura, o nuestra nueva forma de estructurar nuestra empresa, no sabían exactamente cómo lidiar con todas las tecnologías involucradas en esos otros proyectos. Entonces, la primera gran lección aprendida aquí es que debemos asegurarnos de que todos tengan los mismos objetivos. Al menos que todos estén conscientes y compren la visión de los objetivos, de la reestructuración, por ejemplo, y que todas las personas también tengan la misma comprensión de los problemas actuales. Si hay realidades tecnológicas, no se puede simplemente reorganizar toda la empresa y cambiar todos los equipos sin tener en cuenta la tecnología actual que se está utilizando.

2. Desafíos en la construcción de la nueva plataforma

Short description:

Decidimos construir una nueva plataforma para nuestras aplicaciones web, con el objetivo de utilizar una pila tecnológica moderna. Sin embargo, el proceso RFC enfrentó desafíos, ya que no todos se sintieron involucrados en la toma de decisiones. La lección dos es la importancia de lograr que todos estén a bordo y asegurarse de que, incluso si las personas no están de acuerdo, se comprometan con el éxito del proyecto. El proceso de construcción enfrentó retrasos debido a promesas excesivas, falta de conciencia y falta de inversión del equipo.

Entonces, después de eso, decidimos que era el momento de construir una nueva plataforma para nuestras aplicaciones web, porque también era un aspecto que queríamos mejorar. Queremos avanzar hacia una pila tecnológica moderna y unificada. Establecí un proceso RFC. Esto es algo que no teníamos antes. Escribí un documento y solicité comentarios sobre este documento. En teoría, creo que es una buena idea. Pero en la práctica, como veremos, no funcionó tan bien.

En este documento, resalté que queremos utilizar un enfoque de monorepo en el futuro y queremos usar Next en lugar de Laravel. Luego, todas las personas fueron invitadas a contribuir en este documento. En teoría, esto es una buena idea, pero en la práctica, no todos sabían en ese momento qué tan importantes serían las decisiones que se tomarían en este proceso RFC. En general, aún se sentía mucho como si yo estuviera dictando el futuro de la plataforma del mañana. Esto llevó a aprender la lección dos.

Las personas deben sentirse involucradas en la búsqueda de la solución para una nueva pila tecnológica, por ejemplo, o cualquier otro esfuerzo importante dentro de una empresa o un equipo. Debemos asegurarnos de que todos estén a bordo. Y como esto no siempre es posible, para aquellas personas que no están contentas con la solución, para aquellas personas a las que no puedes convencer de que tu idea es la mejor, al menos deben ser conscientes de que necesitan estar en desacuerdo pero comprometerse. Debes hacer que sea una práctica en tu empresa que todos se sientan escuchados. Pero, por supuesto, no puedes convencer a todos, pero aún así, las personas deben ser conscientes de que, al final, aunque estén en desacuerdo, deben comprometerse y hacer todo lo posible para que el nuevo proyecto tenga éxito.

Ok, este fue el proceso RFC para una nueva pila tecnológica. Y luego llegó el momento de construirlo. Así que vamos a construirlo, pensé. Y hubo otro problema. Prometí demasiado. Y, por supuesto, todo llevó mucho más tiempo. Para encontrar apoyo para este RFC, dije que no sería un gran problema. Podía hacer gran parte del trabajo y podíamos hacerlo a un lado. Entonces, al final, no sería un gran problema y todo sería fácil. Pero, por supuesto, no fue así. Todo llevó mucho más tiempo de lo previsto. Y los equipos no eran conscientes de que también necesitaban invertir tiempo en ello. Básicamente, todos estaban descontentos porque ya no había progreso.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Escalando con Remix y Micro Frontends
Remix Conf Europe 2022Remix Conf Europe 2022
23 min
Escalando con Remix y Micro Frontends
Top Content
This talk discusses the usage of Microfrontends in Remix and introduces the Tiny Frontend library. Kazoo, a used car buying platform, follows a domain-driven design approach and encountered issues with granular slicing. Tiny Frontend aims to solve the slicing problem and promotes type safety and compatibility of shared dependencies. The speaker demonstrates how Tiny Frontend works with server-side rendering and how Remix can consume and update components without redeploying the app. The talk also explores the usage of micro frontends and the future support for Webpack Module Federation in Remix.
Enrutamiento en React 18 y más allá
React Summit 2022React Summit 2022
20 min
Enrutamiento en React 18 y más allá
Top Content
Routing in React 18 brings a native app-like user experience and allows applications to transition between different environments. React Router and Next.js have different approaches to routing, with React Router using component-based routing and Next.js using file system-based routing. React server components provide the primitives to address the disadvantages of multipage applications while maintaining the same user experience. Improving navigation and routing in React involves including loading UI, pre-rendering parts of the screen, and using server components for more performant experiences. Next.js and Remix are moving towards a converging solution by combining component-based routing with file system routing.
Componentes de Full Stack
Remix Conf Europe 2022Remix Conf Europe 2022
37 min
Componentes de Full Stack
Top Content
RemixConf EU discussed full stack components and their benefits, such as marrying the backend and UI in the same file. The talk demonstrated the implementation of a combo box with search functionality using Remix and the Downshift library. It also highlighted the ease of creating resource routes in Remix and the importance of code organization and maintainability in full stack components. The speaker expressed gratitude towards the audience and discussed the future of Remix, including its acquisition by Shopify and the potential for collaboration with Hydrogen.
Entendiendo la Arquitectura Fiber de React
React Advanced Conference 2022React Advanced Conference 2022
29 min
Entendiendo la Arquitectura Fiber de React
Top Content
This Talk explores React's internal jargon, specifically fiber, which is an internal unit of work for rendering and committing. Fibers facilitate efficient updates to elements and play a crucial role in the reconciliation process. The work loop, complete work, and commit phase are essential steps in the rendering process. Understanding React's internals can help with optimizing code and pull request reviews. React 18 introduces the work loop sync and async functions for concurrent features and prioritization. Fiber brings benefits like async rendering and the ability to discard work-in-progress trees, improving user experience.
The Eternal Sunshine of the Zero Build Pipeline
React Finland 2021React Finland 2021
36 min
The Eternal Sunshine of the Zero Build Pipeline
For many years, we have migrated all our devtools to Node.js for the sake of simplicity: a common language (JS/TS), a large ecosystem (NPM), and a powerful engine. In the meantime, we moved a lot of computation tasks to the client-side thanks to PWA and JavaScript Hegemony.
So we made Webapps for years, developing with awesome reactive frameworks and bundling a lot of dependencies. We progressively moved from our simplicity to complex apps toolchains. We've become the new Java-like ecosystem. It sucks.
It's 2021, we've got a lot of new technologies to sustain our Users eXperience. It's time to have a break and rethink our tools rather than going faster and faster in the same direction. It's time to redesign the Developer eXperience. It's time for a bundle-free dev environment. It's time to embrace a new frontend building philosophy, still with our lovely JavaScript.
Introducing Snowpack, Vite, Astro, and other Bare Modules tools concepts!
Aplicaciones React (+Native) full-stack y seguras con tRPC.io
React Advanced Conference 2021React Advanced Conference 2021
6 min
Aplicaciones React (+Native) full-stack y seguras con tRPC.io
Top Content
Alex introduces tRPC, a toolkit for making end-to-end type-safe APIs easily, with auto-completion of API endpoints and inferred data from backend to frontend. tRPC works the same way in React Native and can be adopted incrementally. The example showcases backend communication with a database using queries and validators, with types inferred to the frontend and data retrieval done using Prisma ORM.

Workshops on related topic

IA a demanda: IA sin servidor
DevOps.js Conf 2024DevOps.js Conf 2024
163 min
IA a demanda: IA sin servidor
Top Content
Featured WorkshopFree
Nathan Disidore
Nathan Disidore
En esta masterclass, discutimos los méritos de la arquitectura sin servidor y cómo se puede aplicar al espacio de la IA. Exploraremos opciones para construir aplicaciones RAG sin servidor para un enfoque más lambda-esque a la IA. A continuación, nos pondremos manos a la obra y construiremos una aplicación CRUD de muestra que te permite almacenar información y consultarla utilizando un LLM con Workers AI, Vectorize, D1 y Cloudflare Workers.
Master Patrones de JavaScript
JSNation 2024JSNation 2024
145 min
Master Patrones de JavaScript
Featured Workshop
Adrian Hajdin
Adrian Hajdin
Durante este masterclass, los participantes revisarán los patrones esenciales de JavaScript que todo desarrollador debe conocer. A través de ejercicios prácticos, ejemplos del mundo real y discusiones interactivas, los asistentes profundizarán su comprensión de las mejores prácticas para organizar el código, resolver desafíos comunes y diseñar arquitecturas escalables. Al final del masterclass, los participantes ganarán confianza en su capacidad para escribir código JavaScript de alta calidad que perdure en el tiempo.
Puntos Cubiertos:
1. Introducción a los Patrones de JavaScript2. Patrones Fundamentales3. Patrones de Creación de Objetos4. Patrones de Comportamiento5. Patrones Arquitectónicos6. Ejercicios Prácticos y Estudios de Caso
Cómo Ayudará a los Desarrolladores:
- Obtener una comprensión profunda de los patrones de JavaScript y sus aplicaciones en escenarios del mundo real- Aprender las mejores prácticas para organizar el código, resolver desafíos comunes y diseñar arquitecturas escalables- Mejorar las habilidades de resolución de problemas y la legibilidad del código- Mejorar la colaboración y comunicación dentro de los equipos de desarrollo- Acelerar el crecimiento profesional y las oportunidades de avance en la industria del software
Masterclass de alto rendimiento Next.js
React Summit 2022React Summit 2022
50 min
Masterclass de alto rendimiento Next.js
Workshop
Michele Riva
Michele Riva
Next.js es un marco convincente que facilita muchas tareas al proporcionar muchas soluciones listas para usar. Pero tan pronto como nuestra aplicación necesita escalar, es esencial mantener un alto rendimiento sin comprometer el mantenimiento y los costos del servidor. En este masterclass, veremos cómo analizar el rendimiento de Next.js, el uso de recursos, cómo escalarlo y cómo tomar las decisiones correctas al escribir la arquitectura de la aplicación.
Mejores Prácticas y Patrones para Administrar Solicitudes de API y Estados
React Advanced Conference 2022React Advanced Conference 2022
206 min
Mejores Prácticas y Patrones para Administrar Solicitudes de API y Estados
Workshop
Thomas Findlay
Thomas Findlay
Con el surgimiento de frameworks, como React, Vue o Angular, la forma en que se construyen los sitios web ha cambiado a lo largo de los años. Las aplicaciones modernas pueden ser muy dinámicas y realizar múltiples solicitudes de API para poblar un sitio web con contenido actualizado o enviar nuevos datos a un servidor. Sin embargo, este cambio de paradigma ha introducido nuevos problemas con los que los desarrolladores deben lidiar. Cuando una solicitud de API está pendiente, tiene éxito o falla, el usuario debe recibir una retroalimentación significativa. Otros problemas pueden incluir el almacenamiento en caché de datos de API o la sincronización del estado del cliente con el servidor. Todos estos problemas requieren soluciones que deben ser codificadas, pero pueden volverse rápidamente inmanejables y dar como resultado una base de código difícil de ampliar y mantener. En este masterclass, cubriremos cómo manejar las solicitudes de API, los estados de API y la cancelación de solicitudes mediante la implementación de una Capa de API y combinándola con React-Query.
Prerrequisitos: Para aprovechar al máximo este masterclass, debes estar familiarizado con React y Hooks, como useState, useEffect, etc. Si deseas codificar junto con nosotros, asegúrate de tener Git, un editor de código, Node y npm instalados en tu máquina.