Buscar
Explorar el blog
¿Qué quieres encontrar?
Arquitectura, Agentic AI, Azure, .NET, microservicios y más.
Modernización de aplicaciones legacy con análisis automático y heurístico

Modernización de aplicaciones legacy con análisis automático y heurístico

En mis años trabajando con sistemas legacy he observado los mismos obstáculos una y otra vez: acoplamiento excesivo, lógica enmarañada y deuda técnica disfrazada. Inspirado por estas experiencias, desarrollé una técnica llamada Heuristic Legacy Refactoring (HLR) y un proyecto de código abierto, refactor_heuristic, que aplica heurísticas y métricas objetivas para orientar la modernización eficiente de código heredado.

En esta entrada profundizo en cómo combinar herramientas como NDepend + IA generativa con análisis heurístico para ofrecer diagnósticos confiables y accionables. Si estás en el camino de modernizar un sistema complejo, esta técnica puede ayudarte a saber por dónde empezar y cómo avanzar con menor riesgo.

leer más...
NDepend + IA Generativa: Refactorizando

NDepend + IA Generativa: Refactorizando

En este experimento parto de una base .NET con deuda técnica deliberada y la someto a un análisis exhaustivo con NDepend. A partir del informe (reglas, métricas y CQLinq), priorizo los smells con ayuda de una IA generativa y aplico refactors en tres oleadas (Quick Wins → Media → Estructural). El resultado es una reducción medible de complejidad, duplicación y acoplamiento en horas, no semanas, y un pipeline con quality gates que evita regresiones. NDepend me da la radiografía; la IA acelera la cirugía. Juntos, convierten un código “legacy” en una base lista para evolucionar con seguridad.

leer más...
La IA con un propósito

La IA con un propósito

En los últimos meses (o último año), todo el mundo habla de la Inteligencia Artificial (IA). Hay titulares que insisten en que la IA nos va a quitar el trabajo, que no está lo suficientemente madura o que las empresas no ven retorno de inversión (ROI). Pero, ¿sabes qué? Me parece que cuando hablamos así, detrás de esos grandes titulares, olvidamos lo que realmente importa: el para qué de la IA. Porque es justamente en los casos concretos, reales, donde la IA puede brillar.

leer más...
De Kubernetes venimos, a Kubernetes vamos: cómo desarrollar microservicios sin duplicar trabajo

De Kubernetes venimos, a Kubernetes vamos: cómo desarrollar microservicios sin duplicar trabajo

Cuando sabes que tu aplicación va a ir a producción en Kubernetes desde el minuto cero, lo último que quieres es mantener un docker-compose.yml, un .aspire.app, un conjunto de manifiestos k8s/, y encima repetir la configuración en CI/CD. La tentación de crear “entornos de desarrollo paralelos” es alta, pero el coste a medio plazo también lo es.

En este artículo, te muestro cómo estructurar un entorno de desarrollo eficiente, realista y sin lock-in, comparando 4 enfoques comunes: Docker Compose, .NET Aspire, k3d y kind, desde la perspectiva de un equipo que desplegará sí o sí en Kubernetes.

leer más...
Cómo manejar reprocesos con alta concurrencia en DDD y Service Bus

Cómo manejar reprocesos con alta concurrencia en DDD y Service Bus

En arquitecturas distribuidas con Service Bus (como Azure Service Bus, RabbitMQ o NServiceBus), es común recibir mensajes que provocan cambios en nuestro modelo de dominio. Pero… ¿qué ocurre cuando ese modelo ya fue modificado por otro proceso?

Este artículo te guía sobre cómo actuar ante errores de concurrencia al reprocesar mensajes, especialmente cuando sigues prácticas de Domain-Driven Design (DDD) y usas concurrencia optimista con una base de datos relacional.

leer más...