Escritura
Blog
Notas desde las trincheras: Ruby, JavaScript, arquitectura backend y experimentos con IA.
2026
-
Svelte 5 desde React: menos código, menos excusas
Construí el dashboard de Inboxed con Svelte 5 viniendo de años en React. Aquí lo que me sorprendió, lo que me atrapó, y por qué no lo cambiaría para este proyecto.
-
Ruby 4.0 y async: el event loop que le faltaba a Ruby
Ruby 4.0 (diciembre 2025) entregó lo que Ruby 3.x prometió: I/O concurrente real con Fibers, Ractor::Port para paralelismo sin drama, y ZJIT que optimiza workloads concurrentes. Te explico cómo funciona, cómo se compara con Node.js, y si puedes usarlo con tu app Rails hoy.
-
SolidJS: el sabor de React sin la amargura
SolidJS tiene la sintaxis de React, la performance de Svelte, y no tiene virtual DOM. Si ya sabes React, lo aprendes en un día — y probablemente no quieras volver.
-
Kamal: deploy de Rails sin la complejidad de Kubernetes
Kamal (antes MRSK) llega por defecto con Rails 8 y usa Docker en cualquier VPS sin necesitar Kubernetes. Qué problema resuelve, cómo se compara con Heroku/Fly/Render, zero-downtime deploys, y cuándo todavía tiene sentido una plataforma managed.
-
Hotwire en 2026: ¿el sueño Rails sin JS sigue vivo?
Evaluación honesta después de construir features reales con Turbo y Stimulus. Dónde Hotwire genuinamente brilla, dónde empieza a pelearse contigo, y cuándo el tradeoff vale la pena vs 'solo usa React'.
-
Cómo estructuro una app Rails en 2026
No es 'el Rails way' y tampoco DDD desde cero. Un approach pragmático después de 10+ años: dónde va la lógica de negocio, cómo usar concerns sin crear un desastre, y cómo los nuevos defaults de Rails 8 cambian las decisiones de arquitectura.
2025
-
Caching en Rails: de cache do a Redis y de vuelta
Rails 8 trae Solid Cache — un backend de caché respaldado por DB sin Redis. Cubrimos el stack completo: fragment caching, Rails.cache, HTTP caching con ETags, Russian doll caching, e invalidación.
-
GitHub Actions: CI/CD sin el drama
Una guía de supervivencia, no de referencia. Los conceptos que más tardan en clickear: jobs vs steps vs workflows, needs para ordering, matrix builds, caching correcto, y cómo debuggear sin hacer 40 commits.
-
Service objects en Rails: cuándo ayudan y cuándo son solo indirection
La comunidad Rails lleva una década debatiendo sobre service objects y los dos lados tienen razón a veces. Qué problema resuelven realmente, las diferentes formas de implementarlos, y cuándo un módulo simple es suficiente.
-
Background jobs en Ruby que no te vuelvan a perseguir
Todos saben usar Sidekiq básico. Lo que nadie te enseña: idempotencia, manejo de errores que no sea retry ciego, timeouts, cómo testear sin mockear todo, y patrones para jobs que llaman APIs externas.
-
Rate limiting de APIs: más que solo contar requests
Fixed window, sliding window, token bucket — tradeoffs reales, no solo definiciones. Dónde enforcer (nginx, app layer, Redis), cómo manejar sistemas distribuidos, y rate limiting por complejidad de operación.
-
pgvector: usando PostgreSQL como vector store
pgvector lleva en producción desde 2023 y la mayoría de las apps no necesitan Pinecone ni Weaviate. Cómo instalar la extensión, guardar embeddings, buscar por similitud, y cuándo sí necesitas un vector DB dedicado.
-
El problema N+1 en ActiveRecord: tres formas de resolverlo, una de prevenirlo
Todos conocen includes. Pero hay diferencias reales entre includes, preload, y eager_load, y scopes que crean N+1 para quien los usa sin saberlo. Acá está el mapa completo.
-
Event-driven design: cuándo tu app debe dejar de hablarse a sí misma
Intro práctica a EDA desde un ángulo DDD. Cuándo las llamadas directas se vuelven un problema, qué son los domain events, y cómo implementarlos en Rails sin pasarte de Kafka cuando no lo necesitas.
-
API versioning: por qué el versionado en URL no está siempre mal
Header versioning es más correcto en teoría. URL versioning es lo que los equipos realmente shippen de forma confiable. Las cuatro estrategias, sus tradeoffs reales, y cómo manejar deprecación sin romper clientes.
-
LLM context windows: por qué tu feature de IA es más lento de lo que necesita ser
El tamaño del contexto afecta directamente latencia y costo. Cómo medir qué estás enviando realmente, cuándo chunking vs summarization vs retrieval, y por qué streaming cambia el UX aunque el tiempo total sea el mismo.
-
GraphQL en producción: lo que los tutoriales no cubren
N+1 es el problema obvio. Pero hay toda una lista de cosas que te muerden tres meses después de lanzar: pagination, schema versioning, rate limiting por complejidad. Acá está el mapa.
-
Rust ownership para devs que crecieron con garbage collectors
No es otro tutorial de Rust. Es el cambio de modelo mental para alguien que viene de Ruby o JavaScript: por qué el borrow checker existe, las tres reglas sin jerga de CS, y cuándo Rust es la herramienta correcta.
-
El event loop de Node.js: el modelo mental que finalmente lo hace clickear
La mayoría de explicaciones del event loop son demasiado abstractas o demasiado de bajo nivel. Esta es la versión que conecta con problemas reales: por qué setTimeout(fn, 0) no es 0ms, qué es la microtask queue, y por qué el código síncrono bloquea todo.
-
TypeScript `satisfies`: el operador que debí usar antes
satisfies llegó en TypeScript 4.9 y la mayoría de devs sigue usando as o anotaciones explícitas. La diferencia es sutil pero evita bugs silenciosos que as nunca va a atrapar.
-
Solid Queue: background jobs sin Redis
Rails 8 llega con Solid Queue como backend por defecto para Active Job. Es un queue engine respaldado por tu base de datos. Veamos si es suficiente para tu app.
-
Docker multi-stage builds: el cambio que redujo el tamaño de nuestra imagen un 70%
Un Dockerfile naïve para una app Ruby o Node puede generar imágenes de 2GB. Con multi-stage builds, la misma app puede quedar en 200MB. Te muestro cómo.
-
ActiveRecord scopes vs class methods: cuándo usar cada uno
Parecen intercambiables hasta que no lo son. La diferencia entre scope y class method no es solo de estilo — afecta cómo se comporta el encadenamiento y qué pasa cuando el resultado es nil.
-
PostgreSQL EXPLAIN ANALYZE: leyendo lo que tus queries realmente hacen
La mayoría de los devs corren queries sin leer un solo plan de ejecución. Acá te enseño a leer EXPLAIN ANALYZE sin necesitar conocimientos de DBA.
-
Debugging memory leaks en Ruby sin perder la cabeza
El memory bloat en Rails llega despacio y de repente tus pods están reiniciándose cada hora. Acá está el toolkit práctico para encontrar y matar los leaks.
-
DeepSeek R1 y lo que el momento open-source en LLMs realmente significa
DeepSeek R1 llegó el 20 de enero de 2025 y rompió el supuesto de que los modelos de razonamiento frontier requieren clusters de $100M. Qué cambió, qué no, y qué significa para developers.
-
Ruby 3.4: las features que vale la pena conocer
Ruby 3.4 salió el 25 de diciembre de 2024. No todo el changelog merece tu atención — acá está lo que realmente cambia cómo escribes código.
-
Docker: Rapido y Furioso
Si Docker fuera una pelicula, seria esa escena donde presionas el boton de NOS y te mueves a 300 km/hr. Ajusta el cinturon, porque este crash course va directo al grano para que containerices tu codigo como un verdadero Toretto.
-
Tailwind CSS v4: lo que realmente cambió y por qué importa
Tailwind v4 salió el 22 de enero de 2025 y rompió bastantes cosas. Te cuento qué cambió, por qué, y cómo migrar sin morir en el intento.
-
Ruby, Concurrencia y Paralelismo: La Verdad
Si creias que los threads te darian paralelismo real en Ruby, oops. Hay formas de sacarle jugo a concurrencia y paralelismo con Fibers, Processes y Ractors.
-
Blocks, Lambdas y Procs: Entendiendo la magia en Ruby
Si cada vez que te preguntan la diferencia entre blocks, procs y lambdas en Ruby te quedas dudando, este post es para ti. Vamos a ver que son, como funcionan y en que se diferencian, con ejemplos practicos y comparaciones para elegir bien en cada caso.
-
Ruby Object Model: Un Recordatorio Rapido
Todo en Ruby es un objeto, incluidas las clases mismas. Exploremos como funciona su jerarquia, singleton classes, method lookup y metaprogramacion de forma practica para el dia a dia.