Ingeniería
Sistemas que diseñé y operé en producción — decisiones de arquitectura, trade-offs y restricciones reales.
Problemas resueltos en producción
Performance de frontend
Inbox de un SaaS B2B cargando ~20.000 conversaciones de una vez (~6,7 MB por request) — paginación cursor-based + virtualización de lista, payload de ~19 KB y fin de los bloqueos de interfaz
Latencia de API
Timeouts de APIs de marketplaces causando fallas en cascada en el checkout de una operación de dropshipping — circuit breaker con fallbacks y monitoreo (implementación completa en el blog)
Inconsistencias de marketplace
APIs de Mercado Livre y Shopee retornando datos de producto inconsistentes — adapter pattern normalizando los schemas en un modelo unificado
Migración de legado
Plataforma de estética con 50k+ usuarios saliendo de un monolito PHP 5.3 hacia React + Next.js sin downtime — migración incremental, pantalla por pantalla (strangler fig)
Rendimiento a escala
Tiempos de respuesta degradando con el crecimiento de la base en una plataforma de salud web + mobile — optimización de queries, caching estratégico y llamadas paralelas
UX cross-platform
Mantener UX consistente entre React (web) y React Native (mobile) en el mismo producto — design tokens y contratos de componentes compartidos
Consistencia de datos
Módulos financieros de un SaaS para pet shops (ventas + comisiones + pagos) perdiendo sincronía — transacciones atómicas con advisory locks de PostgreSQL
Sistemas de IA en producción
No chatbots — pipelines en producción donde IA es un componente en un sistema mayor, con fallbacks, monitoreo y datos reales fluyendo.
Agente IA en WhatsApp
Agente con LLM para atención, recomendación de productos y cierre de ventas. Mensajes procesados de forma asíncrona, datos registrados en PostgreSQL. Fallback a matching por reglas cuando LLM no está disponible.
Pipeline RAG (LangChain + pgVector)
Ingestión de documentos → chunking → generación de embeddings → almacenamiento vectorial en PostgreSQL con pgVector → búsqueda semántica con top-K como contexto para LLM.
Leer implementación completa →Preguntas frecuentes
¿Qué es la paginación cursor-based y cuándo usarla?
En lugar de OFFSET/LIMIT, cada página se busca a partir de un cursor — un puntero estable al último registro cargado (ej.: created_at + id). Esto mantiene el costo de lectura constante en listas grandes y evita ítems duplicados o saltados cuando llegan nuevos registros durante la navegación. Es la elección correcta para feeds e inboxes; el trade-off es perder el salto directo a una página arbitraria.
¿Qué es la arquitectura multi-tenant?
Un patrón de diseño donde múltiples organizaciones comparten la misma aplicación y base de datos, pero los datos de cada tenant están aislados. El enfoque más común en SaaS moderno es base de datos compartida con columna tenant_id y Row Level Security (RLS) de PostgreSQL como red de seguridad.
¿Cómo manejar webhooks de pago de forma confiable?
Use un enfoque en capas: valide firmas en cada evento, garantice idempotencia con IDs de eventos almacenados, responda inmediatamente y procese en background, valide transiciones de estado con state machine, ejecute jobs de reconciliación periódicos y dirija eventos fallidos a una dead letter queue.
¿Cómo integrar IA en sistemas de producción?
Trate la IA como un componente del sistema, no una feature aislada. Procese mensajes de forma asíncrona, registre datos de vuelta en la base de datos, implemente fallbacks para cuando el LLM no esté disponible y monitoree la calidad de las respuestas. El punto central es confiabilidad — el sistema debe funcionar incluso cuando el proveedor de IA tiene problemas.
¿Qué es el patrón circuit breaker?
Un patrón de resiliencia para integraciones con APIs de terceros. Cuando una API externa empieza a fallar, el circuit breaker se 'abre' y retorna respuestas fallback en lugar de propagar la falla por el sistema. Después de un período de cooldown, permite solicitudes de prueba para verificar si el servicio se recuperó.
Profundizaciones
Inbox React a escala
Cursor, virtualización, 6,7 MB → 19 KB por request
Circuit Breaker en Node.js
State machine, fallbacks, retry y monitoreo
Arquitectura de Webhooks para Pagos
Idempotencia, reconciliación, flujos PIX
Arquitectura Multi-tenant
Base compartida, RLS, particionamiento
RAG con LangChain
Embeddings, pgVector, búsqueda semántica
Design Systems a escala
Shadcn UI, tokens, contratos de componentes
Docker para devs frontend
Dockerfile, multi-stage builds, dev/prod
Iniciando en TypeScript
Tipos, interfaces, generics, utility types
