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.

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
¿Tienes un producto grande construido por muchos equipos? ¿Estás luchando para lanzar a menudo? ¿Se convirtió tu frontend en un monolito inmantenible masivo? Si, como yo, has respondido sí a cualquiera de esas preguntas, ¡esta charla es para ti! Te mostraré exactamente cómo puedes construir una arquitectura de micro frontend con Remix para resolver esos desafíos.
Componentes de Full Stack
Remix Conf Europe 2022Remix Conf Europe 2022
37 min
Componentes de Full Stack
Top Content
Remix es un marco de trabajo web que te ofrece el modelo mental simple de una aplicación de múltiples páginas (MPA) pero el poder y las capacidades de una aplicación de una sola página (SPA). Uno de los grandes desafíos de las SPA es la gestión de la red que resulta en una gran cantidad de indirecciones y código defectuoso. Esto es especialmente notable en el estado de la aplicación que Remix elimina por completo, pero también es un problema en los componentes individuales que se comunican con un punto final de backend de un solo propósito (como una búsqueda de combobox, por ejemplo).
En esta charla, Kent demostrará cómo Remix te permite construir componentes de interfaz de usuario complejos que están conectados a un backend de la manera más simple y poderosa que hayas visto. Dejándote tiempo para relajarte con tu familia o lo que sea que hagas para divertirte.
Entendiendo la Arquitectura Fiber de React
React Advanced Conference 2022React Advanced Conference 2022
29 min
Entendiendo la Arquitectura Fiber de React
Top Content
Hemos escuchado mucho sobre la Arquitectura Fiber de React, pero parece que pocos de nosotros la entendemos en profundidad (o tenemos el tiempo para hacerlo). En esta charla, Tejas repasará su mejor intento de entender Fiber (revisado por otros expertos), y lo presentará de una manera 'explicar-como-si-tuviera-cinco años'.
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!
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
Existen muchas formas de autorizar componentes en React, y hacerlo correctamente puede no ser tan fácil, especialmente cuando los componentes se vuelven más complejos. En esta charla, aprenderás cómo construir componentes React a prueba de futuro. Cubriremos dos enfoques diferentes para construir componentes - Composición y Configuración, para construir el mismo componente utilizando ambos enfoques y explorar sus ventajas y desventajas.
Patrones de Arquitectura Remix
Remix Conf Europe 2022Remix Conf Europe 2022
23 min
Patrones de Arquitectura Remix
Top Content
Remix ofrece una increíble flexibilidad y puede ser desplegado en cualquier lugar donde se ejecute JavaScript. Pero, ¿cómo encaja Remix en el panorama de aplicaciones más amplio de una organización? Remix proporciona una gran utilidad, pero ¿cómo aprovecharla al máximo? ¿Qué cosas deberían manejarse dentro de Remix y qué cosas serían mejor hacer en otro lugar? ¿Deberíamos usar el adaptador express para agregar un servidor WebSocket o debería ser un microservicio independiente? ¿Cómo integrarán las organizaciones empresariales Remix en sus pilas actuales? ¡Hablemos de patrones de arquitectura! En esta charla, quiero compartir mis pensamientos sobre cómo integrar mejor Remix en una pila (empresarial) más grande.

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.