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.
Cuatro reglas que no negocio
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.
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.
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.
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.
Prefiero que me descarten por lo que falta antes que quedar en evidencia en una entrevista técnica.
- 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
- Azure, Google Cloud
- Databricks
- Snowflake
- Microsoft Fabric
- Unity Catalog
- MLflow
- OCR y extracción de documentos
- Go
- Spec Driven Development formal
Ocho cifras, cada una con la condición en la que se tomó y la fuente que la respalda o la que le falta.
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 ↗
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 ↗
Servidor MCP en producción del sistema RAG ↗
La misma superficie, expuesta por HTTP ↗
435 en pytest, 77 en vitestfalta cobertura ↗
Misma validación walk-forward. Perdió contra AR(1)declarar la métrica ↗
Antes de moverlo fuera. Después: 1.78 ms ↗
La cuota de la cuenta era 10 ↗
Al mes, a esa cardinalidad. Se eligió DynamoDB ↗
Sobre 543 tests y 29 servicios de dominio ↗
Los límites tienen la misma jerarquía que los resultados.
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. ↗
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. ↗
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. ↗
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. ↗
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 ↗