Developer Journey: Monorepos vs Polyrepos

Rate this content
Bookmark

Construir un monorepo es como volar una nave espacial: muchas personas trabajan juntas para asegurarse de que las cosas no se incendien.
En esta charla repasaremos herramientas, técnicas y mejores prácticas para ayudarnos a apagar incendios y mantener el rumbo a lo largo de nuestro viaje intergaláctico.

Descargo de responsabilidad: ¡asistir a esta charla probablemente no te califique para volar naves espaciales! 

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

Max Kless
Max Kless
28 min
21 Nov, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Hola a todos. Me gustaría comenzar contándoles una historia sobre un tipo llamado Dan. Es mecánico y su trabajo es reparar naves espaciales. Dan es una metáfora de todos nosotros, los desarrolladores. Hablemos de monorepos, como probablemente habrás adivinado por el título. Comenzaré hablando de polyrepos, lo que hacen bien, pero también dónde fallan. Luego hablaré sobre monorepos y qué problemas resuelven, así como por qué necesitas buenas herramientas de monorepo, especialmente a gran escala. Un Monorepo es un único repositorio que contiene múltiples proyectos distintos con relaciones bien definidas. Permite a los equipos trabajar juntos de manera unificada. Los monorepos ayudan con la velocidad, la seguridad y la movilidad. Los monorepos se pueden adoptar de manera incremental y buenas herramientas pueden ayudar con la ejecución de pruebas. El tiempo de CI ahora está acoplado al tamaño del cambio realizado, en lugar del tamaño del monorepo. Al generar un gráfico de tareas a partir del gráfico del proyecto, podemos optimizar el proceso de construcción paralelizando y programando tareas. NX ofrece una solución distribuyendo tareas a través de múltiples agentes, permitiendo la optimización del tiempo y el costo. Visita monorepo.tools o nx.dev para aprender más y lograr enfoque y satisfacción como Dan.

1. Introducción a Monorepos

Short description:

Hola a todos. Me gustaría comenzar contándoles una historia sobre un tipo llamado Dan. Es mecánico y su trabajo es reparar naves espaciales. Dan es una metáfora de todos nosotros, los desarrolladores. Hablemos de monorepos, como probablemente habrán adivinado por el título. Comenzaré hablando sobre polyrepos, lo que hacen bien, pero también dónde fallan. Luego hablaré sobre monorepos y qué problemas resuelven, así como por qué necesitas buenas herramientas de monorepo, especialmente a gran escala. Cada nave espacial es una analogía de un repositorio. Esta es una forma perfectamente lógica de organizar una flota de naves espaciales. En el mundo del código, llamaría a este enfoque un polyrepo. Lo que estamos tratando de lograr y por qué esta es una forma tan popular de desarrollar software es la autonomía del equipo que se obtiene. Tienen libertad tecnológica.

Hola a todos. Me gustaría comenzar contándoles una historia sobre un tipo llamado Dan. Así que este es Dan aquí mismo. Es mecánico y su trabajo es reparar naves espaciales. Así que puedes verlo aquí sentado en este bar del puerto espacial, ya sabes, está bebiendo una cerveza que es técnicamente derivada de hongos. Pero solo está sentado, ya sabes, está disfrutando, lo está pasando bien.

Y Dan es realmente una metáfora de todos nosotros, los desarrolladores. Y como cualquier desarrollador durante el día, Dan pasará de ser cautelosamente optimista a caer en un pozo de desesperación y depresión absoluta. Pero saldrá del otro lado sintiéndose como si hubiera entendido todo y está en la cima del mundo.

Mi nombre es Max y personalmente he pasado por ese ciclo de desilusión y comprensión muchas veces en mi vida. Y espero poder hacerlo un poco más fácil para ustedes hoy. Así que hablemos de monorepos, como probablemente habrán adivinado por el título. Y trabajo en una empresa llamada NX donde construimos herramientas de monorepo. Y también trabajo dentro de un monorepo todo el día, todos los días. Así que esa es mi perspectiva al respecto.

Solo para darles una idea de a qué se enfrentan, voy a comenzar hablando sobre polyrepos, lo que hacen bien, pero también dónde fallan. Luego hablaré sobre monorepos y qué problemas resuelven, así como por qué necesitas buenas herramientas de monorepo especialmente a gran escala. Así que en esta charla, cada nave espacial es una analogía de un repositorio. Así que en su primer día de trabajo, Dan se une a una flota de naves espaciales, de hecho. Ya sabes, hay algunas al frente, están luchando contra piratas espaciales, están explorando, están haciendo cosas geniales de personaje principal. Hay algunas en el medio, transportando tripulación, manejando reparaciones y similares. Y luego hay algunos barcos en la parte trasera de la flota, ya sabes, manejando suministros con el hogar y las comunicaciones. Así que todos estos barcos, tienen sus responsabilidades individuales, pero también están todos conectados de alguna manera.

Y diría que esta es una forma perfectamente lógica de organizar una flota de naves espaciales. Y también tiene sentido en el mundo del código. En el mundo del código, llamaría a este enfoque un polyrepo. Donde cada equipo o proyecto tiene su propio repositorio alojado en GitHub o similar. Y lo que estamos tratando de lograr y por qué esta es una forma tan popular de desarrollar software es la autonomía del equipo que se obtiene. Así que cada equipo tiene expertos en su dominio y para sus proyectos, ¿verdad? Y son libres de tomar decisiones. Por ejemplo, tienen libertad tecnológica.

2. Challenges of Sharing Code

Short description:

En este caso, hay dos aplicaciones de React y una aplicación de Angular. Comparten algo de código con TypeScript, y hay un backend escrito en Kotlin. Los polyrepos ofrecen autonomía de equipo, libertad tecnológica y una arquitectura claramente separada. Sin embargo, hay desafíos cuando los equipos quieren compartir código. Crear repositorios separados para el código compartido implica mucho trabajo adicional que los desarrolladores preferirían evitar.

