Rotceh Ramirez Gallegos
Andrés Orozco
Eduardo Hidalgo Díaz Rugama
La mantenibilidad es clave para sostener la evolución de un sistema sin fricción. Aquí se explica, con enfoque práctico, cómo responder a un pedido de cambio: hacerlo, probarlo y desplegarlo con mínimo impacto. Verás tácticas para confinar modificaciones, prevenir efectos dominó en dependencias y diferir enlace para evitar redeploys completos.
¿Qué define la mantenibilidad y cuál es el estímulo de cambio?
La mantenibilidad se activa ante un pedido de cambio: llega un nuevo requerimiento y el sistema debe adaptarse. La meta es que el cambio esté acotado, se pruebe con confianza y se despliegue sin afectar otras partes.
¿Cómo confinar modificaciones con coherencia semántica y servicios comunes?
Confinar implica que cada cambio afecte lo mínimo posible. Para lograrlo, hay que alinear responsabilidades, dependencias y puntos de extensión.
¿Qué es la coherencia semántica y por qué mejoran la cohesión y el acoplamiento?
La coherencia semántica relaciona responsabilidades dentro de un módulo. Cuando un módulo es cohesivo, cambia por una sola razón y es más mantenible. Si no es cohesivo, cambia por motivos diversos y se vuelve frágil. Reducir acoplamiento y elevar cohesión hace que los cambios no se propaguen.
¿Cómo abstraer servicios comunes como logging, autenticación y API?
La táctica de abstraer servicios comunes mueve funcionalidades transversales a un módulo dedicado: logging, autenticación y autorización, integraciones compartidas. Las partes de negocio (ventas, compras) dependen de ese servicio externo, que puede ser un módulo separado sin ser un componente aislado.
¿Cómo generalizar, limitar opciones y anticiparse a cambios con patrón de estrategia?
Estas tácticas estabilizan la base y preparan el sistema para nuevas variantes sin reescrituras amplias.
¿Por qué generalizar separa lo genérico de lo específico?
Generalizar crea una capa estable con lo genérico (interfaces, clases abstractas, conceptos globales) y aísla lo específico (implementaciones, recursos variables como sistema de archivos o API). Así, las variaciones se incorporan sin tocar la estructura estable.
¿Cómo limitar opciones en integraciones como plataformas de pago?
Limitar las opciones disponibles evita cambios radicales. Si se sustituye una plataforma de pagos, conviene mantener una interfaz similar: seguir usando API, conservar el flujo de estados (por ejemplo, pendiente, apagado o cancelado), y alinear interacciones externas.
¿Cómo anticiparse a cambios con patrón de estrategia?
Anticiparse a los cambios prepara el terreno: no se implementa de antemano, pero sí se deja una estrategia lista para incorporar la novedad. Cuando los algoritmos de un proceso cambian o se necesita una familia de algoritmos, el uso de un patrón como estrategia permite cambiar la variante en ejecución y agregar nuevas sin tocar el flujo.
¿Tienes dudas o un caso real donde aplicar estas tácticas? Comparte tu contexto en los comentarios y conversemos cómo confinar tu próximo cambio con el menor impacto posible.
Rotceh Ramirez Gallegos
Andrés Orozco
Eduardo Hidalgo Díaz Rugama
Carlos Eduardo Diaz Polanco
Abril Darynka Tapia Sosa
Carlos Andres Castañeda Osorio
Reinaldo Mendoza
Roberto Dopazo
Antonio Rafael González Ferrer
Christian Gómez
Julian Parra
Wilson Andrey Cárdenas Henao
Antonio Madrid
María Victoria Argañaras
María Victoria Argañaras
Cristian Camilo Cortes Ortiz
Juan Carlos Ortiz Romero
Irving Juárez
Francisco Ruiz Lezcano
nmurillo749
Juan Carlos Ortiz Romero
Demasiada teoría hasta el momento a mi punto de vista, hubiera estado bien tener más ejemplos reales o en una pizarra para explicar de forma más dinámica.
Lamentablemente así es la Ing. en software, es por eso que a muchos no les gusta y la mejor forma de aprenderlo es ya en equipos de trabajo, por eso se paga muy bien a las personas que tienen amplia experiencia en esto.
100% de acuerdo con @Andrés Orozco. También hay que tomar en cuenta que en Platzi los cursos no son extensivos, son intensivos. Son rápidos, efectivos y simples, no extensos y abarcativos. Es parte del formato de Platzi.
CONFINAR MODIFICACIONES
Aunque no existe necesariamente una relación precisa entre la cantidad de módulos afectados por un conjunto de cambios y el costo de implementar dichos cambios, restringir las modificaciones a un pequeño conjunto de módulos generalmente reducirá el costo. El objetivo de las tácticas en este conjunto es asignar responsabilidades a los módulos durante el diseño de modo que los cambios previstos tengan un alcance limitado.
PREVENIR EFECTOS DOMINÓ
Un efecto dominó de una modificación es la necesidad de realizar cambios en los módulos que no se ven afectados directamente por él. Por ejemplo, si se modifica el módulo A para lograr una modificación particular, entonces el módulo B se cambia solo por el cambio al módulo A. B debe modificarse porque depende, en cierto sentido, de A.
DIFERIR ENLACE
Aplazar el tiempo de enlace es compatible con los escenarios previamente mencionados a costa de requerir infraestructura adicional para admitir el enlace tardío
Escenario: Mantenibilidad
Estimulo: Pedido de cambio / Nuevo requerimiento Tácticas para que la respuesta sea que se pudo hacer el cambio, probarlo y desplegarlo Familias de tácticas
Para extender un poco el tema de Acomplamiento / Cohesión: !Acomplamiento/Cohesión
Demasiada teoría, solo estoy tomando notas porque se que lo puedo necesitar, la información tiene valor, lo puedo ver pero creo que podrían haber recomendado leer un pdf y tendría el mismo resultado que ver los videos
Ponerle Profesional al curso, y no considerar un estudio exhaustivo fue un error, como se puede observar para mi, cada clase explicada, requiere quizás hasta una hora entera viendo ejemplos y probando punto a punto lo explicado.
Apuntes:
Mantenibilidad
Confinar modificaciones. Las tácticas van a intentar trabajar sobre nuestros módulos para que cada cambio que nos pidan esté confinado a sólo un módulo. Cuando logramos esto logramos que las dependencias entre módulos sean más ligeras y el cambio que nos proponen no afecte a muchas partes del sistema. • Coherencia semántica. Habla de la relación entre las responsabilidades de los módulos. Hablamos de acoplamiento y cohesión. Si logramos encontrar la cohesión en un módulo entonces vamos a poder hacer que ese módulo sea más mantenible. De lo contrario es posible que ese módulo cambie por diferentes razones. o Abstraer servicios comunes. • Generalizar. Al generalizar un módulo podemos separar lo específico de lo genérico. • Limitar opciones disponibles. Limitar el rango de modificación nos ayuda a que sea más mantenible. • Anticipar cambios.
Escenarios: Mantenibilidad
El estimulo es un pedido de cambio. dentro de la mantenibilidad hay tres familias de tácticas:
Pregunta, nunca he tenido muy claro el concepto que se refiere a Alta cohesión, bajo acoplamiento
Cohesión: La cohesión es la medida en la que un componente se dedica a realizar solo la tarea para la cual fue creado, delegando las tareas complementarias a otros componentes. (Una clase debe de hacer lo que respecta a su entidad, y no hacer acciones que involucren a otra clase ó entidad).
Acoplamiento: El acoplamiento es la medida en que los cambios de un componente tiende a necesitar cambios de otro componente. (Cuando modificamos los atributos de una clase, se tienen que modificar los atributos de otra clase.)
De ahi que debemos de buscar siempre una ALTA COHESIÓN y BAJO ACOPLAMIENTO.
Una forma corta para recordarlo:
Alta cohesion: Pocas responsabildades, muy relacionadas.
Bajo acoplamiento: Poca dependencia entre componentes.
De verdad que clase a clase entiendo un poquito mas por que mi tech leader o el CTO de donde trabajo toman las decisiones que toman, entiendo la teoría destrás de esas decisiones, y ahora puedo yo empezar a tomar mejores decisiones para mis contribuciones al proyecto. Muy potente!!!
Este curso esta tremendo, super completo, pero no es para personas que no tengan experiencia trabajando en la industria.
Todos los conceptos se aplican directamente a situaciones a resolver día a día en el trabajo del programador. Incluso a mi siendo junior me estan sirviendo los conceptos para plantear mejor mis propuestas e ideas con mis colegas.
Así que si sienten que no pueden bajar la teoría a la práctica les recomiendo que retomen el curso cuando ya tengan esa experiencia porque si no es dificil que puedan pensar en situaciones donde se aplica todo lo que dice el profe.
Gracias por tu aporte.
Familias de tácticas: 1.- Confinar modificaciones. Las tácticas van a intentar trabajar sobre nuestros módulos para que cada cambio que nos pidan esté confinado a sólo un módulo. Cuando logramos esto logramos que las dependencias entre módulos sean más ligeras y el cambio que nos proponen no afecte a muchas partes del sistema. a) Coherencia semántica. Habla de la relación entre las responsabilidades de los módulos. Hablamos de acoplamiento y cohesión. Si logramos encontrar la cohesión en un módulo entonces vamos a poder hacer que ese módulo sea más mantenible. De lo contrario es posible que ese módulo cambie por diferentes razones. Abstraer servicios comunes. Cuando encontramos que la aplicación tiene servicios más genéricos de no necesario podemos abstraerlos a un punto común y que las dependencias vayan de los módulos cohesivos a un servicio o modulo externo. b) Generalizar. Al generalizar un módulo podemos separar lo específico de lo genérico. c) Limitar opciones disponibles. Limitar el rango de modificación nos ayuda a que sea más mantenible. d) Anticipar cambios. Prepararnos para algún cambio que nosotros mismo sepamos que se deberá de dar en el futuro tomando en cuenta una estrategia sobre como incorporar el nuevo cambio. Los patrones de diseño suelen estar orientados a esto (Patrón estrategia). 2.- Prevenir efectos domino. Trabaja estrictamente con las dependencias, es decir cuando podemos detectar que un cambio generaría problemas en otros módulos o dependencias. 3.- Diferir enlace. Como podemos hacer para que un cambio en el código no requiera desplegar toda la aplicación.
Anticipar cambios en mi experienca es una de las peores cosas que se pueden hacer. Si algo no se necesita implementar ahora mismo en el sistema, incluso aunque 'probablemente' se use en el futuro, no se debe agregar.
Muchas veces se cambia de prioridad en la empresa y un feature que parecia probable, se vuelve solo codigo que estorba y nunca se uso. Y lo peor de todo, si en algun momento se vuelve a retomar ese feature, se hace desde cero, ya que nadie se acordo que ya habia un avance de eso
Mantenibilidad
Gracias por el curso. Agregaria talleres para ensuciarse las manos como parte del curso, ya que de otra manera, solo es alguien leyendo el texto de un libro.
Tener cuidado con la diferencia entre coerción y cohesión.
🤖 Escenario Mantenibilidad En este caso el estimulo es un pedido de cambio (llega un requerimiento y tenemos que cambiar el sistema).