Experiencia · 2025 — Presente

Coderland.

Desarrollador Java Sénior

En Coderland trabajo en varios proyectos de clientes a la vez, desde sistemas empresariales legacy hasta microservicios cloud-native. Me enfoco en mantener las plataformas en producción modernas, seguras y rápidas: planificar migraciones de bajo riesgo de frameworks y runtimes con runbooks escritos y planes de rollback, entregar integraciones y convertir los hallazgos técnicos en reportes claros para project managers y clientes.

Proyectos

Proyecto 01 · 2026

Plataforma multipaís de factoraje de facturas

Fintech de factoraje — Centroamérica

Plataforma de factoraje de facturas con un despliegue por país y portales para administradores, clientes y afiliados, integrada con la API de una fintech aliada para el fondeo.

  • Identifiqué la causa raíz de una caída silenciosa en una integración: tras una migración de almacenamiento, las URLs firmadas de los archivos superaban el límite de 500 caracteres de la API del aliado y todas las solicitudes de fondeo fueron rechazadas durante 11 días. Construí un proxy permanente de URLs cortas que firma los enlaces bajo demanda, manteniendo el almacenamiento privado y auditable, y recuperé 66 de las 67 operaciones afectadas.
  • Diseñé y construí un módulo de evidencia de consentimiento digital: un registro append-only con IP, marca de tiempo del servidor, user agent, el texto completo aceptado y un hash SHA-256, además de certificados en PDF. Cubierto por 48 tests y en producción en los tres países.
  • Lideré el traslado del almacenamiento de documentos a cloud storage (1,627 archivos) y el release de un país con 101 commits y 16 migraciones, resolviendo sobre la marcha seis bloqueos imprevistos.
  • Corregí timeouts 504 en reportes PDF grandes: el profiling mostró que el cuello de botella era el renderizado, no SQL, así que la generación pasó a una cola dedicada en segundo plano que además libera memoria después de cada tarea.
  • Rastreé el origen de caídas 504 recurrentes: llamadas HTTP salientes sin timeout que bloqueaban los workers de la aplicación. Lo resolví con timeouts e índices en la base de datos.
  • Encontré un bug de float × Decimal que desde 2024 descartaba silenciosamente cargas por lotes en dos países, y corregí un error 403 que afectaba a todo el portal para los usuarios de solo lectura, en 32 plantillas, con un test que recorre cada enlace.
Proyecto 02 · 2026

Catálogo de e-commerce e integraciones con marketplaces

Retailer europeo de electrónica

Sistema legacy en Java EE que gestiona catálogo, precios, pedidos y conexiones con marketplaces para un retailer de alto volumen.

  • Identifiqué la causa raíz de un defecto de integridad de pagos y lo contuve: un proceso en segundo plano confirmaba como exitosos los pagos de marketplace de todos los pedidos, incluso de pedidos inexistentes.
  • Restablecí a 176 usuarios de tienda el acceso a los pedidos online tras detectar que faltaba un grupo de permisos en los nuevos accesos por tienda; se corrigió a nivel de datos, sin cambios de código.
  • Recuperé 616 de 616 facturas de vendedores para el equipo de finanzas tras la suspensión de un vendedor, con un script contra la API adecuada del marketplace, sin desarrollo nuevo.
  • Realicé una auditoría de la infraestructura de AWS en producción que identificó ahorros potenciales de cerca de $12.5k al año.
  • Escribí el runbook del cutover a producción de la integración del catálogo con la plataforma de comercio VTEX.
Proyecto 03 · 2026

Middleware de integración de reclutamiento

Servicio de integración para un SaaS de reclutamiento

Servicio reactivo que conecta el sitio público de empleos y el portal de empleados con un SaaS de reclutamiento: vacantes, postulaciones, referidos y webhooks.

  • Construí un pipeline de publicación de vacantes con IA: un poller y un worker de outbox adaptan los borradores de vacantes a la plantilla estándar de la empresa usando Gemini; luego se amplió a las vacantes publicadas directamente.
  • Automaticé una campaña de reactivación de candidatos con enlaces con token firmado, un outbox durable con manejo de dead letters y deduplicación de correos, en lugar de la limpieza manual de hojas de cálculo.
  • Tras descartar primero el middleware, identifiqué que la causa raíz de las vacantes reabiertas y duplicadas era una automatización de un CRM externo.
  • Migré el servicio a un stack WebFlux totalmente no bloqueante sobre Java 25 / Spring Boot 4, con timeouts en los clientes, pools de conexiones y monitoreo con Prometheus.
  • Una auditoría posterior a la actualización detectó que el pipeline de CI omitía silenciosamente las 20 clases de tests y que había una llamada bloqueante en el event loop reactivo; ambos problemas quedaron corregidos.
Proyecto 04 · 2026

Portal interno de empleados

Coderland — plataforma interna

Portal para el registro de horas, la facturación, las solicitudes de permisos y las comisiones por referidos, integrado con el CRM, los gestores de incidencias y el middleware de reclutamiento.

  • Modernicé todo el stack con el patrón strangler, actualizando las librerías una por una, cada una en su propio PR pequeño: Spring Boot 3.5 / Java 17 en el backend y Vite, React 19 y TypeScript en el frontend.
  • Reemplacé una integración con el SDK del CRM repartida en 168 archivos por llamadas REST livianas, y resolví los contactos duplicados del CRM de forma determinística, devolviendo un código de error explícito para soporte en lugar de adivinar.
  • Investigué las comisiones por referidos con datos de producción: solo 2 de 310 referidos llegaron a ser contratados, lo que evidenció un problema de atribución y conversión, no una pérdida de datos. Además, corregí la causa raíz de un doble cobro.
  • Identifiqué la causa raíz de unos 40 incidentes recurrentes de nómina y facturación, como un límite de paginación de una API que truncaba los resultados o prefacturas canceladas que se contaban como pendientes.
  • Migré el build a pnpm y reduje el tiempo de build en CI de ~8 minutos a ~3 minutos.
Proyecto 05 · 2026

Sitio web corporativo y CMS headless

Coderland — sitio web público multilingüe (ES/EN)

Sitio web corporativo multilingüe y CMS headless cuyos formularios de contacto envían leads al CRM.

  • Reforcé los formularios de leads con cuatro capas antispam más una verificación final con IA usando Gemini, tras detectar en una auditoría que el token de reCAPTCHA nunca se validaba en el servidor.
  • Rastreé en los logs una falla silenciosa y prolongada en la captura de leads y restablecí la captura; luego corregí la atribución de origen de los leads para que el CRM guarde la fuente UTM real en lugar de un único valor por defecto.
  • Migré el blog desde un SaaS de pago al CMS: 67 artículos bilingües con redirecciones permanentes y actualización de caché mediante webhooks.
  • Logré que 45 URLs huérfanas quedaran 100% rastreables y corregí los códigos de estado de las redirecciones, con validación en producción.
  • Escribí un postmortem blameless sobre un incidente de cache poisoning, en el que identifiqué una amplificación en tres capas, y entregué el hotfix y la corrección de arquitectura; también lideré la actualización de Strapi 4 → 5 en producción.

¿Quieres conocer la historia completa?

Con gusto te explico las decisiones de arquitectura detrás de este trabajo.