El camino a través del legado: Delicado equilibrio entre tolerancia y fobia

Rate this content
Bookmark
Slides

Como líder de equipo de front-end, me enfrenté al desafío de transicionar múltiples proyectos heredados, lo cual sucedió rápidamente y fue un proceso doloroso. Uno de los principales problemas con los que me encontré fue lidiar con un proyecto heredado que no tenía documentación. Tuve que descubrir cómo estabilizarlo, ponerlo en orden y reducir el costo de su mantenimiento y desarrollo.

This talk has been presented at React Summit 2023, check out the latest edition of this React Conference.

FAQ

El código legado se refiere a un código antiguo que no necesariamente se considera obsoleto solo por su antigüedad. Es aquel que no se puede extender fácilmente, pero aún puede funcionar y ser útil dentro de un sistema.

El código legado puede complicar la expansión del proyecto si se requieren soluciones improvisadas para su crecimiento. También puede hacer que la base de código sea difícil de manejar si no está bien documentada o estructurada.

Algunas estrategias incluyen escribir pruebas para mejorar la cobertura, hacer refactorización continua, y realizar cambios incrementales para facilitar la extensión y mantenimiento del código.

Una buena documentación ayuda a que otros desarrolladores comprendan y modifiquen el código más fácilmente, facilitando la gestión y actualización del código legado.

Realizar pruebas permite asegurar que el código funcione como se espera y facilita futuras modificaciones sin romper funcionalidades existentes, ayudando así a mantener la calidad y estabilidad del sistema.

Altel Digital es una empresa ubicada en Teotihu, Kazajistán, que se dedica al desarrollo de aplicaciones móviles y web, habiendo desarrollado cuatro aplicaciones móviles principales, más de 10 aplicaciones web y más de 150 microservicios.

Un desarrollador puede preparar su código para evitar que se convierta en legado manteniéndolo bien documentado, fácilmente modificable y asegurando que sea extensible a través de una buena estructura y prácticas de codificación.

Significa que el desarrollo de software es un proceso dinámico donde el código necesita adaptarse y evolucionar continuamente para satisfacer nuevas necesidades y resolver nuevos problemas, evitando así que se vuelva obsoleto.

Maxim Nam
Maxim Nam
8 min
06 Jun, 2023

Comments

Sign in or register to post your comment.

Video Summary and Transcription

El legado puede referirse a la arquitectura antigua o al código antiguo, y es importante reconocer y abordar los problemas heredados. El código heredado puede estar desorganizado y desactualizado, lo que dificulta su actualización y ampliación. El objetivo es dejar la base de código en mejor estado que antes, priorizando el código que es fácilmente modificable por otros.

1. Introducción a Legacy

Short description:

Hoy hablaremos sobre el legado. El legado puede ser alguna arquitectura antigua o código antiguo. Los juegos de legado se construyen sobre iteraciones anteriores para crear una experiencia de juego única. Reconocer el problema a tiempo es esencial para combatir el legado. La reescritura puede ser justificable en ciertas circunstancias. La documentación es importante pero a menudo es descuidada por los desarrolladores.

Hola, mi nombre es Max. Hoy hablaremos sobre el legado. Primero, unas palabras sobre nuestros proyectos. En Teotihu, Kazajistán, Altel Digital, desarrollamos cuatro aplicaciones móviles principales, más de 10 aplicaciones web y más de 150 microservicios.

Hablemos de los buenos y viejos problemas esenciales. ¿Qué es el legado? Puede ser alguna arquitectura antigua, tal vez casos de juegos de mesa. Todos dejaron su camino de legado en este mundo. Funciona en ambos sentidos. Pegatinas en tu mapa de juego de mesa o la dependencia cruzada de tu paquete en el proyecto de React. Bueno, tanto los juegos de legado como los códigos de legado comparten la misma característica común de pasar algo del pasado. Los juegos de legado se construyen sobre iteraciones anteriores para crear una experiencia de juego única y personalizada.

Entonces, ¿qué es el código de legado de todos modos? Podrías caer en la trampa de pensar que es solo un código antiguo. Sí, puede ser antiguo. Pero el código antiguo no se considera necesariamente legado solo porque es antiguo. Con este enfoque, tu propio código que escribiste ayer ya es legado. Las siguientes características pueden resultarte familiares. La respuesta de que escribimos código que probablemente termine como legado está fuera del proceso de codificación e implementación real. Si estás haciendo tu propio proyecto pequeño o startup, es más probable que escribas rápido y lo revises más tarde. Hoy en día, si no has tomado esta ruta como un equipo pequeño o un proyecto de un solo hombre, es muy probable que no tengas un negocio. La clave es reconocer el problema a tiempo para mover las formas prácticas de combatir el problema. Desafortunadamente, no existe un instrumento en el desarrollo de software como MagiKwan o la Espada de los Mil Verdades para hacer todo lo que queremos de manera perfecta. Pero al igual que las armas y las barras de maná son herramientas para el éxito en la experiencia de juego, el compromiso estándar es esencial para utilizar la tecnología de manera efectiva y responsable.

Como desarrolladores, encontramos la idea de reescribir porque es más fácil. Al menos, eso es lo que pensamos. Es más fácil juzgar el código escrito antes que nosotros y pensar que tenemos una mejor solución, a menudo ignorando la lógica empresarial que el código antiguo sirve y los casos especiales que intentaba resolver. Si bien tiendo a creer que la reescritura a menudo no es necesaria, puede haber ciertas circunstancias en las que sea justificable. Por ejemplo, si una sección particular de un proyecto ha alcanzado su límite y se requieren hacks o soluciones complicadas para su expansión posterior, o si ciertos componentes ya no se utilizan y se pueden aislar, comenzar de nuevo puede ser la mejor opción. La documentación es una de esas cosas en las que todos los desarrolladores están de acuerdo, pero pocos lo hacen. Al menos de manera práctica y eficiente.

