Serverless: matemática de costo en producción
Tráfico esporádico ahorra. Tráfico constante sale caro. Cold starts y lock-in tienen precio medible.
Artigos técnicos e reflexões sobre engenharia de software & IA
Tráfico esporádico ahorra. Tráfico constante sale caro. Cold starts y lock-in tienen precio medible.
Revisar screenshots de un staging compartido no escala. Un ambiente por PR con datos sintéticos transforma la calidad del review.
Un backup sin restore probado es superstición. RPO/RTO definidos, estrategia 3-2-1 y simulación de desastre programada.
La red interna no es confiable por defecto. mTLS, JWT entre servicios y workload identity en ambientes reales.
K8s resuelve problemas que equipos de 5 personas no tienen. Costos ocultos, alternativas honestas y el punto donde migrar vale la pena.
Una imagen de 1.2GB pasa a pesar 80MB sin cambiar la aplicación. Build tools fuera de la imagen final recortan también la superficie de ataque.
El .env commiteado es el leak más común del mundo dev. Cofres, rotación e inyección segura de credenciales.
Lighthouse 100 no significa sitio accesible. Patrones ARIA correctos, foco gestionado y pruebas con lectores de pantalla.
Google Docs fijó un nuevo estándar: los usuarios esperan edición simultánea sin conflictos. Arquitectura de colaboración explicada.
Tres productos, tres marcas, un design system. Los tokens separan decisión de valor y hacen escalables los temas.
Minificar JS da 3% de LCP. Servir la imagen correcta da 30%. Ranking de las optimizaciones por impacto medido en producción.
Zustand, Jotai y signals reducen el costo de re-render más allá de lo que alcanza la context API. Criterios de elección con benchmarks de render.
Server Components cambian las reglas de cache, estado y rendering. Los errores de abajo costaron días de debug en proyectos reales.
GraphQL elimina el over-fetching y suma complejidad propia. Dónde le gana a REST hoy y dónde se volvió peso muerto.
Los logs dicen qué falló. Los traces muestran dónde y por qué. Instrumentación OTel paso a paso con propagación de contexto.
Breaking change sin versionamiento quema confianza. ¿URI, header o parámetro? Contratos, deprecaciones y comunicación.
ALTER TABLE bloquea producción. Expand-contract separa el cambio de esquema en fases compatibles con versiones convivendo.
Todo job corre dos veces tarde o temprano. Idempotencia, visibility timeout y patrones de retry que salvan el sistema.
Deploy y release son eventos separados. Las flags desacoplan ambos y convierten el rollback en un toggle de configuración.
¿Columna tenant_id, schema por tenant o base de datos por tenant? Costos, riesgos y cuándo migrar entre los tres patrones.
Los webhooks fallan en silencio: duplicados, fuera de orden, perdidos. Checklist completo para recibir eventos sin perder ninguno.
La elección de mensajería define costo y operabilidad. Comparada por throughput, ordenamiento y TCO.
Pedir JSON en el prompt se rompe en producción. Constrained decoding, validación en capas y fallback.
El usuario espera la respuesta en chunks. SSE cubre la mayoría de los casos con menos complejidad que WebSockets.
Los agentes se rompen en producción por falta de guardrails. Patrones de tool use, loops de agente y límites de autonomía.
La cuenta de LLM se multiplica sin gobernanza. Tres palancas cortan 70% sin perder calidad.
Los tests unitarios no cubren salidas probabilísticas. Golden datasets, jueces automatizados y gates de regresión.
Mismo corpus de 1 millón de documentos, mismas consultas. Recall, latencia p95 y costo operacional lado a lado.
Empieza por prompting. RAG resuelve conocimiento. Fine-tuning resuelve comportamiento. Costos reales de cada camino.
El chunking ingenuo genera resultados irrelevantes. Pipeline completa: chunking semántico, embeddings, búsqueda híbrida y reranking.
queryKey define la identidad, staleTime define la frescura, la mutación define la invalidación. TanStack Query asume la caché de servidor de tu aplicación React.
Los generics, conditional types y mapped types resuelven problemas concretos de reutilización de código y type safety.
Las cascade layers terminan la guerra de especificidad; las container queries dejan que la card mida su propio contenedor. Una ruta de migración sin reescribir el CSS.
La mayoría de las APIs trata errores de forma inconsistente. Un patrón bien definido reduce bugs de integración y facilita el debug.
Escribir cache toma diez líneas. Decidir qué entra, cuándo expira y quién lo borra toma el resto del proyecto. Estrategias con Redis, headers de CDN y cache warming, con código.
Un escenario de rampa, un umbral p95 que hace fallar el build y k6 en el CI. El load testing convierte la latencia en un número que el equipo defiende e investiga con traces.
La cobertura de unit test no recorre el camino del cliente. Playwright cubre login, checkout y estados de error con fixtures, Page Objects y CI. Ejemplos listos para copiar.
Estado remoto con lock, módulos versionados y plan en el PR. Un pipeline Terraform que convierte el drift de consola en un diff revisable antes de cada merge.
Cinco squads en un repositorio traban merge y build. Micro-frontends liberan al equipo y cobran precio en runtime, deploy y debug. Criterios de adopción y costos reales.
La inyección y el control de acceso roto lideran el OWASP Top 10. La prueba de dos usuarios, CSP, Argon2 y el checklist que cierra un riesgo real por vez en el CI.
Un proveedor externo cae y tu cola se infla. Circuit breaker, retry con jitter, bulkhead y timeout: los cuatro patrones que cortan una cascada de fallos.
Token bucket, fixed window y sliding log resuelven problemas distintos. Clave por IP, usuario o API key, headers que el cliente lee y límite por ruta. Código con Redis y express-rate-limit.
Authorization code con PKCE reemplazó el flujo implícito. El flujo completo, la validación del ID token y el patrón BFF para SPA sin tokens en localStorage.
Merge escribe un commit con dos padres y preserva el historial tal como ocurrió. Rebase repasa tus commits sobre main y deja la línea de tiempo recta. Las reglas de cada uno y el flujo de PR que combina los dos.
Un EXPLAIN ANALYZE honesto revela el rastreo de dos millones de filas. Guía de B-tree, GIN para JSONB, índice parcial y cubridor en PostgreSQL en producción.
Una línea JSON por evento, campos fijos en toda la aplicación y request_id propagado hasta el último servicio. El schema de log, la implementación con pino y el límite entre log y métrica.
Un access token de 15 minutos, un refresh token en cookie HttpOnly, una lista de revocación en Redis y validación de claims en cada request. El flujo completo en Node, del login al logout.
Los cinco principios, el patrón de código que viola cada uno y la versión que lo resuelve. Dónde rinde SOLID en un proyecto y dónde se vuelve capa inútil.
El review de un Staff Engineer existe para desarrollar al equipo. Cuatro anti-patterns que lo debilitan, el formato de comentario que transfiere razonamiento y cuándo dejar el teclado y hablar.
Cinco patterns que aparecen en producción, implementados en TypeScript: Repository, Strategy, Observer, Decorator y Builder. Más el límite donde ninguno de ellos vale la pena.
Karpathy popularizó el término en 2024: describir la tarea, aceptar el código y seguir. El método rinde en prototipos. En producción con usuarios reales, el costo del código que nadie leyó aparece como outage, datos expuestos y guardia sin contexto.
Un workflow de 88 líneas que corre lint, typecheck, tests, build y deploy. Cada sección explica una elección de configuración y el problema que resuelve.
Cada flag del strict mode captura una categoría de bug en runtime. Las cuatro flags del strict, dos fuera que valen el costo, y una migración de legado que no frena al equipo.
El monorepo resuelve compartir código y refactors atómicos, y cobra setup de tooling y disciplina en la frontera de paquetes. Criterios de adopción, Turborepo contra Nx, y estructura de carpetas.
La cobertura cuenta líneas ejecutadas, no bugs detectados por la suite. Comportamiento sobre implementación, los casos que importan y tres números que miden confianza.
Server Component no envía JavaScript al cliente. Client Component necesita state, effects y handler. Reglas de composición, props que serializan y la cascata de await que cuesta segundos por request.
Un PR revisable en 20 minutos: título con tipo, descripción con qué/por qué/cómo revisar, una responsabilidad, formateo separado de la lógica, evidencia visual. Checklist antes de pedir revisión.
Cobertura de código nuevo, lint, análisis estático y type safety como condición de merge. Tres calibraciones para cuando el asistente de IA abre más PRs de los que el equipo revisa.