$ git log --grep="craft"
El oficio
Cómo trabajamos, contratamos y discutimos sobre código.
13 posts
- 3 min de lectura
El primer usuario siempre paga
Un sistema que se usa dos veces por semana está frío las dos veces. Estar caliente es una propiedad del tráfico y no del código, y los caminos que menos usas son los que más necesitas que funcionen.
- 5 min de lectura
Tu presupuesto de reintentos dura más que la paciencia de tus usuarios
Un panel interno fallaba de forma intermitente. Cinco causas plausibles medidas y descartadas, una trampa de medición creada por mí mismo, y una base de datos ociosa 180 horas de 182.
- 5 min de lectura
Salí a producción dos días antes y me salté el plan de pruebas
Una semana después de publicar un post sobre disciplina de releases, la corrección honesta: el release anterior salió antes de tiempo, sin el recorrido humano. Y los seis defectos de mi propio runbook que solo ejecutarlo pudo encontrar.
- 3 min de lectura
Integrar no es desplegar
Integrado, desplegado y verificado son tres estados distintos, y una sola palabra los esconde a los tres. Las dos brechas entre ellos, con un caso real de este mismo blog.
- 5 min de lectura
Todos los lunes despliego para nadie
Un tren de releases semanal, un congelamiento, un sábado de pruebas y una lista de treinta y cinco casillas — para una plataforma que todavía no tiene clientes pagando en producción. Por qué la ceremonia llegó antes que el riesgo.
- 6 min de lectura
Tus pruebas corren en un mundo que no existe
Nueve días operando el control de acceso de un evento real produjeron cero builds fallidos y cinco sorpresas. Ninguna era un bug: eran categorías enteras de falla que una suite no puede ver por construcción.
- 6 min de lectura
Nada estaba roto. Costaba $900 al mes.
Ninguna alerta se disparó, ningún dashboard se puso rojo, ningún usuario se quejó. La infraestructura estaba sana, ociosa y era cara — y lo único que terminó avisándome fue una factura.
- 6 min de lectura
La IA no lo publicó. Tú sí.
Aprobé features escritas por IA que cruzaron en silencio mis propios límites de arquitectura, y pasé dos días deshaciéndolo. El agente no se equivocó — la regla que rompió nunca había salido de mi cabeza.
- 6 min de lectura
Le puse una terminal a mi blog. La migración no era el punto.
Hace siete días este blog era una pestaña de un website builder que evitaba abrir. Desde entonces le creció una terminal, un segundo idioma y un pipeline de publicación. La mudanza fue una tarde; lo que vino después es el argumento real.
- 6 min de lectura
Los roles no son permisos: por qué esconder una página no es un guard
El item del menú desapareció, así que la funcionalidad estaba segura. Después alguien escribió la URL. Lo que la autorización multi-tenant me enseñó sobre lo que un usuario ve, lo que es, y lo que realmente puede hacer.
- 5 min de lectura
Overengineering: ¿visión de futuro, ego, o solo una forma de aprender?
Construí 25 microservicios a sabiendas para un prototipo que pudo ser un monolito. Por qué lo volvería a hacer — y cuándo tú no deberías.
- 5 min de lectura
La relación amor-odio con las entrevistas de código: por qué la velocidad le está ganando a la calidad
Árboles binarios, colas de mensajes imaginarias y cero autocompletado: lo que miden las entrevistas de código versus lo que de verdad es el trabajo.
- 3 min de lectura
Velocidad vs. código limpio: lecciones de C# y JavaScript/TypeScript
¿Lo entregas hoy o lo haces mantenible para mañana? Cómo el lenguaje en el que trabajas te empuja en silencio hacia un lado del trade-off.