2. Desafíos del Código Heredado

Short description:

Puedes escribir una cantidad interminable de código desorganizado y obsoleto, lo que dificulta enormemente su actualización. Un trozo de código puede funcionar, pero no es útil si no se puede extender. Recuerda lo que te dije antes. El código que escribas hoy será código antiguo mañana. Nuestra tarea es dejar la base de código en un estado un poco mejor que como la encontramos. En lugar de seguir las mejores prácticas, es preferible priorizar la creación de código que sea fácilmente modificable por otros.

Puedes escribir una cantidad interminable de código desorganizado y obsoleto, lo que dificulta enormemente su actualización. Es mucho más fácil escribir mucha documentación sin sentido. Algunos dicen que la base de código puede ser documentación en sí misma, pero tener un pequeño número de enlaces y anclas en tu repositorio puede ser algo bueno. Es casi un arte en sí mismo.

Un trozo de código puede funcionar, pero no es útil si no se puede extender. Claro, puede funcionar como se espera y aún generar ganancias para la empresa, pero un día puede romper todo el flujo de trabajo del negocio. Podemos minimizar el problema manteniendo las cosas aisladas para que no afecten al resto del código. Esta puede ser una solución permanente.

Por lo general, cuando escribes cosas nuevas, dependerán de algún sistema heredado, dependiendo del tamaño, cuanto más grande sea la base de código, más desafiante será arreglar eso. Por lo tanto, optimizar tu código para el cambio y hacer que sea más fácil de eliminar, irónicamente, hace que sea más fácil de extender con el tiempo y no producirás código heredado hoy. Recuerda lo que te dije antes. El código que escribas hoy será código antiguo mañana. ¿Tu intención es ser el más inteligente o es ayudar a todos los futuros desarrolladores que probablemente vendrán mucho después de que te hayas ido? Nuestra tarea es dejar la base de código en un estado un poco mejor que como la encontramos. En lugar de seguir las mejores prácticas, es preferible priorizar la creación de código que sea fácilmente modificable por otros. El objetivo aquí es hacer cambios incrementales en el sistema heredado. Cuando la opción se detiene, es cuando el código comienza a ser heredado. El código que cambia es lo único constante. Una decisión obvia es escribir pruebas. Cada vez que visitas una determinada sección, dependiendo del caso, puedes agregar pruebas de unidad o de comportamiento y lograr gradualmente una cobertura completa. Luego comienzas a mover las cosas más fácilmente. La única desventaja es que nuestras bases de código heredadas ni siquiera tienen pruebas o infraestructura de pruebas implementada. Independientemente de eso, el esfuerzo inicial y las dificultades involucradas, esta herramienta eventualmente demostrará su valía en el futuro. Ok, esto puede parecer extraño, pero la prueba general de que no tienes y no generas código heredado hoy, al menos tanto, es que cualquier persona de tu equipo puede ir y hacer cambios en todo el código base. Y los recién llegados tienen una forma de descubrir cómo trabajar con él sin necesidad de aclaraciones. Esto no significa que no haya lugares en la base de código donde las cosas no estén desordenadas, pero al menos hay una forma de navegar a través de ellas. Entonces, esto es lo que siempre intento hacer. Cuando tu base de código no depende de una sola persona, eso es una señal saludable. La capacidad de manejar y trabajar con el sistema heredado se considera un signo de experiencia dentro de los equipos. Es importante tener en cuenta que ninguno de los procesos mencionados anteriormente se puede lograr de la noche a la mañana. El proceso incremental es clave. En resumen, hemos aprendido que el código heredado es código que no se puede extender, pero es posible coexistir con él y mejorarlo gradualmente a través de actualizaciones bien documentadas y el enfoque continuo en la refactorización. Como ingenieros, nuestro objetivo principal es resolver problemas a través del código, pero es esencial no apegarse demasiado a ninguna base de código. Eventualmente, todo el código se volverá obsoleto, por lo que es crucial seguir buscando nuevos y interesantes problemas para resolver. Aquí lo tienes. Gracias por ver. Encantado de verte en el React Summit 2023.

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.
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.
Composición vs Configuración: Cómo Construir Componentes Flexibles, Resilientes y a Prueba de Futuro
React Summit 2022React Summit 2022
17 min
Composición vs Configuración: Cómo Construir Componentes Flexibles, Resilientes y a Prueba de Futuro
Top Content
Today's Talk discusses building flexible, resilient, and future-proof React components using composition and configuration approaches. The composition approach allows for flexibility without excessive conditional logic by using multiple components and passing props. The context API can be used for variant styling, allowing for appropriate styling and class specification. Adding variants and icons is made easy by consuming the variant context. The composition and configuration approaches can be combined for the best of both worlds.
Patrones de Arquitectura Remix
Remix Conf Europe 2022Remix Conf Europe 2022
23 min
Patrones de Arquitectura Remix
Top Content
This Talk introduces the Remix architecture patterns for web applications, with over 50% of participants using Remix professionally. The migration from single page applications to Remix involves step-by-step refactoring and offers flexibility in deployment options. Scalability can be achieved by distributing the database layer and implementing application caching. The backend for frontend pattern simplifies data fetching, and Remix provides real-time capabilities for collaborative features through WebSocket servers and Server-SendEvents.

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.
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.