blog
Artículos
Aprendizajes prácticos sobre backend, arquitectura de software y construcción de productos digitales. Sin teoría vacía — solo lo que funciona en producción.
Google I/O 2026 para el dev backend Python LATAM — Antigravity y Gemini 3.5 Flash
Gemini 3.5 Flash supera a 3.1 Pro en coding y agentic. Antigravity llega como plataforma agent-first. Que significa para FastAPI, PydanticAI y RAG desde Colombia.
Por qué documentar cada decisión técnica de arquitectura (y cómo hacerlo con ADRs)
El formato MADR, cómo lo usé para documentar 14 decisiones arquitectónicas en una plataforma de observabilidad, y por qué los ADRs son la diferencia entre un sistema mantenible y uno que nadie quiere tocar.
El consumer que perdía mensajes bajo carga — cómo lo arreglé con hexagonal y Service Bus
Cómo refactoricé un adapter de integración a arquitectura hexagonal, migré a Service Bus con peek_lock y AutoLockRenewer, y resolví de verdad el problema de idempotencia en consumers async.
Cómo centralicé los packages privados de Python, npm y NuGet del equipo en Azure
Cómo configuré Azure Artifacts como registro privado para los cuatro SDKs del equipo — autenticación con tokens efímeros, pip.conf y .npmrc, y el patrón upstream para no bloquear paquetes públicos.
Deploy sin guardar secretos: WIF, Container Apps y rollback automático en GitHub Actions
El pipeline de CD que uso para construir imágenes Docker, publicarlas en Azure Container Registry y desplegar en Container Apps — con rollback, smoke test, y sin downtime.
Usé Terraform 6 meses y lo reemplacé — esto es lo que aprendí
La decisión documentada de migrar de Terraform a Bicep para infraestructura Azure — state files, plan/apply cycle, fricción real en pipelines, y las cosas que Terraform hace mejor que Bicep nunca igualará.
Case study: integración e-commerce Shopify con Node.js, MySQL y Angular
Como construi una plataforma de gestión de inventario sincronizada con Shopify — OAuth app, webhooks bidireccionales, exportación Excel a escala y dashboard Angular con Material Design.
Case study: plataforma B2B industrial con directorio, app móvil y LLM integration
Como construi un ecosistema de 9 aplicaciones para un cliente industrial — directorio B2B en Fastify, app móvil React Native + EAS, pipeline LLM con VertexAI y BigQuery, y mensajería en tiempo real.
Case study: plataforma enterprise con 20+ microservicios en NestJS
Como diseñe una plataforma multi-dominio desde cero — API gateway Fastify, pagos, email delivery, WhatsApp integration y dashboard analitico con NestJS + TypeORM + PostgreSQL.
Case study: SaaS de gestión con API REST, PostgreSQL y dashboard Vite
Como construi un SaaS full-stack desde cero — Express + PostgreSQL sin ORM, JWT stateless, frontend Vite con GridJS para tablas de alto volumen.
Case study: plataforma de telemedicina con 18 microservicios Node.js + Python
Como diseñe e implemente desde cero una plataforma de consultas medicas online — autenticacion RBAC, agendamiento con zonas horarias, video Jitsi, reportes RIPS y pipeline de documentos en FastAPI.
Cómo migré tablas de SQL Server a Delta Lake sin perder datos
El proceso de migrar tablas SQL Server legacy a Delta Lake usando Polars y PyArrow — type mapping, schema evolution, partitioning por fecha, y por qué Delta Lake es la respuesta correcta para datos analíticos.
Una librería con bug, cinco servicios caídos — cómo diseñar para que eso no pase
El proceso de construir librerías Python internas con pyproject.toml, namespace packages y defensive design — y la regla de oro: una dependencia transversal nunca puede matar el proceso que la usa.
ETL que no explota en producción: chunking adaptivo, high-water marks y Delta Lake
El diseño de un ETL que se adapta al tamaño real de los datos — chunking dinámico por ID y fecha, high-water marks UTC-safe, streaming inserts a Delta Lake, y skip inteligente por día.
Un botón para publicar en Python, npm, NuGet y Databricks al mismo tiempo
Cómo diseñé un workflow de GitHub Actions que publica simultáneamente en PyPI, npm, NuGet y un wheel de Databricks — con gates de calidad, idempotencia por versión, y un solo botón de release.
El auto-commit de Kafka pierde mensajes en silencio — cómo configuré el consumer correctamente
El diseño de consumers Kafka en Python con aiokafka — commit manual de offsets, manejo de rebalanceo, dead letter queue para mensajes que fallan, y por qué el auto-commit silenciosamente pierde mensajes.
Los queries KQL que uso para monitorear servicios en producción
Cómo construí dashboards operacionales en Azure Workbooks con KQL — queries de latencia por endpoint, error rates, traces distribuidos, y los patrones de KQL que más uso para monitoreo de servicios.
Por qué sigo usando Makefile en 2026 (y por qué me alegra haberlo hecho)
Por qué un Makefile bien diseñado es la mejor interfaz entre el developer y el pipeline — idempotencia, skip logic, self-documentation, y cómo lo apliqué para publicar SDKs en cuatro lenguajes.
Mi aggregation pipeline de MongoDB tardaba 30s — así lo diagnostiqué con explain()
Cómo diagnostico y optimizo aggregation pipelines lentos en MongoDB — explain plans, índices que sí y que no ayudan, $lookup vs embedding, y los errores que más veces he visto en producción.
MongoDB C# driver: cuándo usar BsonDocument y cuándo usar tipos tipados en aggregation
Cómo construyo aggregation pipelines en C# con el MongoDB driver — cuándo usar BsonDocument vs clases tipadas, el patrón de builder de pipeline, y los casos de borde con tipos BSON que el driver no mapea automáticamente.
15 servicios distribuidos y ningún log útil — cómo lo resolví con OpenTelemetry
El proceso de construir SDKs de instrumentación en Python, TypeScript, C# y Databricks sobre OpenTelemetry exportando a Azure Monitor — incluyendo los 14 ADRs que documenté en el camino.
Mi prompt de 3000 tokens daba resultados inconsistentes — cómo lo resolví con agentes
Cómo migré un pipeline de generación de contenido de un prompt enorme a una cadena de agentes especializados con OpenAI Agents SDK — por qué los prompts monolíticos fallan a escala y cómo estructurar el handoff entre agentes.
OpenTelemetry al 10%: cómo reduje el costo de Azure Monitor sin perder visibilidad
Cómo el head-based sampling en OpenTelemetry reduce el costo de Azure Monitor en ~90% sin sacrificar visibilidad de errores — TraceIdRatioBased, ParentBasedSampler, y cuándo el tail-based sampling es la respuesta correcta.
Pandas se quedó corto con 10M filas — cómo migré a Polars y lo que cambió
Por qué migré mis pipelines ETL de Pandas a Polars con PyArrow — lazy evaluation, expresiones paralelas, Arrow como formato de intercambio, y los casos donde Pandas sigue siendo la opción correcta.
El patrón que evita que tu SDK crashee la app que lo consume
El patrón de diseño defensivo para SDKs — cómo construir una librería que falla silenciosamente, expone su estado de salud, y nunca propaga excepciones al caller. Con implementaciones en Python y C#.
Migrar INT a BIGINT en SQL Server sin downtime: la estrategia de columna shadow
El proceso real de migrar columnas de identidad de INT a BIGINT en tablas productivas de SQL Server — por qué no puedes simplemente ALTER COLUMN, la estrategia de columna shadow, y cómo coordinarlo con el equipo de desarrollo.
YOLOv8 funciona perfecto en local — esto es lo que tuve que hacer para ponerlo en producción
Cómo desplegué un modelo YOLOv8 de detección de objetos en producción — arquitectura API .NET que invoca inferencia Python, versionado de modelos, preprocessing pipeline, y las decisiones que no están en la documentación oficial.
Cómo elegí mi stack de agentes Python en 2026 (y por qué no fue LangChain)
Evalué PydanticAI, LangChain, LangGraph y el SDK nativo. Aquí los números reales y la lógica detrás de la decisión.
Le cargue 150 archivos Markdown a Claude Opus 4.7 y el resultado no fue lo que esperaba
1M de tokens de contexto sin una estrategia clara es ruido. Aqui esta el workflow que uso para cargar mi segundo cerebro completo y conseguir que el modelo entienda el ecosistema sin re-explicar nada.
Abri DocuQuery como OSS — RAG con FastAPI y Qdrant, sin pretender que era perfecto
Tenia repos privados con descripciones aspiracionales y casi nada de codigo. Hoy abri uno real al publico, con su ADR, sus tests y sus huecos.
Como elegi mi stack de agentes Python en 2026 (y por que no fue LangChain)
Tres frameworks Python para agentes LLM en produccion compitieron: PydanticAI v1, LangGraph v1 y Microsoft Agent Framework 1.0 GA. Aqui mi decision con razones duras.
Idempotency keys: la implementación con Postgres unique constraint y Redis lock que sí soporta producción
Por qué un endpoint de creación de orden no puede confiar solo en el cliente, qué falla cuando se implementa idempotency con un solo mecanismo, y cómo combinar lock distribuido (Redis) con unique constraint (Postgres) para cubrir tanto carrera concurrente como retry tardío.
Quota-aware pipelines: cómo no quemar 10.000 unidades de YouTube API ni perder análisis Claude a mitad de scan
Detectar 403 quotaExceeded temprano, abortar limpio en lugar de seguir pegando contra una pared, y diseñar el background task para que el frontend muestre estado real (no spinner infinito). Patrones extraídos de una herramienta interna que escanea videos y los analiza con Claude vision.
Publicacion nueva en el blog de Jotive
Resumen practico sobre como estructurar y publicar contenido tecnico que aporte valor real.
Bienvenido a jotive.dev
Una introducción a quién soy, de dónde vengo y qué vas a encontrar en este espacio.