Sobre mí

Diseño la arquitectura, la construyo y publico cómo la medí.

Construyo sistemas donde un fallo cuesta dinero o cuesta multa: facturación electrónica ante SUNAT, pasarelas de pago, libros contables y conciliación. Sobre esa base sumo IA cuando la mejora es medible, y publico la condición en la que medí cada cifra.

Diseño y construyo sistemas donde el fallo tiene consecuencia fiscal o legal: facturación electrónica ante SUNAT, pasarelas de pago, libros contables y conciliación.

Trabajo desde Lima y dirijo el equipo técnico de una agencia de nueve personas.

Cada cifra de esta página lleva su condición de medición y su fuente.

6años de desarrollo
2años de IA en producción
50+proyectos entregados
45+clientes
20+sistemas en producción
9personas en el equipo
Cómo trabajo

Cuatro reglas que no negocio

01

Mido antes de afirmar

Cada cifra que publico viene con la condición en la que se midió. Un recall@10 sin decir sobre qué gold set no es un dato, es una opinión.

02

Documento dónde se rompe

Todo sistema tiene un punto de fallo. El del pronóstico está en 510 productos y está calculado, no estimado. Prefiero decirlo yo antes de que lo descubra el cliente.

03

Dejo escritas mis equivocaciones

Estimé 25 segundos y medí 39.17. Apostaba por gradient boosting y ganó AR(1). La diferencia entre estimar y medir es el trabajo.

04

Elijo por costo, no por moda

Descarté CloudWatch porque a esa cardinalidad costaba 44 USD al mes. La concurrencia quedó en 8 porque la cuota de la cuenta era 10, no porque 8 fuera óptimo.

Lo que no sé hacer

Prefiero que me descarten por lo que falta antes que quedar en evidencia en una entrevista técnica.

Lo que uso
  • AWS
  • Python, TypeScript
  • FastAPI, Next.js, React
  • BM25 y búsqueda vectorial, RRF
  • Step Functions, Lambda, S3
  • DynamoDB, PostgreSQL, Prisma
  • CDK
  • pytest, vitest
  • TensorFlow, MediaPipe
No lo he usado
  • Azure, Google Cloud
  • Databricks
  • Snowflake
  • Microsoft Fabric
  • Unity Catalog
  • MLflow
  • OCR y extracción de documentos
  • Go
  • Spec Driven Development formal
Todas las mediciones

Ocho cifras, cada una con la condición en la que se tomó y la fuente que la respalda o la que le falta.

0.862Aporte de la vectorial

Recall de la búsqueda aislada del piso determinista, con el embebedor real. Con el de juguete daba 0.759: la diferencia es lo único que prueba que la mitad semántica no es decoración

2Violaciones del gold set

Con el embebedor real. Preguntar por papaya, que no está en el catálogo, devuelve fichas de papa: 0.6444 contra 0.6656, dos centésimas. Ningún umbral las separa sin matar las preguntas agregadassin resolver en recuperación

8Herramientas MCP

Servidor MCP en producción del sistema RAG

13Rutas FastAPI

La misma superficie, expuesta por HTTP

435 + 77Tests del RAG

435 en pytest, 77 en vitestfalta cobertura

0.1711Gradient boosting

Misma validación walk-forward. Perdió contra AR(1)declarar la métrica

707.5 msSnapshot en handler

Antes de moverlo fuera. Después: 1.78 ms

8Concurrencia Map

La cuota de la cuenta era 10

44 USDCloudWatch descartado

Al mes, a esa cardinalidad. Se eligió DynamoDB

53End to end de ADM

Sobre 543 tests y 29 servicios de dominio

Dónde se rompe

Los límites tienen la misma jerarquía que los resultados.

Sistema RAG

Papaya devuelve papa, y no lo arreglé en recuperación

Preguntar por un producto que no está en el catálogo devuelve el más parecido por nombre. Papaya puntúa 0.6444 y papa 0.6656: dos centésimas. Probé el umbral obvio y no funciona, porque cualquier corte que las separe mata las preguntas agregadas, que puntúan 0.5151. Lo resolví avisando al modelo desde el filtro léxico, que ya sabía que ninguna palabra coincidía con el catálogo. La evaluación sigue reportando las dos violaciones: no relajé el gold set.

Pronóstico en AWS

Se rompe a los 510 productos

514 bytes por elemento del Map contra el tope de 256 KB de estado de Step Functions. Sobre ese número hay que paginar el Map o mover la carga a S3.

Sistema RAG

El recall@10 vale dentro del dominio indexado

El gold set son 32 casos que redacté yo sobre 73 productos y 537 fechas. Es una muestra pequeña y de autor único: sirve para detectar regresiones, no para afirmar que el sistema generaliza.

OrquestadorADM

SUNAT entre 100 y 1999 es inconcluso

No se puede saber si el comprobante quedó registrado. La regla es no reemitir y esperar la consulta de estado, porque reemitir duplica el correlativo.

Paquete de despliegue

El paquete de despliegue, sin publicar

207.6 MB contra un límite de 250 MB. Retenido hasta confirmar si esa cifra es el paquete comprimido o el descomprimido, porque el límite de Lambda aplica al descomprimido. Se corrige o sale de la lista, pero no se publica a medias. por verificar