En este caso, hay dos aplicaciones de React y una aplicación de Angular. Comparten algo de código con TypeScript, y hay un backend escrito en Kotlin. Debido a que esto está estructurado tan bien, en realidad es mucho más fácil obtener una visión general y comprender lo que está haciendo todo tu sistema y cómo está estructurado, en lugar de tener solo una gran bola de barro sin una estructura interna discernible.

Así que, para resumir, diría que los polyrepos son geniales. Porque ofrecen autonomía de equipo, libertad tecnológica y una arquitectura claramente separada. Pero si los polyrepos son tan geniales, entonces ¿por qué estoy aquí? ¿Por qué estoy dando esta charla a muchos repos, verdad?

Bueno, digamos que la página de inicio y el equipo de la aplicación web quieren compartir algo de código. Quieren compartir algunos hooks de React. ¿Cómo hacemos esto? Bueno, crearían un repositorio para esos hooks. Tendrían que configurar la publicación, construcción, linting, pruebas, pipeline de CI. Tienen que hacer PRs a los repos para consumir esa biblioteca, y luego tal vez pasar por esos pasos un par de veces para iterar hasta que todo funcione. Como puedes imaginar, eso es mucho trabajo adicional. Es mucho trabajo por el que los desarrolladores no quieren pasar.

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.
Sistemas de Diseño: Caminando la Línea Entre Flexibilidad y Consistencia
React Advanced 2021React Advanced 2021
47 min
Sistemas de Diseño: Caminando la Línea Entre Flexibilidad y Consistencia
Top Content
The Talk discusses the balance between flexibility and consistency in design systems. It explores the API design of the ActionList component and the customization options it offers. The use of component-based APIs and composability is emphasized for flexibility and customization. The Talk also touches on the ActionMenu component and the concept of building for people. The Q&A session covers topics such as component inclusion in design systems, API complexity, and the decision between creating a custom design system or using a component library.
Entendiendo la Arquitectura Fiber de React
React Advanced 2022React Advanced 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.
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.
Depuración de JS
React Summit 2023React Summit 2023
24 min
Depuración de JS
Top Content
Debugging JavaScript is a crucial skill that is often overlooked in the industry. It is important to understand the problem, reproduce the issue, and identify the root cause. Having a variety of debugging tools and techniques, such as console methods and graphical debuggers, is beneficial. Replay is a time-traveling debugger for JavaScript that allows users to record and inspect bugs. It works with Redux, plain React, and even minified code with the help of source maps.

Workshops on related topic

Domina los Patrones de JavaScript
JSNation 2024JSNation 2024
145 min
Domina los Patrones de JavaScript
Top Content
Featured Workshop
Adrian Hajdin
Adrian Hajdin
Durante esta masterclass, los participantes revisarán los patrones esenciales de JavaScript que todo desarrollador debería 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 de la masterclass, los participantes ganarán una nueva confianza en su capacidad para escribir código JavaScript de alta calidad que resista el paso del 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 la comunicación dentro de los equipos de desarrollo- Acelerar el crecimiento de la carrera y las oportunidades de avance en la industria del software
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.
React Patterns Made Simple
React Day Berlin 2024React Day Berlin 2024
62 min
React Patterns Made Simple
Featured Workshop
Adrian Hajdin
Adrian Hajdin
Aprende patrones de React ampliamente utilizados, incluyendo HOCs, Compound Components, Provider Patterns, Functions as Child, y Portals, para escribir código más limpio y eficiente y crear aplicaciones escalables y mantenibles.Visión general En esta masterclass, los espectadores aprenderán sobre patrones clave de React que pueden hacer su código más eficiente, legible y mantenible. Presentaremos cada patrón, explicaremos cómo funciona y demostraremos ejemplos prácticos. Al final de la sesión, los participantes tendrán una comprensión sólida de cómo usar estos patrones en sus proyectos.Objetivos de aprendizajeHOCs Compound Components Provider Patterns Functions as Child Portals Modularidad Mantenibilidad Aplicación en el mundo real.
Construye Aplicaciones Modernas Utilizando GraphQL y Javascript
Node Congress 2024Node Congress 2024
152 min
Construye Aplicaciones Modernas Utilizando GraphQL y Javascript
Featured Workshop
Emanuel Scirlet
Miguel Henriques
2 authors
Ven y aprende cómo puedes potenciar tus aplicaciones modernas y seguras utilizando GraphQL y Javascript. En este masterclass construiremos una API de GraphQL y demostraremos los beneficios del lenguaje de consulta para APIs y los casos de uso para los que es adecuado. Se requiere conocimiento básico de Javascript.
Construyendo una Aplicación de Shopify con React & Node
React Summit Remote Edition 2021React Summit Remote Edition 2021
87 min
Construyendo una Aplicación de Shopify con React & Node
Top Content
WorkshopFree
Jennifer Gray
Hanna Chen
2 authors
Los comerciantes de Shopify tienen un conjunto diverso de necesidades, y los desarrolladores tienen una oportunidad única para satisfacer esas necesidades construyendo aplicaciones. Construir una aplicación puede ser un trabajo duro, pero Shopify ha creado un conjunto de herramientas y recursos para ayudarte a construir una experiencia de aplicación sin problemas lo más rápido posible. Obtén experiencia práctica construyendo una aplicación integrada de Shopify utilizando el CLI de la aplicación Shopify, Polaris y Shopify App Bridge.Te mostraremos cómo crear una aplicación que acceda a la información de una tienda de desarrollo y pueda ejecutarse en tu entorno local.