<script data-pm-proxy="intercept"></script><?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[De CERO a SENIOR]]></title><description><![CDATA[🚀 de CERO a SENIOR es la newsletter para programadores que no se conforman con quedarse en el camino. Cada semana comparto aprendizajes reales, consejos prácticos y reflexiones que te ayudarán a avanzar en tu carrera de desarrollador.]]></description><link>https://ceroasenior.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!eskL!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74ba1e0b-7f9b-4cef-97c1-484cabe7dd92_1024x1024.png</url><title>De CERO a SENIOR</title><link>https://ceroasenior.substack.com</link></image><generator>Substack</generator><lastBuildDate>Fri, 04 Sep 2026 10:53:20 GMT</lastBuildDate><atom:link href="/__u/ceroasenior.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Julián Campos]]></copyright><language><![CDATA[es]]></language><webMaster><![CDATA[ceroasenior@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[ceroasenior@substack.com]]></itunes:email><itunes:name><![CDATA[Julián Campos]]></itunes:name></itunes:owner><itunes:author><![CDATA[Julián Campos]]></itunes:author><googleplay:owner><![CDATA[ceroasenior@substack.com]]></googleplay:owner><googleplay:email><![CDATA[ceroasenior@substack.com]]></googleplay:email><googleplay:author><![CDATA[Julián Campos]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Desacoplamiento en programación: código mantenible y escalable]]></title><description><![CDATA[Aprende qu&#233; es el desacoplamiento, c&#243;mo evitar el c&#243;digo fr&#225;gil y dise&#241;ar software mantenible en la era de la IA.]]></description><link>https://ceroasenior.substack.com/p/desacoplamiento-en-programacion-codigo</link><guid isPermaLink="false">https://ceroasenior.substack.com/p/desacoplamiento-en-programacion-codigo</guid><dc:creator><![CDATA[Julián Campos]]></dc:creator><pubDate>Sun, 23 Aug 2026 08:00:37 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/df997cde-00e8-4175-8d47-ee893f925c80_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hay una pregunta muy clara que diferencia la mentalidad de un programador que solo busca que algo funcione de uno que dise&#241;a software para que dure:</p><p><em>Si dentro de seis meses tengo que cambiar este m&#243;dulo o la l&#243;gica de negocio evoluciona, &#191;cu&#225;ntos archivos voy a tener que romper?</em></p><p>Cuando est&#225;s empezando, la prioridad es que la pantalla pinte el dato, que el test pase en verde y cerrar la tarea antes de que termine la jornada. Pero a medida que avanzas como programador y buscas dirigir tu carrera hacia un perfil Senior, te das cuenta de que hacer que el c&#243;digo funcione es la parte f&#225;cil.</p><p><strong>Lo verdaderamente dif&#237;cil es hacer que siga funcionando cuando el proyecto cambia.</strong></p><p>Y para lograrlo solo hay una v&#237;a: dominar el arte del <strong>desacoplamiento</strong>.</p><p>Hoy, en de CERO a SENIOR, quiero explicarte c&#243;mo evitar la trampa del c&#243;digo fr&#225;gil y por qu&#233;, en plena era de la Inteligencia Artificial, este concepto de arquitectura es la mayor ventaja competitiva que vas a tener en tu carrera.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#191;Te gustan las entregas de CERO a SENIOR? No te olvides suscribirte y recibir&#225;s semanalmente un nuevo consejo para tu carrera como programador</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2><strong>La trampa del acoplamiento y el c&#243;digo de cristal</strong></h2><p>El acoplamiento es un s&#237;ntoma de c&#243;digo de mala calidad y que empezamos a observar en nuestro c&#243;digo cuando vemos que dos o m&#225;s componentes de un sistema est&#225;n tan entrelazados que cambiar uno te obliga a rastrear y modificar diez partes distintas.</p><p>Creo que todos hemos tenido ese t&#237;pico dolor de cabeza que nos empieza a dar cuando vemos que al modificar X parte del c&#243;digo, hay otras que empiezan a fallar por arte de magia.</p><p>Y es que si no te esfuerzas conscientemente por escribir c&#243;digo flexible, acabas construyendo un c&#243;digo de cristal, ese c&#243;digo que funciona perfectamente mientras nadie lo toque, pero al menor cambio, salta por los aires en producci&#243;n de la forma m&#225;s insospechada.</p><p>S&#237;, ese c&#243;digo que todos queremos evitar pero que antes o despu&#233;s, hemos terminado escribiendo desde nuestra inexperiencia.</p><p>Pero no te preocupes, que para evitar esto, te voy a contar una regla fundamental que empec&#233; a aplicar y me ayud&#243; mucho: la de <strong>separar las cosas que cambian por razones distintas.</strong></p><p>Dicho as&#237; suena muy sencillo, pero en el d&#237;a a d&#237;a es donde la mayor&#237;a fallamos.</p><p>Mezclamos la l&#243;gica que calcula un descuento con la consulta a la base de datos que trae al cliente, y de paso con el formato en el que vamos a enviar el correo de confirmaci&#243;n. Todo en la misma funci&#243;n o en la misma clase.</p><p>El problema de hacer esto es que cuando el departamento de marketing decide cambiar las reglas del descuento, terminas tocando sin querer la parte que env&#237;a los correos, y ah&#237; es donde aparece el desastre. Separar por razones de cambio significa que si cambia la forma de cobrar, toques el m&#243;dulo de cobros; y si cambia el dise&#241;o de la factura, toques el m&#243;dulo de plantillas.</p><p>Ni m&#225;s, ni menos.</p><p>Para poder aplicar esta regla con &#233;xito, lo primero que tuve que hacer fue aprender a detectar las trampas en las que ca&#237;a continuamente sin darme cuenta. Esos vicios de dise&#241;o que parecen inofensivos cuando est&#225;s picando c&#243;digo, pero que en realidad est&#225;n atando tu aplicaci&#243;n de pies y manos.</p><p>Hay tres escenarios en concreto que son aut&#233;nticas f&#225;bricas de acoplamiento y a los que deber&#237;as empezar a poner la lupa:</p><h2><strong>1. Los </strong><em><strong>Train Wrecks</strong></em><strong> y la Ley de Demeter</strong></h2><p>&#191;Has visto alguna vez una cadena de llamadas a m&#233;todos que parece una v&#237;a de tren sin fin? Algo como esto:</p><pre><code><code>$user-&gt;getOrders()-&gt;last()-&gt;getInvoice()-&gt;getPaymentMethod()-&gt;process();</code></code></pre><p>A simple vista, cuando est&#225;s empezando, te puede parecer c&#243;digo limpio, compacto e incluso elegante. La realidad es que es un choque de trenes en toda regla y una bomba de tiempo en tu repositorio.</p><p>El problema de esa l&#237;nea no es solo que si el &#250;ltimo pedido no existe la aplicaci&#243;n salta por los aires. El problema real es que ese m&#243;dulo necesita conocer la estructura interna de cuatro clases diferentes para ejecutar una simple acci&#243;n. Tu c&#243;digo &#8220;sabe demasiado&#8221; sobre c&#243;mo est&#225;n hechas las cosas por dentro en otros sitios. Si ma&#241;ana el equipo decide cambiar la forma en que se estructuran las facturas, esta l&#237;nea se rompe. Y la que est&#225; en aquel otro controlador, tambi&#233;n.</p><p>Para solucionar esto existe la <strong>Ley de Demeter</strong>, que a m&#237; me gusta resumir como el principio del m&#237;nimo conocimiento: <em>habla solo con tus amigos directos, nunca con los amigos de tus amigos</em>.</p><p>Tu c&#243;digo solo deber&#237;a conocer a sus dependencias inmediatas. Si necesitas procesar algo del usuario, p&#237;deselo al objeto User o a un servicio de pagos dedicado, pero jam&#225;s fuerces a tu capa superior a navegar por toda la arquitectura para conseguir un dato.</p><h2><strong>2. Los males de la globalizaci&#243;n y lo est&#225;tico</strong></h2><p>El estado global es probablemente la fuente m&#225;s traicionera de acoplamiento que existe en el desarrollo de software.</p><p>Variables globales, Singletons usados sin control o llamadas a m&#233;todos est&#225;ticos que leen la base de datos o la configuraci&#243;n en cualquier rinc&#243;n de tu aplicaci&#243;n crean hilos invisibles por todo el proyecto.</p><p>Son como cables pelados que cruzan la pared sin que nadie los vea.</p><p>Este tipo de c&#243;digo provoca que probar un m&#243;dulo de forma aislada &#8212;hacer un simple unit test&#8212; se convierta en un infierno, porque el comportamiento de lo que est&#225;s probando depende m&#225;gicamente de lo que haya hecho otro componente cinco minutos antes en otro lugar de la memoria.</p><p>Cuando buscas un c&#243;digo m&#225;s profesional y con mejor arquitectura te das cuenta de que la <strong>inyecci&#243;n de dependencias</strong> no es simplemente tener ganas de escribir m&#225;s c&#243;digo: es la forma de hacer que cada pieza sea aut&#243;noma y transparente.</p><p>Si una clase necesita algo para funcionar, p&#237;deselo en el constructor. No dejes que salga a buscarlo a ciegas al &#225;mbito global.</p><h2><strong>3. El peligro oculto de la herencia</strong></h2><p>Durante muchos a&#241;os, en la universidad o en los cursos de programaci&#243;n, nos vendieron la herencia como el pilar absoluto de la Programaci&#243;n Orientada a Objetos. Te ense&#241;aban el t&#237;pico ejemplo del Animal y el Perro y todo parec&#237;a encajar perfectamente.</p><p>La realidad en proyectos de negocio reales es muy distinta: <strong>la herencia a&#241;ade un acoplamiento feroz</strong>.</p><p>Cuando creas una subclase que hereda de una clase base, esa subclase queda encadenada para siempre a los detalles de implementaci&#243;n de su padre.</p><p>Cualquier modificaci&#243;n que hagas en la clase base para solucionar un problema concreto puede romper inesperadamente el comportamiento de tres o cuatro subclases que ni recordabas que exist&#237;an en otra parte del sistema.</p><p>Pero&#8230; &#191;c&#243;mo solucionamos esto?</p><p>Pues priorizando casi siempre la <strong>composici&#243;n sobre la herencia</strong>.</p><p>No hagas que tu clase <em>sea algo</em>, haz que tu clase <em>tenga algo</em>. Modulas mejor, reduces el impacto de los cambios y ganas una flexibilidad brutal cuando las reglas de negocio evolucionan.</p><h2><strong>Por qu&#233; la IA te est&#225; preparando un campo de minas</strong></h2><p>No puedo hablar de arquitectura hoy sin mencionar lo que est&#225; pasando en nuestro d&#237;a a d&#237;a con la Inteligencia Artificial porque estamos viviendo un momento en el que generar c&#243;digo es rid&#237;culamente f&#225;cil y r&#225;pido.</p><p>Le pides a un LLM una funci&#243;n, te devuelve la respuesta en tres segundos, la pegas, ves que funciona y sigues a la siguiente tarea. Es la era del <em>vibecoding</em>.</p><p>Pero aqu&#237; est&#225; el verdadero peligro para tu carrera si quieres construir software serio: <strong>la IA tiende de forma natural al acoplamiento</strong>.</p><p>Los modelos de lenguaje est&#225;n optimizados para darte la soluci&#243;n m&#225;s r&#225;pida, directa y funcional al problema concreto que le acabas de plantear en el <em>prompt</em>.</p><p>La IA no se va a parar a pensar de forma espont&#225;nea en la arquitectura global de tu proyecto a tres a&#241;os vista.</p><ul><li><p>Te crear&#225; funciones que invocan directamente m&#233;todos est&#225;ticos para ahorrar l&#237;neas de c&#243;digo.</p></li><li><p>Te sugerir&#225; herencias profundas porque es el camino m&#225;s obvio para resolver el caso puntual.</p></li><li><p>Acoplar&#225; la capa de presentaci&#243;n o las vistas directamente con la base de datos sin despeinarse.</p></li></ul><p>Si utilizas estas herramientas sin tener estos conceptos de arquitectura grabados a fuego en tu cabeza, te vas a convertir en un mero copiloto que valida c&#243;digo que parece correcto hoy, pero que est&#225; dejando una deuda t&#233;cnica devastadora para ma&#241;ana.</p><p>Las aplicaciones &#8220;vibecodeadas&#8221; sin supervisi&#243;n arquitect&#243;nica van a ser el c&#243;digo heredado m&#225;s dif&#237;cil e infame de mantener de los pr&#243;ximos a&#241;os.</p><p>La IA es un motor de velocidad incre&#237;ble para ejecutar, pero la responsabilidad del dise&#241;o y de la salud del sistema sigue siendo, nos guste o no, 100% tuya.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscr&#237;bete ahora&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/subscribe"><span>Suscr&#237;bete ahora</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/desacoplamiento-en-programacion-codigo?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Compartir&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/desacoplamiento-en-programacion-codigo?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Compartir</span></a></p><div><hr></div><h2><strong>Escribir c&#243;digo para humanos</strong></h2><p>Escribir c&#243;digo desacoplado requiere m&#225;s esfuerzo inicial, no te voy a enga&#241;ar. Requiere frenar el impulso de picar a lo loco, tomarte un caf&#233; y pensar un par de minutos antes de crear una clase o definir un m&#243;dulo.</p><p>Cualquier programador, incluso con poca experiencia o ayudado por una IA, puede escribir c&#243;digo que una m&#225;quina entienda y ejecute. Sin embargo, <strong>lo que define a un verdadero Senior es la capacidad de escribir c&#243;digo que los humanos puedan entender, mantener y evolucionar con el paso del tiempo sin sufrir en el proceso.</strong></p><p>La pr&#243;xima vez que vayas a cerrar un <em>pull request</em> o a dar por buena una funcionalidad, hazte la pregunta con la que empezamos hoy:</p><p><em>Si esto cambia ma&#241;ana, &#191;cu&#225;ntas cosas voy a romper?</em></p><p>Si la respuesta es una sola, vas por el buen camino.</p><p>Nos leemos en la siguiente entrega,<br>Juli&#225;n.</p>]]></content:encoded></item><item><title><![CDATA[ El error que te hace trabajar gratis]]></title><description><![CDATA[La raz&#243;n por la que siempre terminas trabajando horas de m&#225;s.]]></description><link>https://ceroasenior.substack.com/p/el-error-que-te-hace-trabajar-gratis</link><guid isPermaLink="false">https://ceroasenior.substack.com/p/el-error-que-te-hace-trabajar-gratis</guid><dc:creator><![CDATA[Julián Campos]]></dc:creator><pubDate>Sun, 09 Aug 2026 08:54:32 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/deaf34a9-ebb5-4bfd-85fd-9854368980a0_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1><strong>El error que te hace trabajar gratis</strong></h1><p>Durante mucho tiempo, ten&#237;a entendido que durante el verano el ritmo de trabajo, y por ende las oportunidades, bajaba y era una &#233;poca m&#180;sa tranquila... pero la realidad es que este julio y agosto est&#225; siendo todo lo contrario.</p><p>Me estoy encontrando con un volumen de trabajo que me est&#225; constando gestionar, presupuestos grandes sobre la mesa (voy a batir mi r&#233;cord de facturaci&#243;n mensual en el mes de agosto) y, para sorpresa de nadie... unas cuantas sorpresas desagradables al empezar con ciertos proyectos.</p><p>Proyectos con c&#243;digo <em>legacy, </em>proyectos en el que el alcance al final era bastante m&#225;s del que dec&#237;a el cliente al principio... y proyectos que se alargan una eternidad.</p><p>Estar en el barro estos d&#237;as gestionando todo este volumen me ha llevado directo a una reflexi&#243;n que quiero compartir contigo en esta entrega de CERO a SENIOR y trata sobre c&#243;mo valoramos nuestro trabajo. Sobre el arte (y la ciencia) de estimar y presupuestar bien.</p><p>Y es que, hace unos a&#241;os, cuando trabajaba como consultor en Airbus, aprend&#237; una lecci&#243;n a golpes que se me qued&#243; grabada a fuego.</p><p>Y es que en ese entorno aeron&#225;utico, los errores de estimaci&#243;n no significan &#8220;bueno, pues le echamos un par de horas m&#225;s esta tarde&#8221;.</p><p>Significan cuellos de botella en cadena, sobrecostes, equipos enteros bloqueados y revisiones de seguridad infinitas.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#191;Te gustan las entregas de CERO a SENIOR? No te olvides suscribirte y recibir&#225;s semanalmente un nuevo consejo para tu carrera como programador</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p>Esos 3 a&#241;os me sirvieron para entender que estimar no es adivinar el futuro con una bola de cristal, sino saber anticipar los problemas invisibles que el c&#243;digo todav&#237;a no te ha ense&#241;ado.</p><p>Y no es algo que sea espec&#237;fico de Airbus o de una determinada empresa, pues tiempo despu&#233;s, cuando me lanc&#233; de lleno al mundo freelance y al desarrollo web, me di cuenta de que el escenario cambia, pero el problema es exactamente el mismo.</p><p>Da igual si est&#225;s en una gran multinacional evaluando la magnitud de un proyecto o si est&#225;s en tu mesa como freelance preparando un presupuesto para un e-commerce: <strong>estimar mal te destruye.</strong></p><p>Si est&#225;s en empresa privada, estimar mal destruye la confianza de tu equipo y quema a tus compa&#241;eros en sprints imposibles.</p><p>Si eres freelance, estimar mal se traduce directamente en trabajar gratis a partir del segundo mes y desangrar tu margen de beneficio.</p><p>Es por eso que hoy quiero hablarte de por qu&#233; la capacidad de estimar es uno de los mayores divisores entre un perfil Junior y un perfil Senior.</p><h2><strong>La ilusi&#243;n del camino recto</strong></h2><p>Cuando alguien empieza en esta profesi&#243;n (e incluso muchos perfiles intermedios), tiende a estimar pensando en el escenario ideal. El famoso <em>Happy Path</em>.</p><p>El proceso mental suele ser este:</p><ol><li><p><strong>Leo el ticket o la lista de requerimientos.</strong></p></li><li><p><strong>Pienso en cu&#225;nto tardar&#237;a en escribir esa l&#243;gica en un archivo limpio si nada fallara.</strong></p></li><li><p><strong>Multiplico por dos por si acaso.</strong></p></li><li><p><strong>Entrego la cifra.</strong></p></li></ol><p>Esto es un error cl&#225;sico.</p><p>Es asumir que el desarrollo de software es como construir una pared de ladrillos, donde sabes exactamente cu&#225;nto tarda cada pieza.</p><p>Pero el software no es una pared; es un ecosistema vivo.</p><p>Lo que la experiencia me ha ense&#241;ado en estos a&#241;os es que el tiempo de escribir c&#243;digo suele ser la parte m&#225;s peque&#241;a del proyecto. Lo que de verdad consume tiempo es todo lo dem&#225;s:</p><ul><li><p><strong>El contexto no documentado:</strong> la integraci&#243;n con esa API externa que resulta que no sigue la documentaci&#243;n oficial y devuelve errores aleatorios.</p></li><li><p><strong>Los casos de borde:</strong> qu&#233; pasa con los datos de clientes antiguos cuando migras un sistema heredado o cambias una estructura de base de datos.</p></li><li><p><strong>La falta de criterio del cliente/negocio:</strong> las reuniones para definir qu&#233; significa realmente <em>&#8220;queremos que sea f&#225;cil de usar&#8221;</em> o gestionar los cambios de opini&#243;n a mitad de desarrollo.</p></li><li><p><strong>La infraestructura:</strong> despliegues, permisos, entornos de staging que no replican producci&#243;n y tests que fallan solo en el servidor de integraci&#243;n continua.</p></li></ul><h2><strong>El efecto iceberg</strong></h2><p>En Airbus, cuando nos ped&#237;an estimar la implementaci&#243;n de un cambio en un sistema, la parte de c&#243;digo pod&#237;a llevar dos d&#237;as. Sin embargo, la estimaci&#243;n real era de tres semanas.</p><p>&#191;Por qu&#233;? Por el famoso efecto iceberg, donde la gran parte del trabajo est&#225; debajo del agua, sin ser visible.</p><p>La auditor&#237;a de impacto, las pruebas de regresi&#243;n, las validaciones de seguridad y los procesos de despliegue... si solo estimas el c&#243;digo, te est&#225;s estrellando contra el hielo.</p><p>A&#241;os despu&#233;s, aplicando esto como freelance, me he reencontrado con el mismo iceberg.</p><p>Si un cliente te pide migrar una tienda online a otra plataforma tienes que plantearte preguntas como:</p><ul><li><p>&#191;Qu&#233; pasa con la estructura de las bases de datos de origen?</p></li><li><p>&#191;C&#243;mo mapeamos las colecciones y categor&#237;as sin perder l&#243;gica de negocio?</p></li><li><p>&#191;Qu&#233; hacemos con los 8.000 redireccionamientos URL para no hundir el SEO de un negocio que factura miles de euros al mes?</p></li><li><p>&#191;C&#243;mo migramos el hist&#243;rico de clientes sin interrumpir la facturaci&#243;n diaria?</p></li></ul><p>La diferencia entre tardar una semana (y romper la web) o tardar un mes (y hacerlo bien) no est&#225; en lo r&#225;pido que tecleas. <strong>Est&#225; en la experiencia de haber lidiado con esto antes.</strong></p><h2><strong>C&#243;mo debemos estimar</strong></h2><p>Estimar bien no es un talento innato; es una habilidad que se entrena acumulando horas de vuelo y haci&#233;ndote las preguntas inc&#243;modas <em>antes</em> de empezar a picar c&#243;digo.</p><p>Si quieres empezar a estimar como un Senior, cambia tu enfoque mental a la hora de abordar un proyecto:</p><h4><strong>1. Separa la ejecuci&#243;n de la incertidumbre</strong></h4><p>Un Senior no da una cifra &#250;nica. Divide el proyecto en bloques y eval&#250;a el nivel de riesgo de cada uno. Lo que ya has hecho cien veces se estima con precisi&#243;n. Lo que implica una tecnolog&#237;a nueva o una integraci&#243;n de terceros desconocida no se estima en horas de c&#243;digo; se estima asignando primero un bloque de investigaci&#243;n para reducir la incertidumbre.</p><h4><strong>2. Dise&#241;a antes de presupuestar</strong></h4><p>No puedes estimar lo que no entiendes. Si est&#225;s como freelance, nunca env&#237;es una propuesta econ&#243;mica tras una llamada de 15 minutos. Dedica tiempo a auditar, a bajar a la base de datos, a revisar el sistema actual y a entender los dolores reales. Si no sabes qu&#233; hay debajo de la alfombra, vas a terminar pagando t&#250; la limpieza.</p><h4><strong>3. Mide la complejidad de la comunicaci&#243;n</strong></h4><p>Si en el proyecto hay 5 departamentos implicados, 3 agencias externas y un cliente indeciso, el desarrollo va a tardar el triple. No por el c&#243;digo, sino por la burocracia y los bucles de feedback. Un Senior estima el factor humano de la misma forma que estima la arquitectura.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscr&#237;bete ahora&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/subscribe"><span>Suscr&#237;bete ahora</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/el-error-que-te-hace-trabajar-gratis?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Compartir&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/el-error-que-te-hace-trabajar-gratis?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Compartir</span></a></p><div><hr></div><h2><strong>Qu&#233; te debes quedar de esta entrega</strong></h2><p>Aprender a estimar el trabajo real es lo que te convierte en un profesional respetado.</p><p>En la empresa privada, es lo que hace que la directiva conf&#237;e en tus criterios t&#233;cnicos porque sabes cumplir lo que prometes. En el mundo freelance, es lo que separa a quienes viven ahogados apagando fuegos por cuatro duros de quienes entregan proyectos s&#243;lidos, protegen su margen de beneficio y dan paz mental a sus clientes.</p><p>Deja de medir los proyectos por las l&#237;neas de c&#243;digo que vas a escribir. Empieza a medirlos por los problemas que vas a tener que resolver para que todo funcione sin hacer ruido.</p><p>Menos intuici&#243;n y m&#225;s criterio de ingenier&#237;a.</p><p>Nos leemos en la pr&#243;xima,</p><p>Juli&#225;n.</p>]]></content:encoded></item><item><title><![CDATA[De ChatGPT a los agentes de IA]]></title><description><![CDATA[Tests, contexto y verificaci&#243;n: las 3 habilidades que necesitas para delegar c&#243;digo sin perder el control.]]></description><link>https://ceroasenior.substack.com/p/la-ia-no-te-hara-senior-pero-esto</link><guid isPermaLink="false">https://ceroasenior.substack.com/p/la-ia-no-te-hara-senior-pero-esto</guid><dc:creator><![CDATA[Julián Campos]]></dc:creator><pubDate>Sun, 19 Jul 2026 06:20:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/7eb81008-d4f5-4577-a144-32b5d0973526_1535x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#191;Te acuerdas de tus primeras semanas con ChatGPT?</p><p>Yo recuerdo perfectamente, aunque haya pasado ya 4 a&#241;os, las primeras veces que empec&#233; a usar ChatGPT para que me ayudara con mi trabajo.</p><p>En esa &#233;poca todav&#237;a trabajaba en una consultora de Francia, en proyectos de Airbus y fue una mezcla de fascinaci&#243;n absoluta y, para qu&#233; mentir, un punto de alivio. </p><p>Me gustar&#237;a decir que fui pionero y usaba la IA como un experto, pero mentir&#237;a.</p><p>Mi relaci&#243;n con la IA consist&#237;a en lo mismo que para el 99% de los desarrolladores: abrir una pesta&#241;a en el navegador, escribir un prompt y esperar con los dedos cruzados.</p><p>&#8220;Expl&#237;came este error&#8221;, &#8220;Refactoriza esta funci&#243;n&#8221;, &#8220;Optimiza esta consulta SQL&#8221;.</p><p>Y para qu&#233; mentir, eso ya parec&#237;a magia y ve&#237;a que iba a ser una herramienta bastante &#250;til (aunque tampoco me vi venir todo lo que ha ido pasando hasta ahora).</p><p>En esa &#233;poca ya me ahorr&#243;  horas de peleas con expresiones regulares y subconsultas cruzadas. Respuestas que antes nos costaba media tarde encontrar en Stack Overflow o buceando en documentaci&#243;n desactualizada&#8230;</p><p>De repente aparec&#237;an en la pantalla en tres segundos.</p><p>Pero mi romance id&#237;lico con Chatty (as&#237;, cari&#241;oso) me dur&#243; poco. Al cabo de unas semanas, la fricci&#243;n se hizo evidente: me di cuenta de que era imposible delegarle trabajo de verdad.</p><p>Me pasaba el d&#237;a haciendo de ni&#241;era del chat: copiaba un archivo de mi editor, lo pegaba en la web, a&#241;ad&#237;a contexto, correg&#237;a la alucinaci&#243;n de turno, me llevaba el c&#243;digo corregido de vuelta al IDE, ejecutaba los tests, fallaban, copiaba el error de la consola, volv&#237;a a la pesta&#241;a del navegador...</p><p>S&#237;, la IA respond&#237;a muy bien, pero el que segu&#237;a picando piedra y haciendo de &#8220;puente&#8221; era yo. </p><p>Me hab&#237;a convertido en un transportador de texto de lujo entre mi terminal y un chatbot. </p><p><strong>Estaba usando una tecnolog&#237;a revolucionaria como si fuera un buscador un poco m&#225;s espabilado.</strong></p><p>Hasta que pas&#243; el tiempo y lleg&#243; un punto inflexi&#243;n.</p><p>Y no, el verdadero cambio de chip no me lleg&#243; cuando los modelos se volvieron &#8220;m&#225;s inteligentes&#8221;. </p><p>Lleg&#243; cuando empec&#233; a usar herramientas con acceso real a mi entorno: c<strong>apaces de leer el repositorio, ejecutar comandos, corregir archivos, pasar la suite de tests y crear un commit por s&#237; mismas.</strong></p><p>Ah&#237; es donde dejas de hablar con un chatbot y empiezas a colaborar con un <strong>agente</strong>. No porque tenga m&#225;s memoria, sino porque ha dejado de limitarse a responder y ha empezado a trabajar.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#191;Te gustan las entregas de CERO a SENIOR? No te olvides suscribirte y recibir&#225;s semanalmente un nuevo consejo para tu carrera como programador</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>El empleado brillante en la habitaci&#243;n vac&#237;a</h2><p>Para entender la diferencia entre un LLM (un modelo de lenguaje) y un agente, me gusta usar una analog&#237;a muy de calle.</p><p>Imagina que contratas en tu equipo a un desarrollador junior que es un genio te&#243;rico absoluto. Se sabe de memoria las especificaciones del lenguaje, ha le&#237;do sobre todos los patrones de dise&#241;o y tiene una memoria fotogr&#225;fica.</p><p>Sin embargo, el primer d&#237;a de trabajo lo metes en una oficina completamente vac&#237;a. Sin mesa, ni ordenador, ni acceso a Slack, ni credenciales de GitHub, ni de bases de datos. Solo tiene una silla en el centro de la habitaci&#243;n y a ti, que entras de vez en cuando a hacerle preguntas.</p><p>Si le preguntas c&#243;mo implementar un algoritmo de ordenaci&#243;n complejo, te lo dir&#225; al toque. Pero si le pides que arregle un bug en producci&#243;n, <strong>no podr&#225; hacer absolutamente nada</strong>. No puede ver el c&#243;digo, no puede ejecutar los tests, no puede experimentar. Ese desarrollador brillante en la habitaci&#243;n vac&#237;a es un LLM.</p><p>Un <strong>agente</strong> es ese mismo desarrollador, pero al que finalmente le hemos dado un escritorio, acceso al repositorio, una consola para ejecutar comandos y un entorno de pruebas.</p><p>Un agente no funciona mediante una &#250;nica pregunta y respuesta, funciona mediante un <strong>bucle de retroalimentaci&#243;n continuo (Agentic Workflow)</strong>:</p><ul><li><p><strong>Recibe un objetivo:</strong> &#8220;Corrige el fallo en la pasarela de pago que duplica transacciones&#8221;.</p></li><li><p><strong>Planifica:</strong> desglosa la tarea en pasos peque&#241;os para no perderse.</p></li><li><p><strong>Usa herramientas:</strong> lee archivos, busca referencias en el c&#243;digo y modifica lo necesario.</p></li><li><p><strong>Verifica:</strong> ejecuta los tests autom&#225;ticamente para comprobar si ha roto algo.</p></li><li><p><strong>Corrige:</strong> si los tests fallan, lee el error, planifica y vuelve a intentar hasta que todo est&#225; en verde.</p></li></ul><p><strong>Los LLM responden, los agentes trabajan.</strong></p><h2>La trampa de la dependencia: mi mayor miedo para la nueva generaci&#243;n</h2><p>Si est&#225;s empezando en esta profesi&#243;n, tienes a tu disposici&#243;n el mayor superpoder de la historia del desarrollo de software. Pero quiero ser muy sincero contigo: <strong>tambi&#233;n tienes delante la trampa m&#225;s peligrosa para tu carrera</strong>.</p><p>He visto a muchos desarrolladores junior usar la IA como un generador de c&#243;digo m&#225;gico. </p><p>Le piden una soluci&#243;n, copian el resultado sin mirarlo y lo pegan en su IDE cruzando los dedos para que funcione. Si funciona, pasan a otra cosa.</p><p><strong>Hacer esto es pegarte un tiro en el pie</strong>: te est&#225;s convirtiendo en un mero operador de chat y est&#225;s delegando el pensamiento cr&#237;tico, que es lo &#250;nico que te da valor como profesional. </p><p>El d&#237;a que tu empresa configure un agente aut&#243;nomo real para que haga ese flujo de &#8220;copiar y pegar&#8221; de forma autom&#225;tica tu rol dejar&#225; de tener sentido.</p><p>&#191;Y c&#243;mo evitarlo? <strong>Dejando de ser el usuario perezoso del agente para convertirte en el ingeniero que sabe dise&#241;arlo, guiarlo y auditarlo.</strong></p><p>Para m&#237;, entender c&#243;mo funcionan los agentes es la mejor escuela de ingenier&#237;a de software que existe hoy en d&#237;a. Para interactuar de forma madura con ellos y no depender ciegamente de sus respuestas, necesitas aplicar en tu d&#237;a a d&#237;a tres h&#225;bitos que acelerar&#225;n tu camino a senior:</p><h3>1. Dise&#241;a el arn&#233;s de pruebas antes de pedir c&#243;digo</h3><p><strong>Un agente no tiene criterio propio</strong> para saber si su trabajo es correcto a menos que tenga un marco objetivo contra el que contrastarlo. Si te acostumbras a escribir los tests unitarios, de integraci&#243;n y a configurar las reglas del linter <strong>antes de dejar</strong> que la IA proponga c&#243;digo, estar&#225;s haciendo verdadero trabajo de dise&#241;o. Estar&#225;s forzando a tu mente a entender el problema de ra&#237;z y a definir los casos l&#237;mite. El c&#243;digo de producci&#243;n acabar&#225; siendo un detalle de implementaci&#243;n que puedes delegar; el dise&#241;o del test es donde t&#250; demuestras tu nivel.</p><h3>2. Domina la gesti&#243;n del contexto y la arquitectura</h3><p>Un agente es extremadamente sensible al desorden. Si le inyectas un repositorio ca&#243;tico, lleno de dependencias circulares y c&#243;digo ultraacoplado, el agente se perder&#225;, alucinar&#225; y consumir&#225; tu presupuesto de tokens en minutos.</p><p>Aprender a modularizar tu c&#243;digo, a separar responsabilidades (aplicando el principio de responsabilidad &#250;nica) y a estructurar APIs limpias no solo har&#225; que tus agentes trabajen mejor; te obligar&#225; a ti a pensar como un arquitecto de software. Si aprendes a estructurar el contexto para que lo entienda una m&#225;quina, habr&#225;s aprendido a estructurar el sistema para que lo entienda cualquier humano de tu equipo.</p><h3>3. Aplica verificaci&#243;n determinista: conf&#237;a, pero verifica</h3><p>A veces nos da pereza leer c&#243;digo ajeno, y m&#225;s si lo ha escrito una m&#225;quina que parece muy segura de s&#237; misma. Pero el mayor error de un junior es asumir que si compila, est&#225; bien. Tienes que ser el revisor m&#225;s estricto de tu agente. </p><p>&#191;Esta soluci&#243;n escala? &#191;Maneja correctamente las excepciones de red? &#191;Introduce problemas de seguridad? </p><p>Forzarte a auditar y corregir el c&#243;digo generado por la IA entrenar&#225; tu capacidad de lectura y an&#225;lisis t&#233;cnico mucho m&#225;s r&#225;pido que si te pasaras el d&#237;a picando c&#243;digo repetitivo a mano.</p><div><hr></div><h2>[Workshop Online] De Developer a AI Champion: Harness Engineering</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!dwq-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F992dd8ea-346f-4312-8133-e821663157db_1200x630.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!dwq-!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F992dd8ea-346f-4312-8133-e821663157db_1200x630.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!dwq-!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F992dd8ea-346f-4312-8133-e821663157db_1200x630.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!dwq-!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F992dd8ea-346f-4312-8133-e821663157db_1200x630.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!dwq-!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F992dd8ea-346f-4312-8133-e821663157db_1200x630.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!dwq-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F992dd8ea-346f-4312-8133-e821663157db_1200x630.jpeg" width="500" height="262.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/992dd8ea-346f-4312-8133-e821663157db_1200x630.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:500,&quot;bytes&quot;:189435,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://ceroasenior.substack.com/i/207396491?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F992dd8ea-346f-4312-8133-e821663157db_1200x630.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!dwq-!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F992dd8ea-346f-4312-8133-e821663157db_1200x630.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!dwq-!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F992dd8ea-346f-4312-8133-e821663157db_1200x630.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!dwq-!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F992dd8ea-346f-4312-8133-e821663157db_1200x630.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!dwq-!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F992dd8ea-346f-4312-8133-e821663157db_1200x630.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Descubre c&#243;mo dar el salto de <strong>Developer a AI Champion</strong> aprendiendo a aplicar Harness Engineering para construir flujos ag&#233;nticos reales, fiables y listos para producci&#243;n. Ver&#225;s c&#243;mo dise&#241;ar el sistema que rodea a tus agentes (contexto, herramientas, restricciones, memoria y mecanismos de verificaci&#243;n) para que dejen de improvisar y produzcan resultados consistentes. Construiremos un caso pr&#225;ctico en directo donde aprender&#225;s a dise&#241;ar un Harness desde cero y a incorporar validaciones autom&#225;ticas antes de llevar los cambios a producci&#243;n. Adem&#225;s, te llevas el repositorio de c&#243;digo para aplicarlo en tus proyectos.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.lidr.co/workshop-harness-engineering/?utm_source=partnership_ceroasenior&amp;utm_medium=webinar_es_harness_engineering_07_26&quot;,&quot;text&quot;:&quot;Reg&#237;strate gratis aqu&#237;&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.lidr.co/workshop-harness-engineering/?utm_source=partnership_ceroasenior&amp;utm_medium=webinar_es_harness_engineering_07_26"><span>Reg&#237;strate gratis aqu&#237;</span></a></p><p><strong>&#161;Plazas limitadas!</strong></p><div><hr></div><h2>El arte del Harness Engineering y el protocolo MCP</h2><p>Cuando aceptas que el LLM es una pieza probabil&#237;stica (y a veces ca&#243;tica) dentro de un sistema que necesita ser determinista, dejas de hacer Prompt Engineering y empiezas a hacer <strong>Harness Engineering</strong>.</p><p>El <em>Harness</em> es todo el andamiaje de software tradicional que construimos alrededor del modelo para guiarlo, limitarlo y protegerlo. </p><p>Es el sistema que levanta un contenedor aislado para que el agente ejecute comandos de forma segura, el que valida que la salida del modelo cumpla estrictamente con un esquema JSON y el que controla el presupuesto para que el bucle no se quede colgado gastando dinero en bucles infinitos.</p><p>Para que este arn&#233;s funcione sin tener que escribir integraciones personalizadas para cada herramienta, la industria est&#225; adoptando el <strong>MCP.</strong></p><p>Aprender c&#243;mo funciona MCP y c&#243;mo exponer tus propios servicios bajo este protocolo es una de las habilidades m&#225;s valiosas y con m&#225;s futuro que puedes adquirir hoy como desarrollador.</p><h2>La inteligencia necesita l&#237;mites</h2><p>Otra palabra clave que debes grabar a fuego en tu flujo diario es <strong>restricciones</strong>.</p><p>Al principio, esto puede parecer contradictorio. Si estamos construyendo sistemas aut&#243;nomos e inteligentes&#8230; &#191;por qu&#233; querr&#237;amos limitar lo que pueden hacer? &#191;No estamos frenando su capacidad?</p><p>He aprendido que en la ingenier&#237;a de software ocurre <strong>todo lo contrario.</strong> </p><p>Un sistema robusto no depende de que los desarrolladores nunca cometan errores (porque los van a cometer), sino de las salvaguardas que impiden que esos errores tiren abajo el negocio.</p><p>En tu d&#237;a a d&#237;a no permites que nadie haga un push &#8212;force directo a producci&#243;n, ni despliegas sin pasar por el pipeline de integraci&#243;n continua. </p><p>Con los agentes el enfoque es id&#233;ntico. </p><p>Dise&#241;ar restricciones claras (limitar los directorios donde pueden escribir, restringir sus llamadas de red o capar el acceso a credenciales sensibles) es lo que transforma un script d&#233;bil en un sistema fiable apto para producci&#243;n.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscr&#237;bete ahora&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/subscribe"><span>Suscr&#237;bete ahora</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/la-ia-no-te-hara-senior-pero-esto?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Compartir&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/la-ia-no-te-hara-senior-pero-esto?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Compartir</span></a></p><div><hr></div><h2>Una reflexi&#243;n para llevarte a casa</h2><p>Hace no tantos a&#241;os, cuando empec&#233; en esto, pensaba que ser un buen programador consist&#237;a &#250;nicamente en picar l&#237;neas de c&#243;digo muy r&#225;pido y saber de memoria la sintaxis de un lenguaje. Me frustraba si no recordaba el nombre exacto de una funci&#243;n.</p><p>Con el tiempo, los errores y los proyectos ca&#237;dos a las espaldas, descubr&#237; la realidad: el verdadero trabajo de un ingeniero consiste en entender problemas ambiguos de negocio, dise&#241;ar arquitecturas limpias que toleren el cambio, automatizar lo repetitivo y construir sistemas mantenibles que no requieran que est&#233;s despierto a las tres de la ma&#241;ana.</p><p>Con la llegada de los agentes va a ocurrir exactamente lo mismo.</p><p>Dentro de unos a&#241;os, probablemente escribiremos muchos menos prompts de los que hoy imaginamos. </p><p>No pasaremos el d&#237;a susurr&#225;ndole palabras clave a una caja de texto. Lo que realmente dise&#241;aremos y programaremos ser&#225;n sistemas robustos capaces de decidir qu&#233; contexto inyectar, qu&#233; herramientas invocar bajo qu&#233; condiciones, qu&#233; verificaciones de seguridad ejecutar y cu&#225;ndo dar un objetivo por cerrado de forma determinista.</p><p>El modelo de lenguaje seguir&#225; siendo una pieza clave del engranaje, por supuesto. Igual que lo sigue siendo un compilador, una base de datos o un navegador. Pero dejar&#225; de ser el centro absoluto de nuestra atenci&#243;n.</p><p>La pr&#243;xima revoluci&#243;n tecnol&#243;gica no pertenece a quien mejor sabe hablarle a una IA en un chat, pertenece al desarrollador que sabe dise&#241;ar los sistemas para que la IA pueda, por fin, ponerse a trabajar de forma segura. Y ese es el pelda&#241;o de abstracci&#243;n que te convertir&#225; en el desarrollador senior que toda empresa querr&#225; tener en su equipo.</p><p>Nos leemos en la pr&#243;xima.</p><p>Juli&#225;n</p>]]></content:encoded></item><item><title><![CDATA[No he tardado 6 meses en hacer una web]]></title><description><![CDATA[He tardado 6 meses en entender qu&#233; quer&#237;a vender, a qui&#233;n le hablaba y c&#243;mo quer&#237;a que me percibieran.]]></description><link>https://ceroasenior.substack.com/p/no-he-tardado-6-meses-en-hacer-una</link><guid isPermaLink="false">https://ceroasenior.substack.com/p/no-he-tardado-6-meses-en-hacer-una</guid><dc:creator><![CDATA[Julián Campos]]></dc:creator><pubDate>Sun, 12 Jul 2026 10:54:47 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/2d18f6c0-b4d2-4a74-be24-6e7c223ab345_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Seamos sinceros: en casa del herrero.</p><p>Llevaba desde 2022 con mi propia web pidiendo a gritos una actualizaci&#243;n. Ya sabes c&#243;mo va esto: te pasas el d&#237;a exigi&#233;ndole a tus clientes buenas pr&#225;cticas, rendimiento brutal y c&#243;digo limpio, pero luego miras tu propio portfolio y... en fin. Mejor no mirar demasiado de cerca.</p><p>Hace medio a&#241;o decid&#237; que ya tocaba adecentar mi rinc&#243;n en internet.</p><p>Y lo enfoqu&#233; como lo hacemos casi todos los desarrolladores cuando nos toca lidiar con lo nuestro: <em>&#8220;Me abro el editor, monto un WordPress, hago un tema a medida, subo mis servicios y en un par de fines de semana lo tengo ventilado&#8221;</em>.</p><p>Error.</p><p><strong>He tardado 6 meses.</strong> Medio a&#241;o para lanzar la nueva <strong><a href="https://juliancampos.es">juliancampos.es</a></strong>.</p><p>Y lo m&#225;s curioso de todo: la culpa no la ha tenido la programaci&#243;n. De hecho, tirar l&#237;neas ha sido la parte m&#225;s r&#225;pida.</p><p>El problema fue darme cuenta de que estaba a punto de cometer el t&#237;pico error de junior que intento corregir en los dem&#225;s: <strong>pensar que hacer una web va de escribir c&#243;digo.</strong></p><p>Empiezas a tirar del hilo y te das un golpe de realidad de los que duelen. La web no era el problema. </p><p>El problema era todo lo que ten&#237;a que tener claro <em>antes</em> de abrir siquiera el editor:</p><ul><li><p>Qu&#233; quer&#237;a vender exactamente.</p></li><li><p>A qui&#233;n quer&#237;a atraer (y a qui&#233;n quer&#237;a espantar).</p></li><li><p>C&#243;mo quer&#237;a posicionarme en el mercado.</p></li><li><p>Qu&#233; ten&#237;a que entender una persona en 10 segundos antes de pedirme presupuesto.</p></li></ul><p>En definitiva: <strong>c&#243;mo hacer que la web dejara de ser un simple portfolio</strong> para salir del paso y se convirtiera en una herramienta real para mi negocio.</p><p>Suena exagerado dedicarle 6 meses a esto, lo s&#233;. </p><p>Pero creo que precisamente ah&#237; est&#225; el gran aprendizaje que quiero compartirte hoy. Porque el salto de junior a senior pasa, muchas veces, por levantar la cabeza del teclado.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#191;Te gustan las entregas de CERO a SENIOR? No te olvides suscribirte y recibir&#225;s semanalmente un nuevo consejo para tu carrera como programador</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>La web no empieza en el c&#243;digo</h2><p>Esto me ha cost&#243; en su d&#237;a aceptarlo, porque la tendencia natural de muchos de nosotros es irnos directamente a programar. </p><p>Abrir el editor. Crear el tema. Montar bloques. Pensar componentes. Resolver el responsive. Optimizar im&#225;genes. Hacer que todo vuele. </p><p>Lo t&#237;pico.</p><p>Pero una web enfocada a negocio no empieza ah&#237;. Empieza pregunt&#225;ndote cosas bastante menos c&#243;modas:</p><ul><li><p>&#191;Para qu&#233; quiero esta web?</p></li><li><p>&#191;Qui&#233;n quiero que la lea y qu&#233; problema tiene esa persona?</p></li><li><p>&#191;Qu&#233; quiero que piensen de m&#237;?</p></li><li><p>&#191;Qu&#233; conversaci&#243;n quiero generar?</p></li></ul><p>Aunque suene muy de marketing, esto es vital para cualquier desarrollador que quiera crecer profesionalmente. Llega un momento en el que no basta con saber hacer cosas; <strong>tienes que saber explicar por qu&#233; esas cosas importan.</strong></p><p>No es lo mismo decir <em>desarrollo webs en WordPress</em> que decir <em>ayudo a empresas que tienen una web que ya no escala, que arrastra deuda t&#233;cnica y que necesitan una base s&#243;lida para seguir creciendo</em>.</p><p>T&#233;cnicamente ofreces lo mismo, pero la percepci&#243;n cambia por completo. Y la percepci&#243;n, aunque nos moleste admitirlo, tambi&#233;n forma parte de tu valor.</p><h2>El cliente no compra tu stack</h2><p>Este es uno de los errores m&#225;s habituales en nuestros primeros a&#241;os. Construimos nuestra comunicaci&#243;n alrededor de nuestras herramientas: <em>WordPress, Laravel, React, Docker, AWS...</em></p><p>Y ojo, todo eso importa. Pero el cliente no se levanta un lunes pensando:</p><blockquote><p><em>&#8220;Ojal&#225; encuentre hoy a alguien que me implemente una arquitectura con bloques personalizados y buenas pr&#225;cticas de rendimiento&#8221;</em>.</p></blockquote><p>El cliente piensa en sus problemas reales:</p><ul><li><p><em>&#8220;Cada cambio en la web es un drama&#8221;</em>.</p></li><li><p><em>&#8220;Dependemos demasiado de una sola persona&#8221;</em>.</p></li><li><p><em>&#8220;Marketing necesita lanzar cosas y tecnolog&#237;a es un cuello de botella&#8221;</em>.</p></li></ul><p>Ese es su punto de partida. Si tu portfolio no habla de eso, est&#225;s obligando al cliente a hacer de traductor.</p><p>&#191;Traductor?</p><p>Si, porque <strong>lo que t&#250; dices</strong> es: desarrollo a medida, optimizaci&#243;n de rendimiento o arquitectura escalable.</p><p>Pero <strong>lo que el cliente necesita escuchar</strong> es: menos riesgo y m&#225;s control, m&#225;s velocidad y mejor conversi&#243;n, menos dependencia t&#233;cnica y m&#225;s ventas.</p><p>Cuanto m&#225;s obligas a alguien a traducir tu valor t&#233;cnico a su idioma de negocio, m&#225;s f&#225;cil es que te descarte.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!FEb9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee5c23d8-556b-4f61-9830-79ce77abc256_3518x3139.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!FEb9!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee5c23d8-556b-4f61-9830-79ce77abc256_3518x3139.png 424w, /__u/substackcdn.com/image/fetch/$s_!FEb9!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee5c23d8-556b-4f61-9830-79ce77abc256_3518x3139.png 848w, /__u/substackcdn.com/image/fetch/$s_!FEb9!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee5c23d8-556b-4f61-9830-79ce77abc256_3518x3139.png 1272w, /__u/substackcdn.com/image/fetch/$s_!FEb9!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee5c23d8-556b-4f61-9830-79ce77abc256_3518x3139.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!FEb9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee5c23d8-556b-4f61-9830-79ce77abc256_3518x3139.png" width="530" height="472.85027472527474" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ee5c23d8-556b-4f61-9830-79ce77abc256_3518x3139.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1299,&quot;width&quot;:1456,&quot;resizeWidth&quot;:530,&quot;bytes&quot;:877108,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://ceroasenior.substack.com/i/206622964?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee5c23d8-556b-4f61-9830-79ce77abc256_3518x3139.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!FEb9!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee5c23d8-556b-4f61-9830-79ce77abc256_3518x3139.png 424w, /__u/substackcdn.com/image/fetch/$s_!FEb9!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee5c23d8-556b-4f61-9830-79ce77abc256_3518x3139.png 848w, /__u/substackcdn.com/image/fetch/$s_!FEb9!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee5c23d8-556b-4f61-9830-79ce77abc256_3518x3139.png 1272w, /__u/substackcdn.com/image/fetch/$s_!FEb9!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee5c23d8-556b-4f61-9830-79ce77abc256_3518x3139.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Captura de mi p&#225;gina de <a href="https://juliancampos.es/servicios/">servicios</a></figcaption></figure></div><h2>La marca tambi&#233;n es trabajo t&#233;cnico</h2><p>S&#233; que esto suena raro en una newsletter de c&#243;digo, porque solemos pensar que la marca es cosa de dise&#241;adores o gente que habla de &#8220;tonos de voz&#8221; en reuniones eternas.</p><p>Pero si eres freelance, consultor, o simplemente quieres destacar en tu empresa, tu marca es lo que alguien entiende de ti antes de hablar contigo. </p><p>Es la diferencia entre parecer otro programador m&#225;s o alguien con criterio.</p><p>En mi caso, quer&#237;a transmitir tres cosas: <strong>solidez t&#233;cnica, cercan&#237;a y orientaci&#243;n a negocio.</strong></p><p>Quer&#237;a que se entendiera que s&#233; programar, por supuesto. Pero tambi&#233;n que s&#233; pensar en sistemas, entender el contexto, hablar con negocio y tomar decisiones que trascienden el editor.</p><p>Ah&#237; es donde reside buena parte del salto de junior a senior. <strong>No en escribir m&#225;s l&#237;neas, sino en entender qu&#233; l&#237;neas merece la pena escribir.</strong></p><h2>El dise&#241;o y el copy no son &#8220;la capa bonita&#8221;</h2><p>Durante el proceso trabaj&#233; con profesionales de dise&#241;o y <strong><a href="https://www.linkedin.com/in/margacamps/">copy</a></strong>. Para m&#237;, esto ha sido un antes y un despu&#233;s.</p><p>Cuando eres desarrollador y haces tu propia web, tienes un problema grave: <strong>sabes demasiado</strong>. Quieres contarlo todo, justificar cada decisi&#243;n t&#233;cnica y meter todos los detalles. Acabas construyendo una web para ti, no para quien te va a contratar.</p><p>El copy no es rellenar huecos en una maqueta con <em>Lorem Ipsum</em>. El copy es <strong>estrategia escrita</strong>. Es decidir c&#243;mo traduces tu trabajo t&#233;cnico a valor real.</p><p>En lugar de decir algo como <em>Implemento bloques personalizados en WordPress, </em>puedes probar con<em> Construyo una web editable sin convertir tu WordPress en un caos de plugins y parches.</em></p><p>La segunda frase le habla directamente a la herida del cliente.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!8xrq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0aacade4-863f-444b-90e6-3cd6af374c6d_3544x1948.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!8xrq!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0aacade4-863f-444b-90e6-3cd6af374c6d_3544x1948.png 424w, /__u/substackcdn.com/image/fetch/$s_!8xrq!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0aacade4-863f-444b-90e6-3cd6af374c6d_3544x1948.png 848w, /__u/substackcdn.com/image/fetch/$s_!8xrq!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0aacade4-863f-444b-90e6-3cd6af374c6d_3544x1948.png 1272w, /__u/substackcdn.com/image/fetch/$s_!8xrq!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0aacade4-863f-444b-90e6-3cd6af374c6d_3544x1948.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!8xrq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0aacade4-863f-444b-90e6-3cd6af374c6d_3544x1948.png" width="589" height="323.6263736263736" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0aacade4-863f-444b-90e6-3cd6af374c6d_3544x1948.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1456,&quot;resizeWidth&quot;:589,&quot;bytes&quot;:859575,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://ceroasenior.substack.com/i/206622964?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0aacade4-863f-444b-90e6-3cd6af374c6d_3544x1948.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!8xrq!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0aacade4-863f-444b-90e6-3cd6af374c6d_3544x1948.png 424w, /__u/substackcdn.com/image/fetch/$s_!8xrq!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0aacade4-863f-444b-90e6-3cd6af374c6d_3544x1948.png 848w, /__u/substackcdn.com/image/fetch/$s_!8xrq!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0aacade4-863f-444b-90e6-3cd6af374c6d_3544x1948.png 1272w, /__u/substackcdn.com/image/fetch/$s_!8xrq!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0aacade4-863f-444b-90e6-3cd6af374c6d_3544x1948.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">En la p&#225;gina de <a href="https://juliancampos.es/servicios/">servicios</a> intento atacar esa herida</figcaption></figure></div><h2>WordPress no era el objetivo, era el sistema</h2><p>Cuando lleg&#243; la fase de desarrollo, entr&#243; en juego lo que m&#225;s dominamos: temas a medida, plantillas, responsive, rendimiento, integraci&#243;n de newsletter...</p><p>Y aqu&#237; surgi&#243; la gran pregunta: <strong>&#191;Por qu&#233; WordPress?</strong></p><p>Podr&#237;a haber usado Astro, Next, Laravel, un CMS headless... y habr&#237;a quedado algo t&#233;cnicamente impecable. Pero el criterio de un perfil senior no es <em>qu&#233; tecnolog&#237;a me apetece usar hoy, e</em>l criterio es <em>qu&#233; necesita este proyecto</em>.</p><p>Y este proyecto necesitaba:</p><ul><li><p>Facilidad absoluta para editar contenido sin romper nada.</p></li><li><p>Estructura s&#243;lida para publicar art&#237;culos y newsletter.</p></li><li><p>Velocidad para iterar sin depender siempre de tocar c&#243;digo.</p></li><li><p>Una base conocida para integrar SEO y captaci&#243;n.</p></li></ul><p>Para eso, <strong>WordPress ten&#237;a todo el sentido</strong>. No porque sea siempre la respuesta, sino porque aqu&#237; encajaba a la perfecci&#243;n.</p><p>A veces usamos una herramienta porque est&#225; de moda, o porque en Twitter parece que si no usas el &#250;ltimo framework de JS est&#225;s haciendo arqueolog&#237;a. Pero el verdadero criterio t&#233;cnico consiste en elegir lo que resuelve el problema con <strong>el menor coste razonable, el menor riesgo posible y la mayor facilidad de mantenimiento.</strong></p><p>Yo no quer&#237;a hacer una simple web. Quer&#237;a construir un sistema: WordPress como CMS, el tema como sistema visual, los bloques como piezas de negocio y el formulario como inicio del proceso comercial.</p><h2>Una web debe generar mejores conversaciones</h2><p>No quer&#237;a el t&#237;pico formulario de <em>Nombre / Email / Mensaje</em>. Eso solo genera correos gen&#233;ricos que te hacen perder el tiempo.</p><p>Quer&#237;a un flujo que me ayudara a cualificar el proyecto antes de la primera llamada: <strong>qu&#233; necesitan, qu&#233; problema tienen, qu&#233; esperan conseguir.</strong></p><p>Esto tambi&#233;n es desarrollo. </p><p>Una buena funcionalidad no es solo la que no da errores; es la que <strong>mejora una decisi&#243;n, reduce fricci&#243;n o genera informaci&#243;n &#250;til</strong>. El objetivo no era recibir <em>m&#225;s</em> mensajes, era recibir <em>mejores</em> conversaciones.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!z1fF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca56a534-a79f-47b6-b3d5-a7e1ace401cc_3390x1592.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!z1fF!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca56a534-a79f-47b6-b3d5-a7e1ace401cc_3390x1592.png 424w, /__u/substackcdn.com/image/fetch/$s_!z1fF!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca56a534-a79f-47b6-b3d5-a7e1ace401cc_3390x1592.png 848w, /__u/substackcdn.com/image/fetch/$s_!z1fF!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca56a534-a79f-47b6-b3d5-a7e1ace401cc_3390x1592.png 1272w, /__u/substackcdn.com/image/fetch/$s_!z1fF!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca56a534-a79f-47b6-b3d5-a7e1ace401cc_3390x1592.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!z1fF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca56a534-a79f-47b6-b3d5-a7e1ace401cc_3390x1592.png" width="616" height="289.38461538461536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ca56a534-a79f-47b6-b3d5-a7e1ace401cc_3390x1592.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:684,&quot;width&quot;:1456,&quot;resizeWidth&quot;:616,&quot;bytes&quot;:398878,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://ceroasenior.substack.com/i/206622964?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca56a534-a79f-47b6-b3d5-a7e1ace401cc_3390x1592.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!z1fF!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca56a534-a79f-47b6-b3d5-a7e1ace401cc_3390x1592.png 424w, /__u/substackcdn.com/image/fetch/$s_!z1fF!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca56a534-a79f-47b6-b3d5-a7e1ace401cc_3390x1592.png 848w, /__u/substackcdn.com/image/fetch/$s_!z1fF!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca56a534-a79f-47b6-b3d5-a7e1ace401cc_3390x1592.png 1272w, /__u/substackcdn.com/image/fetch/$s_!z1fF!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca56a534-a79f-47b6-b3d5-a7e1ace401cc_3390x1592.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">El formulario de <a href="https://juliancampos.es/contacto/">contacto</a> tiene un peque&#241;o secreto cuando lo mandas buscando una forma original de agradecer el contacto y dar un toque original.</figcaption></figure></div><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscr&#237;bete ahora&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/subscribe"><span>Suscr&#237;bete ahora</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/no-he-tardado-6-meses-en-hacer-una?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Compartir&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/no-he-tardado-6-meses-en-hacer-una?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Compartir</span></a></p><div><hr></div><h2>Entonces, &#191;merece la pena dedicar 6 meses a una web?</h2><p>Depende.</p><p>Si tu web es solo una tarjeta de visita virtual, no.</p><p>Pero si tiene que explicar qui&#233;n eres, vender tus servicios, filtrar oportunidades y construir tu autoridad, entonces s&#237;. Porque no est&#225;s haciendo una web. Est&#225;s construyendo el motor de tu negocio.</p><p>Y esto conecta de lleno con lo que siempre defiendo en <strong>CERO a SENIOR</strong>: crecer como desarrollador no va solo de aprender el en&#233;simo framework.</p><p>Va de entender de producto. De negocio. De comunicaci&#243;n.</p><p>La parte t&#233;cnica sigue siendo vital, pero cada vez tengo m&#225;s claro que el verdadero valor de un perfil senior est&#225; en <strong>unir las piezas</strong>:</p><p><strong>C&#243;digo + Arquitectura + Producto + Negocio + Comunicaci&#243;n = Criterio.</strong></p><p>Mi nueva web ha sido una excusa perfecta para record&#225;rmelo. No te cuento esto para que te pases medio a&#241;o con tu pr&#243;ximo portfolio, sino para recordarte que, a veces, lo importante no es hacer las cosas r&#225;pido, sino hacerlas con intenci&#243;n.</p><p>Un saludo,</p><p><strong>Juli&#225;n</strong></p>]]></content:encoded></item><item><title><![CDATA[Mi backend funcionaba… hasta que dejó de funcionar]]></title><description><![CDATA[La lecci&#243;n de arquitectura que solo aprendes en producci&#243;n.]]></description><link>https://ceroasenior.substack.com/p/mi-backend-funcionaba-hasta-que-dejo</link><guid isPermaLink="false">https://ceroasenior.substack.com/p/mi-backend-funcionaba-hasta-que-dejo</guid><dc:creator><![CDATA[Julián Campos]]></dc:creator><pubDate>Sun, 28 Jun 2026 07:02:28 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a6629307-a6cd-40cb-9b83-5b76840cf583_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hace ya <a href="/__u/ceroasenior.substack.com/p/lo-que-nadie-te-explica-cuando-aprendes">unas semanas</a> te contaba que en <strong><a href="https://facilseo.com/?utm_source=newsletter&amp;utm_medium=email&amp;utm_campaign=boletin_semanal">F&#225;cilSEO</a></strong> la API no ejecuta todo, sino que coordina. </p><p>Tambi&#233;n hace semanas que no te enviaba una entrega puramente t&#233;cnica, y la verdad es que ya ten&#237;a ganas de explicar asuntos m&#225;s t&#233;cnicos, sobre todo si tiene que ver con arquitectura.</p><p>Pero antes de ir a los detalles de arquitectura, quiero contarte c&#243;mo me di de bruces con la realidad hace un tiempo.</p><p>Imagina la escena: est&#225;s construyendo tu producto. Tienes tu backend montado, tus controladores listos y las pruebas en local te muestran que todo est&#225; ok. </p><p>Todo parece ir sobre ruedas. </p><p>Entonces, decides probar el analizador de F&#225;cilSEO con una web real de un cliente. </p><p>Introduces la URL, le das a analizar, tu backend hace su magia y... el reporte vuelve casi vac&#237;o. </p><p>S&#237;, la funcionalidad principal de tu proyecto no funciona. Te encuentras con un desastre que tiene un total de cero palabras, cero enlaces y una estructura rota.</p><p>Miras el c&#243;digo y revisas los logs. Lanzas un par de maldiciones pensando que te has cargado algo en el &#250;ltimo <em>commit</em>. </p><p>Pero no, tu c&#243;digo est&#225; bien. Abres el navegador, entras a esa misma web y la ves perfectamente: llena de texto, im&#225;genes y dise&#241;o.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#191;Te gustan las entregas de CERO a SENIOR? No te olvides suscribirte y recibir&#225;s semanalmente un nuevo consejo para tu carrera como programador</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p><strong>&#191;Qu&#233; estaba pasando?</strong> </p><p>Pues que me acababa de chocar de frente contra el muro invisible de las webs modernas.</p><p>Ese d&#237;a me di cuenta de que resolver ese problema no iba de a&#241;adir un simple parche o cambiar una librer&#237;a. Iba a requerir replantear c&#243;mo estaba dise&#241;ando el sistema. </p><p>Porque hay problemas (de los feos, de los que te hacen rascarte la cabeza) que simplemente no aparecen hasta que sacas tu producto a la calle.</p><p>Hoy quiero contarte c&#243;mo solucion&#233; ese choque de trenes, y por qu&#233; me llev&#243; a tomar una de las decisiones m&#225;s importantes del proyecto.</p><h3>El problema de las webs modernas</h3><p>Cuando empec&#233; a montar el sistema de an&#225;lisis SEO, me top&#233; con este escenario bastante inc&#243;modo. </p><p>Resulta que muchas webs actuales no devuelven todo su contenido en el HTML inicial. En su lugar, tiran de JavaScript para cargar datos, montar componentes y renderizar la p&#225;gina directamente en el navegador.</p><p>Para un usuario normal esto es transparente, pero para una herramienta SEO es un dolor de cabeza. </p><p>Si haces una petici&#243;n HTTP tradicional, muchas veces recibes una p&#225;gina casi vac&#237;a: sin estructura real, sin informaci&#243;n fiable y, lo peor de todo, llev&#225;ndote a conclusiones equivocadas.</p><h3>Separar sin complicarse (el <em>Renderer</em>)</h3><p>Para solucionar esto, en F&#225;cilSEO cre&#233; un servicio separado que se encarga exclusivamente de renderizar las p&#225;ginas usando <strong>Playwright</strong>. </p><p>B&#225;sicamente, abre la web como lo har&#237;a un navegador real, ejecuta el JavaScript, espera a que cargue el contenido y devuelve el HTML final. </p><p>Esto hace que el an&#225;lisis sea much&#237;simo m&#225;s fiable.</p><p>Pero m&#225;s all&#225; de la herramienta en s&#237;, lo realmente importante es <strong>la decisi&#243;n arquitect&#243;nica de separarlo</strong>.</p><p>Este renderer vive fuera del backend principal (no est&#225; dentro de Laravel), y no es casualidad. </p><p>Es un proceso pesado, consume recursos, tarda m&#225;s y puede fallar por motivos completamente distintos. </p><p>Si una web tarda mucho en cargar o el renderer cae, la API principal debe seguir funcionando sin inmutarse y sin bloquear otras peticiones. </p><p>La lecci&#243;n aqu&#237; es clave: <strong>no todo lo que tu backend necesita hacer tiene que vivir dentro del mismo proceso.</strong></p><h3>El monolito modular</h3><p>Ojo, esto no significa que tengas que volverte loco montando microservicios.</p><p>F&#225;cilSEO no est&#225; construido as&#237;; sigue siendo un <strong>backend monol&#237;tico</strong> en Laravel, pero de forma <strong>modular</strong>. </p><p>El c&#243;digo est&#225; organizado por &#225;reas con sentido: SEO, Proyectos, Billing, Posicionamiento.</p><p>No se trata de hacer una arquitectura bonita por postureo o por modas, sino de evitar que toda la l&#243;gica acabe embutida en controladores gigantescos. </p><p><strong>Un controlador no deber&#237;a saberlo todo</strong>: solo recibe la petici&#243;n, valida y delega en servicios o m&#243;dulos donde realmente vive la l&#243;gica.</p><h3>Un backend que trabaja solo y sabe c&#243;mo fallar</h3><p>Otra cosa que suele pasar desapercibida es que un backend no solo responde a los usuarios; tambi&#233;n trabaja solo. </p><p>Env&#237;a informes, sincroniza datos con Search Console, revisa suscripciones y reintenta procesos fallidos. </p><p>Todo esto lo gestiona el <strong>scheduler</strong>, convirtiendo al backend en un sistema activo que no depende &#250;nicamente de que alguien haga clic.</p><p>Y hablando de fallos... cuando haces una demo, todo es un caso feliz o de &#233;xito.</p><p><strong>Pero en la vida real</strong>, Stripe puede fallar, una web puede no responder o un webhook puede perderse por el camino. </p><p>Por eso, el sistema no est&#225; pensado solo para ejecutar acciones, sino para <strong>saber recuperarse</strong>. </p><p>Hay reintentos, timeouts, gesti&#243;n de estados intermedios y logs. Y es que tu sistema nunca debe asumir que todo ir&#225; bien.</p><p>Aqu&#237; radica la diferencia entre programar y construir producto:</p><ul><li><p><strong>Programar</strong> es conseguir que algo funcione.</p></li><li><p><strong>Construir producto</strong> es conseguir que siga funcionando cuando las cosas van mal, entender qu&#233; ha pasado y que un error aislado no arrastre todo el sistema.</p></li></ul><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscr&#237;bete ahora&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/subscribe"><span>Suscr&#237;bete ahora</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/mi-backend-funcionaba-hasta-que-dejo/comments&quot;,&quot;text&quot;:&quot;Deja un comentario&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/mi-backend-funcionaba-hasta-que-dejo/comments"><span>Deja un comentario</span></a></p><div><hr></div><h3>La idea importante si est&#225;s empezando</h3><p>F&#225;cilSEO podr&#237;a haberse construido mucho m&#225;s r&#225;pido metiendo todo dentro de la petici&#243;n, con una sola cola y controladores enormes. Y probablemente habr&#237;a funcionado... en local. Pero las malas arquitecturas siempre dan la cara cuando llega el uso real.</p><p>No necesitas usar Docker, Redis o Playwright desde el d&#237;a uno. </p><p>Lo que s&#237; necesitas entender <strong>c&#243;mo separar responsabilidades</strong>: qu&#233; debe ser r&#225;pido, qu&#233; puede ir en segundo plano, qu&#233; puede fallar y qu&#233; no debe bloquear al usuario.</p><p>En F&#225;cilSEO, la regla mental es sencilla: <strong>la API coordina, los workers ejecutan, el scheduler automatiza y el renderer se pelea con las webs modernas.</strong> </p><p>Cada pieza tiene su responsabilidad. </p><p>No es perfecto, pero es mantenible.</p><p>Al final, dise&#241;ar un sistema real se resume en aceptar el caos. Asumir que las cosas externas van a fallar y prepararte para que, cuando lo hagan, el impacto sea m&#237;nimo. No se trata de usar la tecnolog&#237;a m&#225;s puntera, sino de tomar decisiones pr&#225;cticas que te dejen dormir tranquilo por las noches.</p><p>Seguiremos usando F&#225;cilSEO (y mis propios tropiezos en producci&#243;n) como excusa para seguir aprendiendo. Todav&#237;a queda mucho barro en el que meternos.</p><p>Nos leemos en la pr&#243;xima,</p><p><strong>Juli&#225;n</strong></p><p><strong>P.D.:</strong> Durante el verano, las entregas de <em>CERO a SENIOR</em> pasar&#225;n a ser cada dos semanas, incre&#237;blemente, para ser verano, estoy hasta arriba de trabajo y bueno, as&#237; tambi&#233;n todos podemos desconectar y descansar un poco.</p>]]></content:encoded></item><item><title><![CDATA[En los años 80 ya daban por muertos a los programadores]]></title><description><![CDATA[La IA parece un punto de no retorno, pero la industria del software ya pas&#243; por algo parecido hace d&#233;cadas.]]></description><link>https://ceroasenior.substack.com/p/en-los-anos-80-ya-daban-por-muertos</link><guid isPermaLink="false">https://ceroasenior.substack.com/p/en-los-anos-80-ya-daban-por-muertos</guid><dc:creator><![CDATA[Julián Campos]]></dc:creator><pubDate>Sun, 07 Jun 2026 07:00:41 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b8feb88b-03b3-49e8-8a67-013e184ab633_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Llevaba tiempo sin escribir nada t&#233;cnico en la Newsletter y me estaba ya sintiendo un poco mal.</p><p>Una newsletter de programaci&#243;n sin escribir sobre c&#243;digo, patrones, arquitectura&#8230; &#191;pero eso qu&#233; es?</p><p>Y hasta aqu&#237; ha llegado esto&#8230; bueno, o eso me gustar&#237;a decir, porque hoy tampoco te voy a contar nada s&#250;per t&#233;cnico, as&#237; que todav&#237;a estar&#233; al menos una semana m&#225;s sinti&#233;ndome un poco mal por ello &#128517;</p><p>Y no porque no piense que no es importante o que ya no sea necesario saber ciertas cosas de programaci&#243;n para llegar a ser Senior. </p><p>Nada de eso.</p><p>Creo que a d&#237;a de hoy, y de cara al futuro pr&#243;ximo, saber programar bien, va a seguir siendo importante en tu carrera, haya o no haya IA de por medio&#8230; pero tambi&#233;n creo que <strong>el desarrollo y la evoluci&#243;n de junior a senior est&#225; m&#225;s all&#225; del c&#243;digo.</strong></p><p>Pero bueno, que me enrollo y lo que te quiero contar hoy no va sobre esto (creo que si sigues la Newsletter ya sabr&#225;s lo que opino de qu&#233; es lo que va haciendo falta para convertirse en desarrollador senior).</p><p>Lo que hoy te quiero contar es un poco de historia.</p><p>S&#237;, historia, has le&#237;do bien&#8230; <strong>historia para comprender la situaci&#243;n que estamos viviendo los desarrolladores hoy en d&#237;a con la IA generativa y los LLM</strong> y mostrarte que, en realidad, esta situaci&#243;n no es del todo nueva en nuestro sector.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#191;Te gustan las entregas de CERO a SENIOR? No te olvides suscribirte y recibir&#225;s semanalmente un nuevo consejo para tu carrera como programador</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p>Sin duda estamos viviendo una &#233;poca bastante curiosa y confusa en el sector con la llegada de la IA.</p><p>Nos hemos encontrado con una herramienta que nos ayuda a sacar c&#243;digo m&#225;s r&#225;pido, reducir trabajo repetitivo y, en definitiva, generar c&#243;digo desde un lenguaje natural.</p><p>Se trata de una herramienta que ha puesto el desarrollo al alcance de mucha m&#225;s gente, permitiendo que saber programar no sea un impedimento para lanzar algo (aunque habr&#237;a que ver si el c&#243;digo que da y sin la supervisi&#243;n t&#233;cnica es suficiente para lanzar algo seriamente).</p><p>Ha sido un boom grande, muy grande, tan grande que mucha gente ha dado la profesi&#243;n de la programaci&#243;n como muerta de cara al futuro.</p><p>Y ha sido gente de todos lados&#8230; gente fuera del sector de la programaci&#243;n y gente dentro de ella.</p><p>Parece que estamos en un punto de no retorno. Un punto que no hab&#237;amos vivido antes&#8230; &#191;o s&#237;?</p><h2>En los 80 ya daban a los programadores por muertos </h2><p>Si eres nuevo por el mundo de la programaci&#243;n y crees que es la primera vez que una tecnolog&#237;a ha amenazado con acabar con la carrera de los programadores&#8230; est&#225;s muy equivocado.</p><p>Seguramente muchos no conozcan esta historia, ya que se remonta a las d&#233;cadas de los 70 y 80, tiempo en el que naci&#243; una tecnolog&#237;a que promet&#237;a reducir dr&#225;sticamente la necesidad de programar manualmente.</p><p>Se trataba de las <strong>herramientas CASE</strong>.</p><p>Las herramientas <strong>CASE</strong> (<em>Computer-Aided Software Engineering</em>) fueron sistemas dise&#241;ados para ayudar a los ingenieros de software a analizar, dise&#241;ar, documentar y, en algunos casos, generar c&#243;digo autom&#225;ticamente.</p><p>La idea era que el desarrollo de software evolucionara de una actividad artesanal a una actividad m&#225;s industrial.</p><p>En lugar de escribir c&#243;digo directamente, el desarrollador trabajaba con modelos:</p><ul><li><p>Diagramas de flujo.</p></li><li><p>Diagramas entidad-relaci&#243;n.</p></li><li><p>Modelos de datos.</p></li><li><p>Diagramas UML (m&#225;s adelante, en la d&#233;cada de los 90).</p></li><li><p>Especificaciones funcionales.</p></li></ul><p>La herramienta generaba autom&#225;ticamente parte del c&#243;digo, la documentaci&#243;n o incluso la base de datos.</p><p>Algunos ejemplos hist&#243;ricos de estas herramientas fueron <strong>Excelerator, Rational Rose, ERwin </strong>o <strong>Oracle Designer.</strong></p><p>La promesa de estas herramientas era que describir el sistema visualmente era suficiente para que la m&#225;quina te desarrollara el software.</p><h2>Pero no fueron capaces de cumplir&#8230;</h2><p>S&#237;, como puedes imaginar, no fueron capaces de cumplir esas promesas y seguimos desarrollando software hasta el d&#237;a de hoy.</p><p><strong>&#191;Y sabes por qu&#233; no fueron capaces de cumplir esto?</strong></p><p>Porque se descubri&#243; que escribir c&#243;digo no era la parte m&#225;s dif&#237;cil del problema, la complejidad estaba en comprender el negocio y gestionar requisitos cambiantes.</p><p>Las herramientas CASE pod&#237;an generar miles de l&#237;neas de c&#243;digo, pero:</p><ul><li><p>Los requisitos cambiaban constantemente.</p></li><li><p>Los modelos eran dif&#237;ciles de mantener.</p></li><li><p>El c&#243;digo generado sol&#237;a ser r&#237;gido.</p></li><li><p>Modificar el c&#243;digo manualmente romp&#237;a la sincronizaci&#243;n con los diagramas.</p></li></ul><p>Al final, los desarrolladores acababan escribiendo mucho c&#243;digo a mano y muchos proyectos terminaban usando las herramientas &#250;nicamente para documentaci&#243;n y dise&#241;o.</p><h2>Semejanzas y diferencias con la IA</h2><p>S&#237;, la IA es bastante diferente y nos encontramos en un punto donde seguramente estas herramientas no se queden solo para escribir documentaci&#243;n. Pero, pese a esto, las herramientas CASE tienen algunas semejanzas con Codex o Claude.</p><p>Tenemos la promesa de <strong>automatizar la programaci&#243;n</strong>, las herramientas CASE generaban c&#243;digo desde modelos y los LLM lo hacen desde lenguaje natural, tambi&#233;n <strong>reducen el trabajo repetitivo</strong>, requieren de <strong>supervisi&#243;n humana</strong>, tienen <strong>dificultades para capturar requisitos reale</strong>s y, por qu&#233; no, <strong>tienen mucho marketing alrededor.</strong></p><p>B&#225;sicamente, ambas comparten la promesa de que <strong>la programaci&#243;n dejar&#225; de consistir en escribir c&#243;digo y pasar&#225; a consistir en describir lo que quieres.</strong></p><p><strong>&#191;Y las diferencias?</strong></p><p>Aqu&#237; es donde las LLM son mucho m&#225;s potentes y donde vemos que estamos en pleno 2026 y no en la d&#233;cada de los 70 y 80.</p><p>La primera diferencia es que las herramientas CASE eran demasiado deterministas:</p><p>Modelo &#8594; Generador &#8594; C&#243;digo</p><p>Si el modelo no contemplaba algo, la herramienta no pod&#237;a inventarlo. En cambio, los LLM son probabil&#237;sticos:</p><p>Descripci&#243;n &#8594; Modelo entrenado &#8594; Soluci&#243;n propuesta</p><p>De esta forma, la IA enfocada a la programaci&#243;n puede <strong>inferir intenciones</strong>, <strong>completar huecos</strong>, <strong>proponer arquitecturas</strong>, <strong>explicar errores</strong>, <strong>generar tests</strong> y <strong>refactorizar c&#243;digo existente.</strong></p><p>Mientras que CASE obligaba a formalizar el conocimiento mediante diagramas y modelos, los LLM trabajan sobre patrones aprendidos a partir de enormes cantidades de c&#243;digo y texto.</p><p>Una herramienta CASE no pod&#237;a leer un proyecto de 100.000 l&#237;neas y sugerir mejoras&#8230; un LLM s&#237; puede ayudar a hacerlo.</p><h2>&#191;Qu&#233; lecci&#243;n nos llevamos de esto?</h2><p>En ambos casos, el de las herramientas CASE y la IA, hemos escuchado algo parecido:</p><p><strong>&#8220;Dentro de unos a&#241;os ya no necesitaremos programadores&#8221;.</strong></p><p>Y, lo curioso, es que con las herramientas CASE ocurri&#243; lo contrario.</p><p>Las herramientas CASE, aunque no cumplieron las expectativas m&#225;s ambiciosas, s&#237; aportaron valor en determinados contextos. Y no solo eso, sino que como permitieron construir sistemas m&#225;s grandes y complejos, aumentando la demanda de ingenieros.</p><p>Y hoy en d&#237;a, con la IA, hay tambi&#233;n argumentos razonables para pensar que los LLM podr&#237;an provocar algo similar:</p><ul><li><p>Menos tiempo escribiendo c&#243;digo rutinario.</p></li><li><p>M&#225;s tiempo dise&#241;ando sistemas.</p></li><li><p>M&#225;s software creado.</p></li><li><p>Y m&#225;s necesidad de personas que entiendan requisitos, arquitectura, negocio y validaci&#243;n.</p></li></ul><p>La diferencia entre los LLM y CASE es que los LLM atacan una parte mucho m&#225;s amplia del trabajo intelectual y es por eso que muchos consideran que representan un salto tecnol&#243;gico bastante mayor que el que supusieron las CASE.</p><p>De aqu&#237;, de este an&#225;lisis, est&#225; un poco fundamentada mi opini&#243;n sobre la IA y el futuro de los programadores.</p><p><strong>Si te limitas a escribir c&#243;digo y ya, corres peligro.</strong></p><p>Si aportas valor m&#225;s all&#225; de escribir c&#243;digo, estar&#225;s mejor posicionado para adaptarte a esos cambios.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/en-los-anos-80-ya-daban-por-muertos/comments&quot;,&quot;text&quot;:&quot;Deja un comentario&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/en-los-anos-80-ya-daban-por-muertos/comments"><span>Deja un comentario</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/en-los-anos-80-ya-daban-por-muertos?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Compartir&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/en-los-anos-80-ya-daban-por-muertos?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Compartir</span></a></p><div><hr></div><p>Es por ello que a menudo en esta newsletter de hablo de aspectos m&#225;s all&#225; del c&#243;digo y cada vez escribo menos sobre aspectos t&#233;cnicos.</p><p>Creo que nuestro trabajo va a estar marcado por la IA: ser&#225; m&#225;s f&#225;cil generar c&#243;digo, pero tambi&#233;n ser&#225; cada vez m&#225;s importante que los perfiles t&#233;cnicos tengan cada vez m&#225;s idea sobre producto, entendiendo requisitos, arquitectura, negocio y validaci&#243;n.</p><p>Yo, personalmente, estoy en ello y estoy intentando formarme cada vez m&#225;s sobre producto para poder aportar m&#225;s all&#225; del c&#243;digo.</p><p>Creo que todav&#237;a tendremos que aprender a programar, los programadores ser&#225;n necesarios ya que no podemos dejar toda la responsabilidad sobre la IA para el desarrollo de los sistemas.</p><p>Lo que pasa es que no nos podemos quedar solo en ello.</p><p>Dudo que la IA tenga un impacto tan limitado como el que terminaron teniendo las herramientas CASE, pero tambi&#233;n dudo de que sustituya un perfil que entienda sobre todo esto.</p><p>En fin, hoy quer&#237;a compartir contigo un poco de la historia de la programaci&#243;n y mi opini&#243;n.</p><p>&#161;Me encantar&#237;a leer la tuya en los comentarios!</p><p>Un saludo,</p><p>Juli&#225;n</p><p>PD: s&#237;, volveremos pronto a tener entregas m&#225;s t&#233;cnicas, no te preocupes.</p><p></p>]]></content:encoded></item><item><title><![CDATA[La IA te hace más productivo, pero menos valioso]]></title><description><![CDATA[La trampa que puede frenar tu crecimiento como programador]]></description><link>https://ceroasenior.substack.com/p/la-ia-te-hace-mas-productivo-pero</link><guid isPermaLink="false">https://ceroasenior.substack.com/p/la-ia-te-hace-mas-productivo-pero</guid><dc:creator><![CDATA[Julián Campos]]></dc:creator><pubDate>Sun, 31 May 2026 07:01:51 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/158b8253-aba7-4716-887b-6e18b2d9e80e_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Si est&#225;s empezando tu carrera como desarrollador, hay algo que me preocupa bastante de la forma en la que muchos estamos utilizando la inteligencia artificial.</p><p>No porque la IA sea mala ni porque piense que deber&#237;amos volver a programar como hace diez a&#241;os.</p><p>Todo lo contrario.</p><p>Si te soy sincero, yo la utilizo pr&#225;cticamente todos los d&#237;as y estoy convencido de que cualquier desarrollador que ignore estas herramientas estar&#225; en desventaja.</p><p>Lo que me preocupa es otra cosa: que estemos empezando a confundir avanzar r&#225;pido con aprender.</p><p>Y te lo digo porque hace unas semanas me encontr&#233; con esta reflexi&#243;n mientras trabajaba en algo tan simple como la nueva versi&#243;n de mi p&#225;gina web.</p><p>Era un proyecto personal y quiz&#225; precisamente por eso decid&#237; desarrollarlo de una forma que cada vez hago menos: escribiendo pr&#225;cticamente todo el c&#243;digo yo mismo.</p><p>Lo que ocurri&#243; durante esas semanas me record&#243; una lecci&#243;n que me habr&#237;a gustado aprender mucho antes en mi carrera. </p><p>Una lecci&#243;n sobre la productividad, el aprendizaje y una habilidad que, por mucho que avance la inteligencia artificial, sigue siendo responsabilidad tuya desarrollar.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#191;Te gustan las entregas de CERO a SENIOR? No olvides suscribirte y recibir&#225;s semanalmente herramientas que cambiar&#225;n tu trabajo como programador</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>Un experimento que nunca plane&#233; hacer</h2><p>Cuando empec&#233; a desarrollar la nueva versi&#243;n de mi web no ten&#237;a ninguna intenci&#243;n de convertir el proyecto en un experimento. Mi objetivo era simplemente actualizar una p&#225;gina que ya necesitaba una renovaci&#243;n importante.</p><p>Part&#237;a de un dise&#241;o realizado por un dise&#241;ador profesional y, en teor&#237;a, gran parte del trabajo ya estaba definido. Solo quedaba construirlo.</p><p>Sin embargo, por alguna raz&#243;n, decid&#237; hacerlo pr&#225;cticamente sin apoyarme en herramientas de inteligencia artificial. </p><p>No fue una decisi&#243;n ideol&#243;gica ni una postura en contra de la IA. Simplemente me apetec&#237;a volver a sentarme delante del editor de c&#243;digo y desarrollar el proyecto de una forma m&#225;s tradicional.</p><p>PHP, JavaScript, HTML, CSS y WordPress.</p><p>A la vieja usanza, como cuando empec&#233; a hacer mis primeros desarrollos a medida de Wordpress y no ten&#237;a ChatGPT o Claude para ayudarme.</p><p>Y s&#237;, la realidad es que en este desarrollo estaba (y estoy) tardando mucho m&#225;s.</p><p>Muchas tareas que hoy puedo resolver en cuesti&#243;n de minutos con Codex me estaban llevando bastante m&#225;s tiempo. </p><p>Hab&#237;a problemas que requer&#237;an investigar documentaci&#243;n y otros me obligaban a probar diferentes alternativas antes de encontrar una soluci&#243;n. Y en muchas ocasiones simplemente necesitaba sentarme a pensar antes de escribir una sola l&#237;nea de c&#243;digo.</p><p>Esto, a priori, puede parecer una desventaja ya que despu&#233;s de todo, vivimos en una &#233;poca donde la velocidad parece ser la principal medida del &#233;xito. </p><p>Si puedes hacer algo en una hora en lugar de tres, parece l&#243;gico pensar que la opci&#243;n m&#225;s r&#225;pida siempre es la mejor.</p><p>Pero conforme avanzaba el proyecto empec&#233; a notar algo que no esperaba.</p><p>Estaba entendiendo mucho mejor lo que estaba construyendo.</p><h2>Lo que descubr&#237; al ir m&#225;s despacio</h2><p>Mientras desarrollaba cada secci&#243;n de la web empec&#233; a detectar peque&#241;as mejoras que no hab&#237;a visto durante la fase de dise&#241;o.</p><p>Encontraba detalles de experiencia de usuario que pod&#237;an optimizarse. </p><p>Cambiaba algunas estructuras y ajustaba determinados contenidos. </p><p>Replanteaba comportamientos que sobre el dise&#241;o parec&#237;an perfectamente razonables pero que durante la implementaci&#243;n mostraban limitaciones o alternativas mejores.</p><p>No porque el dise&#241;o estuviera mal, y es que de hecho, el dise&#241;o era excelente.</p><p>Lo que ocurre es que el simple hecho de construir cada m&#243;dulo manualmente me obliga a comprender mucho mejor el producto.</p><p>Y ah&#237; fue donde apareci&#243; una idea que no he dejado de darle vueltas desde entonces.</p><p>Quiz&#225; la velocidad tiene un coste que no solemos tener en cuenta.</p><p>Cuando algo requiere m&#225;s tiempo, tambi&#233;n requiere m&#225;s reflexi&#243;n. Pasas m&#225;s horas pensando en ello. </p><p>Lo observas desde m&#225;s &#225;ngulos y detectas matices que de otra forma habr&#237;an pasado desapercibidos.</p><p>Y eso me hizo preguntarme si, en nuestra obsesi&#243;n por producir cada vez m&#225;s r&#225;pido, no estaremos sacrificando parte del aprendizaje que ocurre precisamente durante ese proceso.</p><h2>La trampa de la hiperproductividad</h2><p>Creo que esta es una reflexi&#243;n especialmente importante para quienes est&#225;is empezando en el desarrollo de software.</p><p>La inteligencia artificial nos est&#225; haciendo incre&#237;blemente productivos. Podemos generar c&#243;digo m&#225;s r&#225;pido, investigar m&#225;s r&#225;pido, documentar m&#225;s r&#225;pido y resolver muchos problemas en una fracci&#243;n del tiempo que necesit&#225;bamos hace apenas unos a&#241;os.</p><p>Y eso es fant&#225;stico y ser&#237;a absurdo ignorar una tecnolog&#237;a que nos permite trabajar mejor.</p><p>Sin embargo, existe una diferencia importante entre ser productivo y aprender.</p><p><strong>La productividad</strong> consiste en obtener resultados en menos tiempo.</p><p><strong>El aprendizaje</strong> consiste en desarrollar capacidades que te permitir&#225;n resolver problemas m&#225;s complejos en el futuro.</p><p>A veces ambas cosas avanzan juntas&#8230; pero muchas otras veces no.</p><p>Cuando eres junior es muy f&#225;cil caer en la ilusi&#243;n de que est&#225;s progresando porque completas m&#225;s tareas y todo parece indicar que est&#225;s mejorando.</p><p>Pero la pregunta realmente importante no es cu&#225;nto avanza el proyecto.</p><p><strong>La pregunta importante es cu&#225;nto avanzas t&#250;.</strong></p><p>Porque si cada vez que aparece una dificultad delegas el an&#225;lisis, la investigaci&#243;n y el razonamiento en una herramienta, puede que est&#233;s construyendo software, pero no necesariamente est&#233;s construyendo <strong>criterio profesional.</strong></p><p>Y el criterio es precisamente una de las habilidades m&#225;s valiosas que puedes desarrollar durante los primeros a&#241;os de tu carrera.</p><h2>Lo que las empresas realmente pagan</h2><p>Hay algo que tard&#233; bastante tiempo en entender:</p><p><strong>Las empresas no pagan por c&#243;digo.</strong></p><p>S&#233; que puede sonar extra&#241;o viniendo de alguien que lleva a&#241;os trabajando como desarrollador, pero es una realidad que he comprobado una y otra vez.</p><p>El c&#243;digo es &#250;nicamente una herramienta, <strong>lo que las empresas pagan es la capacidad de resolver problemas.</strong></p><p>Pagan por personas capaces de <strong>analizar situaciones complejas</strong>, <strong>entender necesidades de negocio</strong>, <strong>tomar decisiones acertadas</strong> y <strong>construir soluciones que aporten valor.</strong></p><p>Por eso muchas veces vemos desarrolladores t&#233;cnicamente brillantes que tienen dificultades para crecer profesionalmente, mientras otros con conocimientos aparentemente m&#225;s modestos avanzan hacia puestos de mayor responsabilidad.</p><p>La diferencia suele estar en la calidad de sus decisiones.</p><p>En su capacidad para entender el contexto y en su criterio.</p><p>Y cuanto m&#225;s avanza la inteligencia artificial, m&#225;s importante se vuelve esta diferencia.</p><p>Porque llegar&#225; un momento en el que casi todos tendremos acceso a herramientas similares.</p><p>Lo que marcar&#225; la diferencia ser&#225; c&#243;mo pensamos, no &#250;nicamente c&#243;mo programamos.</p><h2>El riesgo de delegar demasiado pronto</h2><p>No quiero que interpretes esta reflexi&#243;n como una cr&#237;tica a la inteligencia artificial.</p><p>Ser&#237;a bastante hip&#243;crita por mi parte.</p><p>Yo utilizo ChatGPT pr&#225;cticamente todos los d&#237;as. Tambi&#233;n utilizo otras herramientas de IA para investigar, validar ideas, desbloquear problemas y acelerar muchas tareas de mi trabajo.</p><p>No creo que la soluci&#243;n sea dejar de utilizarlas, <strong>creo que la soluci&#243;n pasa por ser conscientes de qu&#233; estamos delegando.</strong></p><p>Delegar tareas repetitivas tiene sentido.</p><p>Delegar b&#250;squedas de informaci&#243;n tiene sentido.</p><p>Delegar parte de la implementaci&#243;n puede tener sentido.</p><p><strong>Delegar el pensamiento cr&#237;tico no.</strong></p><p>Porque precisamente ah&#237; es donde sigue estando gran parte de nuestro valor como profesionales.</p><p>Cuando un desarrollador se acostumbra demasiado pronto a recibir respuestas instant&#225;neas corre el riesgo de dejar de entrenar una habilidad fundamental: la capacidad de enfrentarse a la incertidumbre.</p><p>Y una gran parte de nuestro trabajo consiste precisamente en eso.</p><p>En resolver problemas para los que no existe una respuesta inmediata, en tomar decisiones cuando ninguna opci&#243;n es perfecta, en navegar zonas grises.</p><p>Y esas habilidades solo se desarrollan pensando.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscr&#237;bete ahora&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/subscribe"><span>Suscr&#237;bete ahora</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/la-ia-te-hace-mas-productivo-pero?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Compartir&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/la-ia-te-hace-mas-productivo-pero?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Compartir</span></a></p><div><hr></div><h2>C&#243;mo usar la IA sin frenar tu crecimiento</h2><p>Si est&#225;s empezando en el desarrollo de software, mi recomendaci&#243;n es sencilla.</p><p>Utiliza todas las herramientas que tengas a tu alcance. Aprende a sacar partido de ChatGPT, Claude, Copilot o cualquier tecnolog&#237;a que aparezca durante los pr&#243;ximos a&#241;os.</p><p>Pero intenta reservar algunos espacios para pensar por tu cuenta.</p><p><strong>Antes de pedir una soluci&#243;n, intenta plantear varias alternativas.</strong></p><p><strong>Antes de copiar c&#243;digo, intenta entender el problema.</strong></p><p><strong>Antes de aceptar una respuesta, preg&#250;ntate si realmente es la mejor opci&#243;n.</strong></p><p>No porque tengas que sufrir innecesariamente.</p><p>Ni porque exista alg&#250;n m&#233;rito especial en hacerlo todo manualmente.</p><p>Sino porque el aprendizaje ocurre precisamente durante ese proceso de reflexi&#243;n.</p><p>Es ah&#237; donde se desarrolla el criterio.</p><p>Y el criterio ser&#225; una de las habilidades m&#225;s valiosas que podr&#225;s aportar durante toda tu carrera.</p><p>Despu&#233;s de estas semanas desarrollando mi nueva web he llegado a una conclusi&#243;n bastante simple.</p><p>La inteligencia artificial seguir&#225; mejorando. Cada a&#241;o ser&#225; m&#225;s r&#225;pida, m&#225;s capaz y m&#225;s accesible. Muchas de las tareas que hoy hacemos nosotros terminar&#225;n automatiz&#225;ndose total o parcialmente.</p><p>Pero mientras todo el mundo se obsesiona con producir m&#225;s deprisa, quiz&#225; una de las inversiones m&#225;s inteligentes que puedes hacer en tu carrera sea dedicar tiempo a desarrollar aquello que ninguna herramienta puede aprender por ti.</p><p><strong>Tu capacidad para pensar.</strong></p><p><strong>Tu capacidad para entender problemas.</strong></p><p><strong>Tu capacidad para tomar buenas decisiones.</strong></p><p>Porque llegar&#225; un momento en el que casi todos tendremos acceso a las mismas herramientas.</p><p>Y cuando eso ocurra, el verdadero valor no estar&#225; en qui&#233;n genera m&#225;s c&#243;digo.</p><p>Estar&#225; en qui&#233;n sabe qu&#233; c&#243;digo merece la pena generar.</p><p>Sin m&#225;s, nos leemos en la pr&#243;xima.</p><p>Juli&#225;n.</p>]]></content:encoded></item><item><title><![CDATA[La habilidad que más me ayudó a crecer no fue programar]]></title><description><![CDATA[Cuando empiezas en programaci&#243;n, es muy f&#225;cil pensar que crecer consiste &#250;nicamente en aprender m&#225;s tecnolog&#237;a.]]></description><link>https://ceroasenior.substack.com/p/la-habilidad-que-mas-me-ayudo-a-crecer</link><guid isPermaLink="false">https://ceroasenior.substack.com/p/la-habilidad-que-mas-me-ayudo-a-crecer</guid><dc:creator><![CDATA[Julián Campos]]></dc:creator><pubDate>Sun, 17 May 2026 07:02:45 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/71ae52d3-6bee-4a60-868d-966b5625f197_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Cuando empiezas en programaci&#243;n, es muy f&#225;cil pensar que crecer consiste &#250;nicamente en aprender m&#225;s tecnolog&#237;a.</p><p>Que si aprender un nuevo framework, hacer otro curso, probar la nueva IA de turno, memorizar patrones&#8230; y, en definitiva, consumir contenido de programaci&#243;n y desarrollo constantemente.</p><p>Es un comportamiento que lo conozco bien porque durante bastante tiempo yo tambi&#233;n pensaba as&#237;.</p><p>Ten&#237;a en mi cabeza la err&#243;nea idea de que la diferencia entre un programador junior y uno senior estaba, principalmente, en la cantidad de conocimientos t&#233;cnicos que acumulabas con los a&#241;os y los estudios.</p><p>Y bueno, aunque evidentemente la parte t&#233;cnica importa much&#237;simo (a&#250;n hoy en d&#237;a con la IA) con el tiempo me empec&#233; a dar cuenta de que hab&#237;a algo mucho m&#225;s determinante en mi crecimiento profesional.</p><p>Y si, puedo decir sin miedo que la habilidad que m&#225;s me ayud&#243; a crecer no fue programar.</p><p>Fue aprender a comunicar.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#191;Te gustan las entregas de CERO a SENIOR? No te olvides suscribirte y recibir&#225;s semanalmente un nuevo consejo para tu carrera como programador</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p>Creo que ya te he hablado alguna vez de esto, pero perm&#237;tame que insista.</p><p>S&#237;, as&#237; es, fue comunicarme.</p><p>Y no me refiero a dar conferencias, ni a convertirte en una persona extremadamente sociable, ni siquiera a hablar bien en p&#250;blico.</p><p>Me refiero a algo mucho m&#225;s cotidiano y mucho m&#225;s importante dentro de un equipo de desarrollo: <strong>aprender a hacer buenas preguntas, aprender a explicar problemas correctamente y aprender a entender realmente a las personas con las que trabajas.</strong></p><p>Porque hay algo que muchas veces no vemos cuando estamos empezando: programar es una profesi&#243;n mucho m&#225;s social de lo que parece.</p><p>Durante mucho tiempo tuve la idea de que un buen desarrollador era alguien capaz de resolver cualquier problema por s&#237; solo. </p><p>Cuanto menos dependieras de otros, mejor programador eras. </p><p>Cuanto m&#225;s tiempo aguantabas bloqueado intentando sacar algo adelante sin pedir ayuda, m&#225;s m&#233;rito ten&#237;a.</p><p>Pero la realidad de los proyectos profesionales es bastante diferente.</p><h2>El problema empieza fuera del c&#243;digo</h2><p>Con los a&#241;os me he dado cuenta de que los mejores desarrolladores que he conocido no eran necesariamente los que m&#225;s tecnolog&#237;as sab&#237;an ni los que escrib&#237;an c&#243;digo m&#225;s complejo.</p><p>Eran los que sab&#237;an comunicarse mejor.</p><p>Personas que <strong>hac&#237;an preguntas constantemente.</strong><br>Que <strong>validaban idea</strong>s antes de implementar.<br>Que sab&#237;an <strong>reconocer r&#225;pidamente cuando algo no lo entend&#237;an del todo.</strong><br>Y, sobre todo, personas capaces de <strong>traducir problemas t&#233;cnicos complejos en conversaciones simples</strong> y entendibles para el resto del equipo.</p><p>Porque en proyectos reales, muchas veces el problema no es la programaci&#243;n en s&#237;, viene de otro lado:</p><p>Viene de haber entendido mal el requisito, de no haber detectado un malentendido a tiempo, de no haber preguntado suficiente contexto, de no haber comunicado una limitaci&#243;n t&#233;cnica importante o de sabido explicar por qu&#233; cierta decisi&#243;n pod&#237;a convertirse en un problema dentro de unos meses.</p><h2>Cu&#225;ndo me di cuenta de esto</h2><p>Todo esto que te estoy contando no es algo que te pueda ense&#241;ar un framework.</p><p>Por ejemplo, en mi carrera profesional, hubo un momento donde empec&#233; a notar un cambio bastante grande en mi manera de trabajar y es que dej&#233; de obsesionarme tanto con demostrar constantemente que sab&#237;a hacer las cosas y empec&#233; a preocuparme mucho m&#225;s por entender bien el problema que ten&#237;a delante.</p><p>Parece una diferencia peque&#241;a, pero cambia completamente la manera en la que aprendes.</p><p>Porque cuando empiezas a hacer buenas preguntas, aprendes m&#225;s r&#225;pido.<br>Cuando entiendes bien el contexto, tomas mejores decisiones t&#233;cnicas.<br>Y cuando eres capaz de comunicar dudas pronto, evitas much&#237;simos errores que despu&#233;s son caros de corregir.</p><p>Creo que muchos programadores junior viven con miedo a pedir ayuda porque sienten que eso demuestra falta de nivel. Como si un buen desarrollador tuviera que resolver todo solo y r&#225;pidamente.</p><p>Pero la realidad es que en equipos profesionales ocurre justo al rev&#233;s.</p><p>Las empresas suelen valorar much&#237;simo m&#225;s a una persona que sabe colaborar bien, comunicar bloqueos y trabajar en equipo, que a alguien t&#233;cnicamente brillante pero incapaz de compartir contexto o alinearse con los dem&#225;s.</p><p>Y esto conecta con algo que me cost&#243; bastante entender al principio: <strong>comunicar no consiste solamente en hablar bien.</strong></p><p>Consiste, sobre todo, en escuchar bien.</p><h2>Aprende a escuchar antes de hablar</h2><p>S&#237;, as&#237; es, para aprender a comunicar primero tienes que aprender a escuchar a otros desarrolladores, al equipo de producto, al cliente o, simplemente, es cuchar qu&#233; problema se intenta resolver realmente antes de pensar directamente en la soluci&#243;n t&#233;cnica.</p><p>Porque muchas veces nos enamoramos demasiado r&#225;pido de la implementaci&#243;n y dedicamos muy poco tiempo a entender el problema de verdad.</p><p>Y aqu&#237; ocurre algo curioso.</p><p><strong>Cuanto m&#225;s senior se vuelve alguien, menos obsesionado est&#225; normalmente con las tecnolog&#237;as concretas y m&#225;s importancia le da al contexto, a las decisiones y a los trade-offs.</strong></p><p>Por eso muchas veces los seniors parecen m&#225;s lentos.</p><p>Porque antes de escribir c&#243;digo intentan entender correctamente qu&#233; merece la pena construir y cu&#225;l es la mejor manera de hacerlo en ese contexto concreto.</p><p>Y sinceramente, creo que esa mentalidad marca much&#237;simo m&#225;s la diferencia profesional que saberse de memoria un framework nuevo cada seis meses.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/la-habilidad-que-mas-me-ayudo-a-crecer/comments&quot;,&quot;text&quot;:&quot;Deja un comentario&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/la-habilidad-que-mas-me-ayudo-a-crecer/comments"><span>Deja un comentario</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/la-habilidad-que-mas-me-ayudo-a-crecer?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Compartir&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/la-habilidad-que-mas-me-ayudo-a-crecer?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Compartir</span></a></p><div><hr></div><p>Si tuviera que darle un consejo a alguien que est&#225; empezando, probablemente ser&#237;a este:</p><p><strong>No centres todo tu crecimiento &#250;nicamente en aprender tecnolog&#237;as.</strong></p><p>Aprende tambi&#233;n a comunicar ideas.<br>A explicar problemas.<br>A pedir ayuda sin sentir verg&#252;enza.<br>A escuchar antes de implementar.<br>Y a entender realmente el problema antes de pensar en la soluci&#243;n.</p><p>Porque muchas veces la diferencia entre un programador junior y uno senior no est&#225; solamente en el c&#243;digo que escribe.</p><p>Est&#225; en c&#243;mo piensa, c&#243;mo se comunica y c&#243;mo trabaja con las personas que tiene alrededor.</p><p>Y, curiosamente, esa termin&#243; siendo la habilidad que m&#225;s hizo crecer mi carrera como desarrollador.</p><p>Nos leemos el pr&#243;ximo domingo.</p><p>Juli&#225;n.</p>]]></content:encoded></item><item><title><![CDATA[Lo que nadie te explica cuando aprendes backend]]></title><description><![CDATA[Lo que aprend&#237; construyendo el backend de F&#225;cilSEO]]></description><link>https://ceroasenior.substack.com/p/lo-que-nadie-te-explica-cuando-aprendes</link><guid isPermaLink="false">https://ceroasenior.substack.com/p/lo-que-nadie-te-explica-cuando-aprendes</guid><dc:creator><![CDATA[Julián Campos]]></dc:creator><pubDate>Sun, 03 May 2026 15:31:01 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/913dfc63-6eb2-4a73-afec-6fd67a621919_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hace un par de entregas de la Newsletter hice la presentaci&#243;n en comunidad de mi &#250;ltimo proyecto, <strong><a href="https://facilseo.com/?utm_source=substack&amp;utm_medium=social&amp;utm_campaign=newsletter_backend">F&#225;cilSEO.com</a></strong>.</p><p>En esta entrega te cont&#233; de d&#243;nde hab&#237;a salido el proyecto, por qu&#233; lo hab&#237;a recuperado despu&#233;s de tenerlo meses aparcado y qu&#233; problema intentaba resolver: dejar de hacer an&#225;lisis SEO y reportes a mano cada vez que entraba un cliente nuevo.</p><p>En esa edici&#243;n te ense&#241;&#233; la parte visible del producto. </p><p>La parte que cualquier usuario puede entender r&#225;pido: a&#241;adir proyectos, analizar URLs, ver recomendaciones, conectar Search Console, generar informes y automatizar reportes. </p><p><strong>Pero tambi&#233;n te dije que me estaba dejando fuera toda la parte t&#233;cnica.</strong></p><p>Y precisamente de eso va esta entrega.</p><div><hr></div><p><strong>F&#225;cilSEO</strong> se trata una plataforma destinada a ayudar a los an&#225;lisis SEO y de rendimiento web, con el objetivo de facilitarte los an&#225;lisis, la b&#250;squeda de mejoras en tu web, la elaboraci&#243;n de informes y automatizaciones para ti o tus clientes.</p><p style="text-align: center;">Puedes usar el c&#243;digo <strong>CEROASENIOR15 </strong>en el momento del registro para tener 15 d&#237;as GRATIS del plan pro (no hace falta meter tarjeta alguna ni se te cobrar&#225; nada al acabar el periodo de prueba)</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://facilseo.com/?utm_source=substack&amp;utm_medium=social&amp;utm_campaign=newsletter_backend&quot;,&quot;text&quot;:&quot;Pruebalo Aqui&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://facilseo.com/?utm_source=substack&amp;utm_medium=social&amp;utm_campaign=newsletter_backend"><span>Pruebalo Aqui</span></a></p><div><hr></div><p>Hoy quiero ense&#241;arte c&#243;mo est&#225; montado el backend de F&#225;cilSEO y no para hacer una lista de tecnolog&#237;as ni para venderte que usar Docker o colas te convierte en mejor desarrollador, porque esa ser&#237;a una conclusi&#243;n bastante pobre.</p><p>La idea es otra: <strong>un backend no se complica cuando tiene muchas rutas,</strong> se complica cuando no sabes qu&#233; responsabilidad tiene cada parte del sistema.</p><p>Y F&#225;cilSEO, aunque sea un MVP, no pod&#237;a construirse como una simple API que recibe una URL, analiza una web y devuelve un JSON.</p><p>Sobre el papel suena sencillo: el usuario mete una URL, el backend la analiza y el frontend muestra el resultado.</p><p>Pero cuando te pones a construirlo de verdad, te das cuenta de que analizar una web no es una operaci&#243;n normal.</p><p>No es como hacer login. No es como guardar un proyecto. No es como actualizar un perfil de usuario.</p><p>Analizar una web implica depender de cosas que no controlas: <strong>webs lentas, errores inesperados, contenido que solo aparece tras ejecutar JavaScript, APIs externas que tardan o directamente fallan.</strong></p><p>Y si metes todo eso dentro de una petici&#243;n HTTP normal, est&#225;s comprando papeletas para tener problemas.</p><h2>El backend no pod&#237;a ser solo una API</h2><p>Cuando empiezas en backend es normal imaginarlo as&#237;: el frontend hace una petici&#243;n, Laravel la recibe, consulta la base de datos y devuelve una respuesta.</p><p>Para muchas partes de F&#225;cilSEO esto funciona perfectamente como para crear proyectos, consultar informes o actualizar configuraciones.</p><p>Todo eso encaja bien en ese modelo, pero el problema aparece con las <strong>tareas pesadas.</strong></p><p>Un an&#225;lisis SEO no deber&#237;a competir con un login, un informe grande no deber&#237;a afectar a la navegaci&#243;n del panel, un env&#237;o de email no deber&#237;a bloquear una acci&#243;n importante del usuario y  una sincronizaci&#243;n externa no deber&#237;a ralentizar cosas que no tienen nada que ver.</p><p>Aqu&#237; apareci&#243; una de las primeras decisiones importantes: <strong>separar lo urgente de lo pesado.</strong></p><p>La API tiene que responder r&#225;pido ya que su trabajo no es hacerlo todo, sino coordinar:</p><p><strong>Recibe la petici&#243;n, valida, guarda el estado inicial y delega el trabajo pesado.</strong></p><p>Y esa otra parte son los <strong>workers</strong>.</p><p>Cuando un usuario lanza un an&#225;lisis, el backend no lo ejecuta en ese momento, sino que registra que hay un an&#225;lisis pendiente y manda un trabajo a una <strong>cola.</strong></p><p>Despu&#233;s, un proceso en segundo plano recoge ese trabajo y lo ejecuta.</p><h2>Cambio de mentalidad</h2><p>Este cambio parece t&#233;cnico, pero en realidad es de mentalidad.</p><p>Dejas de pensar en el backend como una m&#225;quina que responde a todo al instante.</p><p>Y empiezas a verlo como un sistema donde cada pieza tiene un papel claro.</p><p>La API coordina, los workers ejecutan, el usuario consulta el estado y el sistema puede seguir funcionando aunque haya tareas lentas en marcha.</p><p>Esto, cuando lo interiorizas, <strong>cambia completamente c&#243;mo dise&#241;as backend.</strong></p><p>F&#225;cilSEO est&#225; montado con varios servicios en <strong>Docker</strong>, pero no porque Docker sea arquitectura por s&#237; mismo ya que docker solo te da contenedores.</p><p>La arquitectura aparece cuando decides qu&#233; responsabilidad tiene cada uno.</p><p>Aqu&#237; hay un backend principal en Laravel, una base de datos que guarda el estado persistente y luego Redis que ayuda con cach&#233; y datos temporales.</p><p>Hasta aqu&#237;, todo bastante est&#225;ndar.</p><p>Lo interesante llega cuando miras las colas ya que no hay una &#250;nica cola donde se mete todo, sino que <strong>hay colas separadas seg&#250;n el tipo de trabajo.</strong></p><p><strong>An&#225;lisis pesados, tareas generales, emails o s incronizaciones.</strong></p><p>Esto, aunque parezca un detalle interno, es clave porque si metes todo en una &#250;nica cola, cualquier pico de carga puede afectar a todo lo dem&#225;s.</p><p>Unos cuantos an&#225;lisis pesados pueden retrasar emails o una sincronizaci&#243;n lenta puede bloquear otras tareas.</p><p><strong>Separar colas permite aislar la carga.</strong></p><p>Y eso no se nota en local, pero cuando hay usuarios reales ves realmente la optimizaci&#243;n.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscr&#237;bete ahora&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/subscribe"><span>Suscr&#237;bete ahora</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/lo-que-nadie-te-explica-cuando-aprendes?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Compartir&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/lo-que-nadie-te-explica-cuando-aprendes?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Compartir</span></a></p><div><hr></div><h2>Una idea importante si est&#225;s empezando</h2><p>Si eres junior, aqu&#237; es f&#225;cil sacar una mala conclusi&#243;n.</p><p>Pensar que necesitas Docker, Redis, colas y toda esta infraestructura desde el primer d&#237;a.</p><p>Y no, esa no es la lecci&#243;n.</p><p>La lecci&#243;n es otra: <strong>antes de pensar en herramientas, piensa en responsabilidades.</strong></p><p>Cuando est&#233;s dise&#241;ando una aplicaci&#243;n, hazte estas preguntas:</p><ul><li><p>Qu&#233; debe responder r&#225;pido.</p></li><li><p>Qu&#233; puede ejecutarse en segundo plano.</p></li><li><p>Qu&#233; puede fallar.</p></li><li><p>Qu&#233; no deber&#237;a bloquear al usuario.</p></li></ul><p>Si entiendes eso, la arquitectura empieza a tener sentido y las herramientas dejan de ser postureo t&#233;cnico para convertirse en soluciones a problemas reales.</p><p>Al final, todo esto no va de usar m&#225;s cosas, sino que va de entender mejor el problema que est&#225;s resolviendo.</p><p>Y <strong><a href="https://facilseo.com/?utm_source=substack&amp;utm_medium=social&amp;utm_campaign=newsletter_backend">F&#225;cilSEO</a></strong> me est&#225; sirviendo justo para eso: para t<strong>omar decisiones reales, con problemas reales, y ver qu&#233; pasa cuando el sistema empieza a tener vida m&#225;s all&#225; de localhost.</strong></p><p>En las pr&#243;ximas entregas vamos a seguir usando F&#225;cilSEO como excusa para aprender backend de verdad.</p><p><strong>Iremos bajando m&#225;s al detalle:</strong> c&#243;mo tratar webs modernas que dependen de JavaScript, c&#243;mo est&#225; montado el renderer y c&#243;mo se dise&#241;a un sistema que sigue siendo razonable cuando empiezan a fallar cosas.</p><p>Nos leemos en la pr&#243;xima,</p><p><strong>Juli&#225;n</strong></p>]]></content:encoded></item><item><title><![CDATA[La gente quiere trabajar conmigo]]></title><description><![CDATA[Por qu&#233; la gente no trabaja con el mejor, sino con quien reconoce, conf&#237;a y recuerda]]></description><link>https://ceroasenior.substack.com/p/la-gente-quiere-trabajar-conmigo</link><guid isPermaLink="false">https://ceroasenior.substack.com/p/la-gente-quiere-trabajar-conmigo</guid><dc:creator><![CDATA[Julián Campos]]></dc:creator><pubDate>Sun, 26 Apr 2026 11:38:10 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/609fba9a-f13b-4603-acf2-9a119fce3632_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Ayer estuve en la <strong>WordCamp M&#225;laga 2026</strong>. Para quienes no las conozc&#225;is, son los congresos oficiales de la comunidad WordPress: eventos organizados por voluntarios donde se respira tecnolog&#237;a, dise&#241;o y estrategia.</p><p>Hubo charlas de todo tipo, pero dos me marcaron: una sobre email marketing de <strong><a href="/__u/substack.com/@margacamps?utm_source=global-search">Marga Camps</a></strong> y otra sobre marca y copywriting de <strong><a href="/__u/substack.com/@rosamorel?utm_source=global-search">Rosa Morel</a></strong>.</p><p>Fue en esta &#250;ltima donde tuve un momento de claridad. </p><p>Una reflexi&#243;n que conecta directamente con lo que significa ser un programador hoy en d&#237;a y c&#243;mo gestionar tu carrera profesional.</p><div><hr></div><p style="text-align: center;">Por cierto&#8230; &#191;Has visto mi &#250;ltimo lanzamiento?</p><p style="text-align: center;">La semana pasada lanc&#233; <strong>F&#225;cilSEO</strong>, una plataforma destinada a ayudar a los an&#225;lisis SEO y de rendimiento web, con el objetivo de facilitarte los an&#225;lisis, la b&#250;squeda de mejoras en tu web, la elaboraci&#243;n de informes y automatizaciones para ti o tus clientes.</p><p style="text-align: center;">Puedes usar el c&#243;digo <strong>CEROASENIOR15 </strong>en el momento del registro para tener 15 d&#237;as GRATIS del plan pro (no hace falta meter tarjeta alguna ni se te cobrar&#225; nada al acabar el periodo de prueba)</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://facilseo.com/?utm_source=substack&amp;utm_medium=social&amp;utm_campaign=marca_personal&quot;,&quot;text&quot;:&quot;Pr&#250;ebalo aqu&#237;&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://facilseo.com/?utm_source=substack&amp;utm_medium=social&amp;utm_campaign=marca_personal"><span>Pr&#250;ebalo aqu&#237;</span></a></p><div><hr></div><p>Antes de empezar a contarte un poco sobre la reflexi&#243;n que me llev&#233; (y quiero compartir contigo) de la charla de Rosa Morel, d&#233;jame que te cuente qui&#233;n es y por qu&#233; es importante hacerle caso (al menos en esto).</p><p>Rosa lleva 17 a&#241;os siendo una de las voces m&#225;s influyentes del copywriting en espa&#241;ol. En su ponencia, solt&#243; una frase que me qued&#243; grabada a fuego:</p><blockquote><p><strong>&#8220;Las personas quieren trabajar conmigo.&#8221;</strong></p></blockquote><p>No dijo que quieren trabajar con una copywriter, ni con la m&#225;s barata. Quieren trabajar con <strong>ella</strong>.</p><p>En un mundo donde la IA puede generar c&#243;digo y contenido en segundos, crear una voz y una identidad es lo &#250;nico que te hace irreemplazable. </p><p>Cuando construyes tu marca personal, dejas de competir por habilidades t&#233;cnicas y empiezas a competir por <strong>percepci&#243;n, confianza y trayectoria</strong>.</p><p>Tu trabajo deja de ser lo que haces, para convertirse en <strong>lo que representas</strong></p><h2>Qu&#233; me llev&#243; a crear mi marca personal</h2><p>Porque, si te soy sincero, eso fue exactamente lo que yo intent&#233; hacer hace unos a&#241;os.</p><p>Si est&#225;s leyendo esta newsletter, probablemente vienes de Twitter (o alguien te la ha recomendado).</p><p>Y no es casualidad, ya que tengo ah&#237; una comunidad de casi 25.000 personas interesadas en el mundo del desarrollo.</p><p>Ah&#237; es donde he construido la mayor parte de mi marca personal.</p><p>Empec&#233; en 2022, en un momento en el que decid&#237; darle un giro completo a mi vida: mudarme a Francia, dejar atr&#225;s mi situaci&#243;n anterior y apostar por convertirme en programador.</p><p>Pero entend&#237; algo r&#225;pido: buscar trabajo no era suficiente, si quer&#237;a destacar, ten&#237;a que hacer algo m&#225;s: t<strong>en&#237;a que diferenciarme.</strong></p><p>No porque no creyera que mis habilidades t&#233;cnicas (hard y soft skills) no fueran suficientes, sino porque ve&#237;a c&#243;mo estaba evolucionando el mercado despu&#233;s de un par de a&#241;os tras la pandemia del COVID y ve&#237;a que saber programar, no iba a ser suficiente en el futuro.</p><p>Y ah&#237; fue donde empec&#233; a construir mi marca personal: creando contenido, compartiendo mi proceso y ense&#241;ando lo que iba aprendiendo en el camino.</p><h2>&#191;Por qu&#233; deber&#237;as t&#250; trabajar tu marca personal?</h2><p>Todo esto suena muy bien en teor&#237;a. Pero&#8230; <strong>&#191;qu&#233; significa realmente construir una marca personal?</strong></p><p>Porque muchas veces se queda en algo abstracto. </p><p>Si eres junior, &#250;ltimamente habr&#225;s escuchado (m&#225;s con la poca oferta que hay actualmente) que hay que <strong>diferenciarse, ser aut&#233;ntico, aportar valor</strong>.. pero nadie te explica qu&#233; cambia de verdad cuando lo haces.</p><p>Yo voy a intentar diferenciarme (de verdad) y darte motivos de por qu&#233; deber&#237;as trabajar tu marca personal para crecer profesionalmente, pero basados en mi experiencia.</p><p>En mi caso, el trabajar mi marca ayud&#243;, con el tiempo, a que hubiera <strong>tres cambios muy claros.</strong></p><h3>1. Dej&#233; de depender &#250;nicamente de buscar oportunidades</h3><p>Las oportunidades empezaron a encontrarme a m&#237;.</p><p>Durante los a&#241;os que estuve trabajando mi marca personal y mi presencia online, me llegaron gracias a esto oportunidades para colaborar con empresas como creador de contenido y, tambi&#233;n, oportunidades laborales.</p><p>Tienes que tener claro que el crear tu marca personal te va a aportar beneficios laborales tanto si eres freelance como si trabajas por cuenta ajena.</p><p>Si eres freelance, significa dejar de perseguir clientes constantemente. Empiezas a generar un flujo de personas que ya vienen con inter&#233;s previo en lo que haces.</p><p>Y si trabajas en empresa, significa algo igual de valioso: <strong>visibilidad</strong>.</p><p>Recruiters, managers o incluso otros equipos empiezan a fijarse en ti sin que tengas que estar enviando CVs constantemente.</p><p>Y esto lo he visto no solo en mi caso, sino en varios creadores de contenido que siguen trabajando para empresas y que cuando han salido de una, han publicado un post en LinkedIn y al cabo de las semanas ya hab&#237;an cerrado una oferta.</p><h3>2. Empec&#233; a generar confianza en los dem&#225;s.</h3><p>El trabajar mi marca personal tambi&#233;n me ayud&#243; a <strong>generar confianza antes incluso de hablar con alguien.</strong></p><p>Cuando alguien llegaba, esta persona ya sab&#237;a c&#243;mo pensaba, c&#243;mo trabajaba y qu&#233; pod&#237;a esperar.</p><p>No empez&#225;bamos desde cero. Esta persona ten&#237;a mucha informaci&#243;n sobre m&#237; y mi contexto.</p><p>Y esto, de nuevo, cambia mucho las reglas del juego.</p><p>Como freelance, reduces fricci&#243;n en ventas: menos llamadas eternas, menos necesidad de convencer.</p><p>Y como empleado, te posiciona mejor en procesos de selecci&#243;n o incluso dentro de tu propia empresa.</p><p>No eres un desconocido, eres alguien con contexto.</p><h3>3. Dejas de ser intercambiable</h3><p>O al menos tan f&#225;cilmente, porque programadores hay muchos. </p><p>Pero mi forma de comunicar, de ense&#241;ar y de compartir&#8230; eso ya no es tan f&#225;cil de replicar, y aqu&#237; est&#225; uno de los puntos m&#225;s importantes:</p><p><strong>Sin marca personal, compites por precio o por CV.</strong></p><p>Con marca personal, compites por qui&#233;n eres.</p><p>Y eso aplica a todo: si eres <strong>freelance</strong> puedes justificar mejor tus tarifas y si <strong>buscas trabajo</strong> en empresa puedes diferenciarte m&#225;s all&#225; de tu experiencia t&#233;cnica.</p><h2>C&#243;mo puedes construir una marca personal</h2><p>Ahora bien. Todo esto suena muy bien, pero no ocurre por publicar dos hilos en Twitter o subir tres v&#237;deos a YouTube.</p><p>Hay algo m&#225;s profundo detr&#225;s.</p><p>En mi caso, hubo varias decisiones que marcaron la diferencia:</p><p>La primera fue <strong>dejar de intentar parecer experto</strong> y empezar a documentar.</p><p>Durante mucho tiempo pens&#233; que ten&#237;a que saber m&#225;s para poder ense&#241;ar. Pero la realidad es que lo que m&#225;s conecta no es el resultado, es el proceso. Empec&#233; a compartir lo que iba aprendiendo, los errores que comet&#237;a, las dudas que ten&#237;a&#8230;</p><p>Y eso hizo que muchas personas se vieran reflejadas porque lo que fui mostrando era el camino que iba recorriendo.</p><p><strong>La segunda fue tener muy claro a qui&#233;n le estaba hablando.</strong></p><p>No escrib&#237;a para todo el mundo, sino que lo hac&#237;a para un p&#250;blico muy concreto, para personas que estaban en un punto m&#225;s inicial de su carrera.</p><p>Es por eso que si ves mis primeros hilos de Twitter, ver&#225;s que se trataban la mayor&#237;a de hilos de cursos gratuitos para aprender las bases de programaci&#243;n.</p><p>Gente que quer&#237;a empezar en programaci&#243;n, que estaba perdida o que estaba pasando por el mismo proceso que yo hab&#237;a pasado meses antes.</p><p>Y eso cambia completamente c&#243;mo comunicas.</p><p><strong>La tercera fue entender que esto no va de viralidad.</strong></p><p>Todo esto trata de repetici&#243;n (esto, de hecho, lo he aprendido hace poco).</p><p>Durante los &#250;ltimos meses he estado muy centrado en mi trabajo, en los proyectos de mis clientes y es por eso que he dejado las redes un poco (bastante) de lado, notando una bajada de todo: impresiones y oportunidades.</p><p>Y esto no ha pasado porque el contenido que haga sea menos interesante, sino porque he sido mucho menos constante.</p><p>Cada vez tengo m&#225;s claro que redes y algoritmos premian que est&#233;s pasando tiempo en sus redes, nunca mejor dicho.</p><p>As&#237; que adem&#225;s de hacer buen y &#250;til contenido tienes que tener claro que esto tambi&#233;n trata de <strong>estar ah&#237; incluso cuando parece que nadie est&#225; mirando.</strong></p><p>De publicar cuando no tienes feedback, de seguir cuando los n&#250;meros no acompa&#241;an y de construir algo que no da resultados inmediatos.</p><p>Porque la marca personal no crece en picos. <strong>Crece en acumulaci&#243;n.</strong></p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscr&#237;bete ahora&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/subscribe"><span>Suscr&#237;bete ahora</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/la-gente-quiere-trabajar-conmigo?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Compartir&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/la-gente-quiere-trabajar-conmigo?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Compartir</span></a></p><div><hr></div><p>Y hay una &#250;ltima cosa que no se suele decir: <strong>tu marca personal no es solo el contenido que publicas.</strong></p><p>Es c&#243;mo piensas, c&#243;mo explicas, c&#243;mo enfocas los problemas: <strong>es tu criterio.</strong></p><p>Porque al final, lo que hace que alguien te siga o conf&#237;e en ti no es que sepas mucho, es c&#243;mo haces que lo que sabes tenga sentido para otros.</p><p>Cuando aplicas y asimilas esto, tu mentalidad empieza a cambiar y con el tiempo pasa algo curioso.</p><p>Dejas de pensar en &#8220;qu&#233; contenido hago hoy&#8221; y empiezas a pensar en &#8220;qu&#233; quiero decir realmente&#8221;.</p><p>Porque en un mundo donde la IA puede generar contenido en segundos&#8230; lo &#250;nico que no puede replicar es esto: <strong>tu historia y tu manera de ver el mundo.</strong></p><p>Y por eso, al final, la frase de Rosa Morel cobra todo el sentido:</p><p>&#8220;Las personas quieren trabajar conmigo.&#8221;</p><p>No por lo que sabes, sino por qui&#233;n eres.</p><p>Ten esto muy claro y ll&#233;vate este aprendizaje:</p><p><strong>No esperes a sentirte preparado para empezar a construir tu marca personal. </strong>Empieza ahora.</p><p>Porque dentro de unos meses, o unos a&#241;os&#8230; te alegrar&#225;s de haberlo hecho.</p><p><strong>Juli&#225;n</strong></p>]]></content:encoded></item><item><title><![CDATA[Te he engañado]]></title><description><![CDATA[El MVP que no te ense&#241;&#233;&#8230; y que ya puedes probar hoy]]></description><link>https://ceroasenior.substack.com/p/te-he-enganado</link><guid isPermaLink="false">https://ceroasenior.substack.com/p/te-he-enganado</guid><dc:creator><![CDATA[Julián Campos]]></dc:creator><pubDate>Sun, 19 Apr 2026 06:57:19 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/5befbd93-7a07-42e4-b6c3-c02dfc109b2c_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Te he enga&#241;ado.</strong></p><p>S&#237;, lo he hecho, aunque antes de que cierres enfadado este email, d&#233;jame que te expliqu&#233; qu&#233; he hecho, por qu&#233; lo he hecho y por qu&#233; el resultado de todo esto ha sido de que te he enga&#241;ado sin quererlo.</p><p>Te prometo de que te va a sorprender un poco todo esto pero, primero, empezar&#233; a explicar de qu&#233; va todo esto.</p><p>Durante unos cuantos meses, desde comienzos de noviembre, llevo compartiendo en la Newsletter el desarrollo de un producto, <strong><a href="https://KPIAds.app">KPIAds.app</a></strong></p><p>El objetivo era compartir contigo el desarrollo desde completamente cero, a partir de una idea, de un producto digital que pudiera dise&#241;ar, desarrollar, vender y ense&#241;arte todo el proceso sin ning&#250;n filtro.</p><p><strong>Te quer&#237;a ense&#241;ar el desarrollo de mi primer MVP y&#8230; te he fallado y enga&#241;ado</strong>.</p><p>Pero ojo, no es porque no est&#233; desarrollando KPIAds o no te lo vaya a mostrar.</p><p>Aunque voy lento (el trabajo como freelance los &#250;ltimos meses no va mal y me ocupa bastante tiempo), sigo con KPIAds.</p><p>Lo que pasa es que&#8230; <strong>no ha sido mi primer MVP ni el primer proyecto que lanzo en 2026.</strong></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#191;Te gustan las entregas de CERO a SENIOR? No olvides suscribirte y recibir&#225;s semanalmente herramientas que cambiar&#225;n tu trabajo como programador.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p>Igual me he puesto un poco dram&#225;tico con lo de que te he enga&#241;ado, ya que intento ser siempre lo m&#225;s honesto posible, ya sea en esta Newsletter, redes o la vida misma.</p><p>&#191;La verdad? <strong>En verano empec&#233; a desarrollar un proyecto, hice todo el backend y&#8230; me olvid&#233;</strong> hasta hace un par de semanas en la que me salt&#243; la renovaci&#243;n del dominio.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!i69V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a730b1f-1b1d-4068-9684-873265e29c9f_1536x2048.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!i69V!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a730b1f-1b1d-4068-9684-873265e29c9f_1536x2048.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!i69V!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a730b1f-1b1d-4068-9684-873265e29c9f_1536x2048.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!i69V!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a730b1f-1b1d-4068-9684-873265e29c9f_1536x2048.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!i69V!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a730b1f-1b1d-4068-9684-873265e29c9f_1536x2048.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!i69V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a730b1f-1b1d-4068-9684-873265e29c9f_1536x2048.jpeg" width="494" height="658.5535714285714" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1a730b1f-1b1d-4068-9684-873265e29c9f_1536x2048.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1941,&quot;width&quot;:1456,&quot;resizeWidth&quot;:494,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!i69V!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a730b1f-1b1d-4068-9684-873265e29c9f_1536x2048.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!i69V!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a730b1f-1b1d-4068-9684-873265e29c9f_1536x2048.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!i69V!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a730b1f-1b1d-4068-9684-873265e29c9f_1536x2048.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!i69V!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a730b1f-1b1d-4068-9684-873265e29c9f_1536x2048.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Aqu&#237; me tienes, el d&#237;a de mi cumplea&#241;os, en Menorca trabajando en el backend mientras desayunaba en un bar (algo chic) de la playa.</figcaption></figure></div><p>Y bueno, pues me dije&#8230; &#191;y por qu&#233; no lo continuamos? total, &#8220;solo&#8221; me queda el frontend y quiz&#225;s, tirando con Codex, pueda sacarlo m&#225;s o menos r&#225;pido.</p><p>Y aqu&#237; estoy, dos semanas y mucho trabajo despu&#233;s, sacando a la luz <strong><a href="https://facilseo.com/?utm_source=substack&amp;utm_medium=email&amp;utm_campaign=lanzamiento">FacilSEO.com</a></strong> y, por supuesto, cont&#225;ndotelo a ti el primero de todos, que para algo est&#225;s suscrito a la Newsletter.</p><h2>&#191;Qu&#233; es FacilSEO?</h2><p>Empezar&#233; por el principio explicando en qu&#233; consiste FacilSEO (aunque esto es el final de todo el desarrollo).</p><p>FacilSEO se trata de una herramienta que he ideado para <strong>facilitar todo el an&#225;lisis SEO de una p&#225;gina web</strong>, tener todos los datos, recomendaciones, reportes&#8230; en fin, una herramienta para facilitarte toda la gesti&#243;n SEO y de rendimiento de tu web.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!-ZFw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9febdad-3110-4c0f-aa32-cf8c725d7dd7_1559x580.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!-ZFw!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9febdad-3110-4c0f-aa32-cf8c725d7dd7_1559x580.png 424w, /__u/substackcdn.com/image/fetch/$s_!-ZFw!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9febdad-3110-4c0f-aa32-cf8c725d7dd7_1559x580.png 848w, /__u/substackcdn.com/image/fetch/$s_!-ZFw!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9febdad-3110-4c0f-aa32-cf8c725d7dd7_1559x580.png 1272w, /__u/substackcdn.com/image/fetch/$s_!-ZFw!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9febdad-3110-4c0f-aa32-cf8c725d7dd7_1559x580.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!-ZFw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9febdad-3110-4c0f-aa32-cf8c725d7dd7_1559x580.png" width="1456" height="542" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d9febdad-3110-4c0f-aa32-cf8c725d7dd7_1559x580.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:542,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:106289,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://ceroasenior.substack.com/i/194493066?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9febdad-3110-4c0f-aa32-cf8c725d7dd7_1559x580.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!-ZFw!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9febdad-3110-4c0f-aa32-cf8c725d7dd7_1559x580.png 424w, /__u/substackcdn.com/image/fetch/$s_!-ZFw!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9febdad-3110-4c0f-aa32-cf8c725d7dd7_1559x580.png 848w, /__u/substackcdn.com/image/fetch/$s_!-ZFw!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9febdad-3110-4c0f-aa32-cf8c725d7dd7_1559x580.png 1272w, /__u/substackcdn.com/image/fetch/$s_!-ZFw!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9febdad-3110-4c0f-aa32-cf8c725d7dd7_1559x580.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>El proyecto naci&#243; como una <strong>necesidad propia</strong> y es que durante un a&#241;o he estado trabajando mano a mano con una agencia de Growth Partner y me cansaba de hacer an&#225;lisis a webs y tener que pasar a mano reportes de c&#243;mo estaba la web a nivel SEO y a nivel de mejoras de rendimiento (pagespeed).</p><p>A cada cliente que entraba, me ped&#237;an un PDF con el an&#225;lisis de la web y mejoras que se pod&#237;an hacer y&#8230; a cada cliente que entraba, perd&#237;a mucho tiempo en hacer esto a mano.</p><p>As&#237; que pens&#233; en utilizar alguna herramienta para hacer esto pero.. ninguna me convenci&#243;.</p><p>No porque no haya herramientas que te hacen buenos an&#225;lisis o no haya diferentes herramientas con las que pueda hacer las diferentes partes de estos reportes&#8230; sino porque no hab&#237;a una herramienta que me permitiera hacer todo en ella y tener un <strong>PDF listo para entregar.</strong></p><p>Yo quer&#237;a algo que me permitiera a&#241;adir un proyecto (para tenerlo as&#237; controlado a lo largo del tiempo), analizar y generar un PDF con todo sin dolores de cabeza.</p><p>Y bueno,  ya sabemos el resultado&#8230; como soy desarrollador, me lo hice a m&#237; mismo.</p><h2>Las funcionalidades (por ahora) de FacilSEO</h2><p>Te voy a ense&#241;ar lo que ya puedes hacer hoy con FacilSEO, pero no como una lista de cosas t&#233;cnicas&#8230; sino como lo que realmente significa para ti:</p><p>&#8226; <strong>Detectar en minutos qu&#233; est&#225; frenando el SEO de una web</strong>,  sin tener que revisar 10 herramientas distintas ni perder horas investigando.</p><p>&#8226; <strong>Saber exactamente qu&#233; mejorar en velocidad</strong> (m&#243;vil y escritorio),  con acciones claras, no m&#233;tricas vac&#237;as.</p><p>&#8226; <strong>Tener una puntuaci&#243;n SEO clara y accionable</strong>, para entender en segundos si una web est&#225; bien&#8230; o necesita ayuda urgente.</p><p>&#8226; <strong>Gestionar m&#250;ltiples proyectos sin caos</strong>, puedes a&#241;adir URLs manualmente, importa sitemaps o CSV y ten todo organizado desde el minuto uno.</p><p>&#8226; <strong>Ver qu&#233; cambia entre an&#225;lisis</strong>, para no trabajar a ciegas y saber si lo que haces realmente mejora algo.</p><p>&#8226; <strong>Trabajar con datos reales de Google Search Console</strong>, sin depender de estimaciones o datos poco fiables.</p><p>&#8226; <strong>Monitorizar keywords con hist&#243;rico</strong> y detectar oportunidades sin estar entrando cada d&#237;a a mirar.</p><p>&#8226; <strong>Automatizar informes para clientes o equipo</strong>. Semanal, quincenal o mensual&#8230; sin volver a hacerlos a mano nunca m&#225;s.</p><p>&#8226; Enviar informes profesionales (con tu branding) para dejar de parecer uno m&#225;s y empezar a parecer una agencia seria.</p><p>&#8226; Probar todo gratis con un an&#225;lisis por URL y ver el valor en menos de 2 minutos.</p><p>B&#225;sicamente, lo que he construido es la herramienta que me habr&#237;a ahorrado decenas de horas durante el &#250;ltimo a&#241;o.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!7lkF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ee222bd-2c6d-4dd2-bfeb-01dcb970e74d_1360x952.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!7lkF!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ee222bd-2c6d-4dd2-bfeb-01dcb970e74d_1360x952.png 424w, /__u/substackcdn.com/image/fetch/$s_!7lkF!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ee222bd-2c6d-4dd2-bfeb-01dcb970e74d_1360x952.png 848w, /__u/substackcdn.com/image/fetch/$s_!7lkF!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ee222bd-2c6d-4dd2-bfeb-01dcb970e74d_1360x952.png 1272w, /__u/substackcdn.com/image/fetch/$s_!7lkF!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ee222bd-2c6d-4dd2-bfeb-01dcb970e74d_1360x952.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!7lkF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ee222bd-2c6d-4dd2-bfeb-01dcb970e74d_1360x952.png" width="512" height="358.4" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8ee222bd-2c6d-4dd2-bfeb-01dcb970e74d_1360x952.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:952,&quot;width&quot;:1360,&quot;resizeWidth&quot;:512,&quot;bytes&quot;:174515,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://ceroasenior.substack.com/i/194493066?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ee222bd-2c6d-4dd2-bfeb-01dcb970e74d_1360x952.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!7lkF!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ee222bd-2c6d-4dd2-bfeb-01dcb970e74d_1360x952.png 424w, /__u/substackcdn.com/image/fetch/$s_!7lkF!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ee222bd-2c6d-4dd2-bfeb-01dcb970e74d_1360x952.png 848w, /__u/substackcdn.com/image/fetch/$s_!7lkF!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ee222bd-2c6d-4dd2-bfeb-01dcb970e74d_1360x952.png 1272w, /__u/substackcdn.com/image/fetch/$s_!7lkF!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ee222bd-2c6d-4dd2-bfeb-01dcb970e74d_1360x952.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Y ahora la tienes t&#250; tambi&#233;n.</p><h2>Pero el desarrollo no acaba aqu&#237;</h2><p>La verdad, tengo la sensaci&#243;n de que es una lista grande de funcionalidades&#8230; que aporta un valor muy min&#250;sculo.</p><p>Creo, sinceramente, que FacilSEO tiene mucho m&#225;s margen de mejora y muchas m&#225;s funcionalidades que puedo desarrollar y con las que el valor de la herramienta aumentar&#237;a mucho.</p><p>Peeeeero.. es un MVP y hay que lanzarlo r&#225;pido.</p><p>Hay que lanzar r&#225;pido, ver si hay un m&#237;nimo inter&#233;s, validar la idea y si esos primeros tests salen bien.. entonces seguir creciendo la herramienta.</p><p>Tengo una gran lista de ideas para desarrollar: desde el an&#225;lisis de competidores, optimizaci&#243;n global teniendo en cuenta de si un sitio tiene art&#237;culos o no&#8230; hasta la integraci&#243;n de la IA.</p><p>Todo depender&#225; del feedback que reciba en el proyecto.</p><h2><strong>Puedes probar FacilSEO desde hoy (early adopters)</strong></h2><p>As&#237; que s&#237;, he decidido abrir <a href="https://facilseo.com/?utm_source=substack&amp;utm_medium=email&amp;utm_campaign=lanzamiento">FacilSEO desde ya</a>.</p><p>Pero no como un lanzamiento perfecto&#8230; sino como una versi&#243;n early para los primeros que quieran probarlo, usarlo y ayudarme a mejorarlo.</p><p>Y si est&#225;s leyendo esto, est&#225;s dentro de ese grupo.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!lqqo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74fd1a52-8f85-406a-a8d3-72f53473a770_1573x981.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!lqqo!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74fd1a52-8f85-406a-a8d3-72f53473a770_1573x981.png 424w, /__u/substackcdn.com/image/fetch/$s_!lqqo!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74fd1a52-8f85-406a-a8d3-72f53473a770_1573x981.png 848w, /__u/substackcdn.com/image/fetch/$s_!lqqo!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74fd1a52-8f85-406a-a8d3-72f53473a770_1573x981.png 1272w, /__u/substackcdn.com/image/fetch/$s_!lqqo!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74fd1a52-8f85-406a-a8d3-72f53473a770_1573x981.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!lqqo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74fd1a52-8f85-406a-a8d3-72f53473a770_1573x981.png" width="1456" height="908" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/74fd1a52-8f85-406a-a8d3-72f53473a770_1573x981.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:908,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:668723,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://ceroasenior.substack.com/i/194493066?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74fd1a52-8f85-406a-a8d3-72f53473a770_1573x981.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!lqqo!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74fd1a52-8f85-406a-a8d3-72f53473a770_1573x981.png 424w, /__u/substackcdn.com/image/fetch/$s_!lqqo!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74fd1a52-8f85-406a-a8d3-72f53473a770_1573x981.png 848w, /__u/substackcdn.com/image/fetch/$s_!lqqo!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74fd1a52-8f85-406a-a8d3-72f53473a770_1573x981.png 1272w, /__u/substackcdn.com/image/fetch/$s_!lqqo!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74fd1a52-8f85-406a-a8d3-72f53473a770_1573x981.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>&#127379; Tienes una versi&#243;n gratuita para empezar</h3><p>Puedes usar <strong>FacilSEO gratis</strong> desde el minuto 1, sin pagar nada.</p><p>Perfecto para probar c&#243;mo funciona, hacer alg&#250;n an&#225;lisis puntual y ver si encaja contigo.</p><h3>&#127873; 15 d&#237;as gratis + precio early exclusivo</h3><p>Por ser miembro de CERO a SENIOR, puedes probar FacilSEO durante 15 d&#237;as totalmente gratis con este cup&#243;n:</p><p>&#128073; <strong>CEROASENIOR15</strong></p><p>Y adem&#225;s, si decides quedarte:</p><ul><li><p>Precio normal: 10&#8364;/mes (120&#8364;/a&#241;o)</p></li><li><p><strong>Precio early adopters: 90&#8364;/a&#241;o</strong></p></li></ul><p>Es decir, entras antes, pagas menos&#8230; y adem&#225;s puedes influir en c&#243;mo evoluciona el producto.</p><p>Lo que s&#237; valorar&#237;a mucho es si usas</p><h2>Me gustar&#237;a pedirte un favor&#8230;</h2><p>Si decides probar FacilSEO, ya sea con el plan gratuito o con una suscripci&#243;n, me gustar&#237;a pedirte el favor de <strong>pasarme feedback, de lo bueno y de lo malo.</strong></p><p>Yo he creado esta herramienta sabiendo todo el contexto y aunque he intentado pensar en c&#243;mo usar&#237;a la herramienta alguien que viene de nuevas y no tiene ni idea de esto&#8230; igual no lo he conseguido.</p><p>Por eso he habilitado en esta primera versi&#243;n una herramienta para mandarme Feedback.</p><p>Lo tienes disponible en la esquina inferior derecha: un botoncito con un formulario que me mandar&#225; el feedback directa al panel de administrador.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!N-G4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02732cef-662e-4421-8d02-7fc6151a26c9_447x499.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!N-G4!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02732cef-662e-4421-8d02-7fc6151a26c9_447x499.png 424w, /__u/substackcdn.com/image/fetch/$s_!N-G4!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02732cef-662e-4421-8d02-7fc6151a26c9_447x499.png 848w, /__u/substackcdn.com/image/fetch/$s_!N-G4!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02732cef-662e-4421-8d02-7fc6151a26c9_447x499.png 1272w, /__u/substackcdn.com/image/fetch/$s_!N-G4!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02732cef-662e-4421-8d02-7fc6151a26c9_447x499.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!N-G4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02732cef-662e-4421-8d02-7fc6151a26c9_447x499.png" width="447" height="499" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/02732cef-662e-4421-8d02-7fc6151a26c9_447x499.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:499,&quot;width&quot;:447,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:48010,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://ceroasenior.substack.com/i/194493066?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02732cef-662e-4421-8d02-7fc6151a26c9_447x499.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!N-G4!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02732cef-662e-4421-8d02-7fc6151a26c9_447x499.png 424w, /__u/substackcdn.com/image/fetch/$s_!N-G4!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02732cef-662e-4421-8d02-7fc6151a26c9_447x499.png 848w, /__u/substackcdn.com/image/fetch/$s_!N-G4!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02732cef-662e-4421-8d02-7fc6151a26c9_447x499.png 1272w, /__u/substackcdn.com/image/fetch/$s_!N-G4!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02732cef-662e-4421-8d02-7fc6151a26c9_447x499.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Soy consciente de que la herramienta est&#225; lejos de ser perfecta, tanto a nivel de dise&#241;o, usabilidad o de funciones.</p><p>No soy ning&#250;n experto en SEO (ni pretendo serlo), por lo que seguramente muchas personas que est&#233;n en la Newsletter sabr&#225;n mucho m&#225;s que yo y valorar&#237;a mucho su opini&#243;n.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/te-he-enganado?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Compartir&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/te-he-enganado?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Compartir</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscr&#237;bete ahora&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/subscribe"><span>Suscr&#237;bete ahora</span></a></p><div><hr></div><p>Bueno, creo que ya me he explayado bastante sobre el lanzamiento de <strong><a href="https://facilseo.com/?utm_source=substack&amp;utm_medium=email&amp;utm_campaign=lanzamiento">FacilSEO</a></strong>.</p><p>Me he dejado toda la parte t&#233;cnica del desarrollo, pero no te preocupes, en siguientes ediciones de CERO a SENIOR te compartir&#233; las <strong>entra&#241;as t&#233;cnicas tanto de infraestructura, backend y frontend.</strong></p><p>Sin m&#225;s, espero que te resulte &#250;til la herramienta y me compartas qu&#233; te parece.</p><p>Nos leemos en la pr&#243;xima,</p><p>Juli&#225;n.</p>]]></content:encoded></item><item><title><![CDATA[La IA está provocando despidos… ¿o no?]]></title><description><![CDATA[IA, m&#225;rgenes y lo que nadie est&#225; contando.]]></description><link>https://ceroasenior.substack.com/p/la-ia-esta-provocando-despidos-o</link><guid isPermaLink="false">https://ceroasenior.substack.com/p/la-ia-esta-provocando-despidos-o</guid><dc:creator><![CDATA[Julián Campos]]></dc:creator><pubDate>Sun, 12 Apr 2026 10:12:13 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/35ab884a-5f43-4406-b4db-47933cc87094_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!lrek!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27d2253e-5af6-4b65-92e9-79111de01c5d_730x672.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!lrek!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27d2253e-5af6-4b65-92e9-79111de01c5d_730x672.png 424w, /__u/substackcdn.com/image/fetch/$s_!lrek!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27d2253e-5af6-4b65-92e9-79111de01c5d_730x672.png 848w, /__u/substackcdn.com/image/fetch/$s_!lrek!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27d2253e-5af6-4b65-92e9-79111de01c5d_730x672.png 1272w, /__u/substackcdn.com/image/fetch/$s_!lrek!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27d2253e-5af6-4b65-92e9-79111de01c5d_730x672.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!lrek!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27d2253e-5af6-4b65-92e9-79111de01c5d_730x672.png" width="606" height="557.8520547945205" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/27d2253e-5af6-4b65-92e9-79111de01c5d_730x672.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:672,&quot;width&quot;:730,&quot;resizeWidth&quot;:606,&quot;bytes&quot;:488414,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://ceroasenior.substack.com/i/193952728?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27d2253e-5af6-4b65-92e9-79111de01c5d_730x672.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!lrek!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27d2253e-5af6-4b65-92e9-79111de01c5d_730x672.png 424w, /__u/substackcdn.com/image/fetch/$s_!lrek!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27d2253e-5af6-4b65-92e9-79111de01c5d_730x672.png 848w, /__u/substackcdn.com/image/fetch/$s_!lrek!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27d2253e-5af6-4b65-92e9-79111de01c5d_730x672.png 1272w, /__u/substackcdn.com/image/fetch/$s_!lrek!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27d2253e-5af6-4b65-92e9-79111de01c5d_730x672.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>La IA est&#225; provocando despidos en el mundo de la programaci&#243;n&#8230; o al menos, eso nos quieren hacer creer mucha gente.</p><p>Si est&#225;s al tanto de las noticias, igual has sabido que <strong>Capgemini ha anunciado un ERE</strong> en Espa&#241;a, justific&#225;ndose en la necesidad de adaptarse al nuevo paradigma marcado por la Inteligencia Artificial.</p><p>Y si lo lees tal cual y sin pensar mucho sobre la noticia, los f&#225;cil es quedarse con la idea de que la IA est&#225; provocando despidos.</p><p>Pero, si rascas un poco m&#225;s, puedes ver que <strong>la realidad es bastante m&#225;s compleja</strong>.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading De CERO a SENIOR! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p>Capgemini, una de las consultoras m&#225;s importantes en Espa&#241;a y tambi&#233;n Europa, ha anunciado un ERE (despido selectivo) en Espa&#241;a.</p><p>En su explicaci&#243;n oficial, la empresa justifica esta tanda de despidos por los cambios en el mercado, las nuevas demandas de los cliente, la necesidad de adaptarse r&#225;pido y <strong>el impacto de la IA</strong> en todo esto.</p><p>A priori, todo esto suena l&#243;gico e incluso inevitable.</p><p>De hecho, no hacemos m&#225;s que leer este tipo de reflexi&#243;n por LinkedIn y otras redes sociales.</p><p>Pero en esa noticia, hay un detalle importante:</p><p><strong>Capgemini no es una empresa en crisis, tampoco est&#225; desapareciendo y no est&#225; dejando de ganar dinero&#8230;</strong></p><p>Y aun as&#237;, quiere reducir plantilla.</p><h2>Aqu&#237; empieza la parte inc&#243;moda</h2><p>Porque no todos los despidos en empresas tienen la misma causa y no todo se puede explicar por la IA.</p><p>En muchos casos, y sobre todo en consultoras como Capgemini, lo que hay detr&#225;s tambi&#233;n es una <strong>presi&#243;n por mejorar m&#225;rgenes</strong>, <strong>decisiones estrat&#233;gicas, reestructuraciones internas </strong>e <strong>intereses de inversores</strong>.</p><p>Y s&#237;, en este contexto, la IA puede ser una causa real para la reducci&#243;n de empleos&#8230; pero tambi&#233;n una excusa conveniente.</p><p>Recuerda, en este caso en concreto, estamos hablando de una consultora&#8230; y eso cambia bastante el contexto.</p><p>Y es que una consultora no gana dinero desarrollando software o creando un producto.</p><p>No, una consultora gana dinero vendiendo horas de personas.</p><p>Su modelo es, simplificando mucho, el siguiente:</p><ul><li><p><strong>Contrata talento</strong> (normalmente personas con poca experiencia que le cuesta encontrar esas primeras oportunidades)</p></li><li><p><strong>Asignarlo a proyectos</strong> de clientes.</p></li><li><p><strong>Facturar esas horas</strong> a clientes.</p></li></ul><p>Y aqu&#237;, en este modelo, hay dos variables clave:</p><ol><li><p><strong>La ocupaci&#243;n:</strong> tener gente trabajando en proyectos.</p></li><li><p><strong>El margen:</strong> cu&#225;nto ganas por cada persona.</p></li></ol><p>Cuando el mercado aprieta (menos proyectos, m&#225;s competencia y clientes negociando precios) el problema no es t&#233;cnico, es financiero.</p><p>Y si una consultora detecta que los proyectos pagan menos, los clientes exigen m&#225;s por menos o tienen gente sin asignaci&#243;n de proyecto&#8230; Tienen varias opciones:</p><ol><li><p>Subir precios (dif&#237;cil en un mercado competitivo).</p></li><li><p>Reducir costes.</p></li><li><p>Reestructurar equipos.</p></li></ol><p>Y es aqu&#237; donde aparecen los despidos.</p><p>No necesariamente porque sobre gente en t&#233;rminos absolutos, sino porque <strong>no encaja en la rentabilidad actual del negocio.</strong></p><h2>El papel de la IA en todo esto</h2><p>Aqu&#237; es donde el asunto se vuelve interesante y donde tenemos que entender que, aunque la IA no vaya a hacer desaparecer a los programadores, s&#237; tiene un impacto real:</p><p>La IA, a d&#237;a de hoy, permite hacer <strong>tareas m&#225;s r&#225;pido</strong>, <strong>reduce ciertas necesidades operativas</strong> y cambia los <strong>perfiles que se demandan.</strong></p><p>Eso es as&#237; y no me canso de repetirlo: hay que adaptarse y empezar a aportar m&#225;s valor que el desarrollo de c&#243;digo.</p><p>Pero en realidad, en este caso, el de una consultora que est&#225; despidiendo gente, el papel de la IA es muchas veces m&#225;s indirecto.</p><p><strong>La IA est&#225; permitiendo acelerar decisiones que ya eran econ&#243;micamente deseables.</strong></p><p>Es decir:</p><ul><li><p>Si puedes hacer lo mismo con menos gente, <strong>est&#225;s mejorando margen.</strong></p></li><li><p>Si puedes vender la IA como valor, <strong>reposicionas tu oferta.</strong></p></li><li><p>Y si necesitas ajustar estructura, <strong>tienes un argumento s&#243;lido</strong>.</p></li></ul><p>Pero ojo, no quiero decir que la IA sea irrelevante, sino que tampoco es toda la historia.</p><p>En muchos casos el argumento de la IA funciona como <strong>catalizador </strong>para acelerar cambios reales, <strong>justificaci&#243;n</strong> leg&#237;tima para decisiones internas y una <strong>narrativa</strong> que explica hacia fuera algo complejo de forma simple.</p><p>Porque s&#237;, es m&#225;s f&#225;cil decir que es por la IA que explicar en detalle decisiones de negocio, m&#225;rgenes o estrategia.</p><h2>Por qu&#233; esto importa (de verdad)</h2><p>Entender todo esto significa que empiezas a entender la realidad.</p><p>Si te quedas con el titular de &#8220;La IA est&#225; quitando empleos&#8221; puedes sacar conclusiones equivocadas.</p><p>Pero si entiendes el contexto completo empezar&#225;s a ver <strong>c&#243;mo funcionan las empresas</strong>, entender&#225;s <strong>por qu&#233; toman ciertas decisiones</strong> y, sobre todo, <strong>puedes anticiparte mejor.</strong></p><p>Entender que no todas las decisiones son meramente t&#233;cnicas es importante para ti, sobre todo si est&#225;s empezando en este mundo.</p><p>Porque esto cambia la pregunta que te puedes hacer en tus comienzos, ya que ahora no te preguntar&#225;s <strong>c&#243;mo aprendo a programar</strong>.</p><p>Sino que te tendr&#225;s que empezar a preguntar cosas como:</p><ul><li><p><strong>&#191;D&#243;nde encajo yo en este modelo de negocio?</strong></p></li><li><p><strong>&#191;Qu&#233; tipo de perfil es rentable para una empresa?</strong></p></li><li><p><strong>&#191;Qu&#233; me hace menos prescindible?</strong></p></li></ul><p>Empieza a trabajar tu esp&#237;ritu cr&#237;tico y no te <strong>creas todas las narrativas</strong>. </p><p>Ni la narrativa catastrofista, ni la optimista, ni la empresarial&#8230; ni la m&#237;a en esta entrega.</p><p>Aprender a leer entre l&#237;neas, a analizar tu mismo la situaci&#243;n ya construir tu propio criterio.</p><p>Empieza tambi&#233;n a construir valor m&#225;s all&#225; del c&#243;digo.</p><p>Porque el c&#243;digo, cada vez m&#225;s, es accesible por todo el mundo.</p><p>Lo que marca la diferencia es <strong>entender problemas</strong>, <strong>pensar en producto</strong> y <strong>tener criterio.</strong></p><p>Usa la IA con cabeza, no como un sustituto, sino como una herramienta.</p><p>La diferencia entre uno y otro perfil va a ser cada vez m&#225;s evidente.</p><p>Y, por &#250;ltimo, <strong>acepta que el mercado es m&#225;s complejo</strong>.</p><p>Ya no vale con una explicaci&#243;n simple y eso, aunque incomode, te hace m&#225;s fuerte si lo entiendes.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/la-ia-esta-provocando-despidos-o?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Compartir&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/la-ia-esta-provocando-despidos-o?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Compartir</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/la-ia-esta-provocando-despidos-o/comments&quot;,&quot;text&quot;:&quot;Deja un comentario&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/la-ia-esta-provocando-despidos-o/comments"><span>Deja un comentario</span></a></p><div><hr></div><p>S&#237;, la IA influye.</p><p>El mercado tambi&#233;n.</p><p>Y las decisiones empresariales&#8230; aun m&#225;s.</p><p>Pero aqu&#237; lo importante es entender que no est&#225;s compitiendo solo a nivel t&#233;cnico, sino dentro de un sistema econ&#243;mico con sus propias reglas.</p><p>Y cuanto antes entiendas esas reglas&#8230; mejor sabr&#225;s jugar.</p><p>Nos leemos en la pr&#243;xima,</p><p><strong>Juli&#225;n.</strong></p>]]></content:encoded></item><item><title><![CDATA[Cómo hacer que tu App no se cuelgue con APIs externas]]></title><description><![CDATA[Redis, Horizon y el arte de delegar el trabajo pesado.]]></description><link>https://ceroasenior.substack.com/p/como-hacer-que-tu-app-no-se-cuelgue</link><guid isPermaLink="false">https://ceroasenior.substack.com/p/como-hacer-que-tu-app-no-se-cuelgue</guid><dc:creator><![CDATA[Julián Campos]]></dc:creator><pubDate>Sun, 05 Apr 2026 07:01:03 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/571fce93-1b2c-4346-8cbb-4bc7829d0ace_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Ha pasado un tiempo desde la &#250;ltima entrega sobre <strong><a href="http://kpiads.app">KPIAds.app</a></strong> y te voy a ser sincero: los proyectos con mis clientes me han absorbido el 200% del tiempo y he tenido que priorizar. </p><p>Es por ello que hace tambi&#233;n ya alg&#250;n tiempo que las entregas de la Newsletter est&#225;n siendo de una a la semana, en lugar de las 2 que ten&#237;amos con el desarrollo del SaaS.</p><p>Pero, como te dije al principio, esto es <em>sin prisa, pero sin pausa</em>. El desarrollo de mi SaaS sigue adelante y hoy retomamos donde lo dejamos.</p><p>Hay un punto en el desarrollo de cualquier producto donde el c&#243;digo ya no cabe en la cabeza.</p><p>Al principio todo es sencillo: un par de controladores, algunos modelos, unas cuantas vistas... tienes la sensaci&#243;n de que controlas todos los hilos. </p><p>Pero, a medida que el producto crece, la realidad te explota en la cara:</p><ul><li><p>Ingestas de datos que tardan varios minutos.</p></li><li><p>Peticiones a APIs externas que fallan o van lentas.</p></li><li><p>C&#225;lculos de m&#233;tricas que devoran la CPU.</p></li><li><p>L&#243;gicas de negocio que dependen del estado de otros m&#243;dulos (suscripciones, facturas&#8230;).</p></li></ul><p>Si intentas meter todo eso en controladores, el sistema se convierte en lo de siempre: <strong>un monolito que funciona&#8230; pero que es un infierno mantener.</strong></p><p>En esta fase de KPIAds, el objetivo es otro: <strong>que el monolito se hable bien por dentro.</strong> Que cada parte se entere de lo que pasa sin acoplarse a las dem&#225;s y que lo pesado se mueva a un segundo plano.</p><p>Para lograrlo, vamos a usar cuatro piezas de artiller&#237;a: <strong>Domain Events, Listeners, Jobs y Colas con Redis + Horizon.</strong></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#191;Te gustan las entregas de CERO a SENIOR? No te olvides suscribirte y recibir&#225;s semanalmente un nuevo consejo para tu carrera como programador</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h3>Domain Events: contar lo que ha pasado</h3><p>La idea de un <strong>Domain Event</strong> es sencilla: representa algo que <strong>ya ha ocurrido</strong> en el negocio. No es una orden directa (haz esto), es un hecho (esto ha pasado).</p><p>En KPIAds, he definido eventos que cuentan la historia del sistema: <strong>UserRegistered, ProjectCreated, IngestionRunStarted. </strong>En Laravel, esto es una clase limpia que lanza un mensaje al aire: </p><p><em>&#8220;Oye, se ha iniciado una ingesta. Quien necesite reaccionar, que reaccione&#8221;</em>.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!y-nZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fea82f-7580-4e28-9d0c-81120a021e01_1070x364.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!y-nZ!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fea82f-7580-4e28-9d0c-81120a021e01_1070x364.png 424w, /__u/substackcdn.com/image/fetch/$s_!y-nZ!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fea82f-7580-4e28-9d0c-81120a021e01_1070x364.png 848w, /__u/substackcdn.com/image/fetch/$s_!y-nZ!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fea82f-7580-4e28-9d0c-81120a021e01_1070x364.png 1272w, /__u/substackcdn.com/image/fetch/$s_!y-nZ!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fea82f-7580-4e28-9d0c-81120a021e01_1070x364.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!y-nZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fea82f-7580-4e28-9d0c-81120a021e01_1070x364.png" width="631" height="214.65794392523364" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/96fea82f-7580-4e28-9d0c-81120a021e01_1070x364.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:364,&quot;width&quot;:1070,&quot;resizeWidth&quot;:631,&quot;bytes&quot;:197996,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://ceroasenior.substack.com/i/193167415?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fea82f-7580-4e28-9d0c-81120a021e01_1070x364.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!y-nZ!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fea82f-7580-4e28-9d0c-81120a021e01_1070x364.png 424w, /__u/substackcdn.com/image/fetch/$s_!y-nZ!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fea82f-7580-4e28-9d0c-81120a021e01_1070x364.png 848w, /__u/substackcdn.com/image/fetch/$s_!y-nZ!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fea82f-7580-4e28-9d0c-81120a021e01_1070x364.png 1272w, /__u/substackcdn.com/image/fetch/$s_!y-nZ!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fea82f-7580-4e28-9d0c-81120a021e01_1070x364.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3>Separar la l&#243;gica: Listeners y Jobs</h3><p>Aqu&#237; es donde separamos el grano de la paja. <strong>El Listener es el estratega y el Job es el obrero</strong>.</p><ul><li><p><strong>El Listener:</strong> responde al evento. Su &#250;nica responsabilidad es decidir qu&#233; hay que hacer. Si empieza una ingesta, el Listener decide qu&#233; fuentes preparar y manda a alguien a trabajar.</p></li><li><p><strong>El Job:</strong> es la unidad de trabajo pesada. Se ejecuta en <em>background</em> y <strong>no bloquea al usuario.</strong> En KPIAds, los Jobs se encargan de lo sucio: llamar a APIs de Ads o recalcular m&#233;tricas.</p></li></ul><h3>El motor: Redis + Horizon</h3><p>Si intentas hacer todo esto dentro de la petici&#243;n del usuario, la web ir&#225; lenta y se romper&#225;. Por eso usamos <strong>Redis</strong> como base de datos en memoria para gestionar las colas y <strong>Laravel Horizon</strong> para vigilarlo todo.</p><p>El flujo real en KPIAds cuando lanzas una ingesta es este:</p><ol><li><p><strong>Action:</strong> crea el registro en la DB y dispara el evento. El usuario recibe un &#8220;OK&#8221; al instante.</p></li><li><p><strong>Listener:</strong> escucha el evento y despacha el ExecuteIngestionJob a la cola.</p></li><li><p><strong>Worker (Background):</strong> el Job se despierta, llama a las APIs, guarda los datos y, al terminar, dispara un nuevo evento IngestionCompleted.</p></li></ol><p><strong>Resultado:</strong> el usuario nunca vio una pantalla de carga infinita.</p><h3>Anatom&#237;a de un flujo as&#237;ncrono: Del evento al trabajo real</h3><p>Para un Senior, el c&#243;digo no son solo instrucciones, son <strong>contratos entre capas</strong>. En KPIAds, hemos estructurado esta comunicaci&#243;n para que sea totalmente ciega: el que lanza el evento no sabe qui&#233;n lo escucha, y el que hace el trabajo no sabe qui&#233;n lo pidi&#243;.</p><p>As&#237; se traduce esto al editor:</p><p><strong>1. El Evento:</strong> es un simple objeto de transporte de datos (DTO). No tiene l&#243;gica, solo contiene la informaci&#243;n m&#237;nima necesaria para que los dem&#225;s entiendan el contexto.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Vwmk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce4e181-ea0e-4ce9-ba31-fb1fb06b2bcd_1458x550.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Vwmk!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce4e181-ea0e-4ce9-ba31-fb1fb06b2bcd_1458x550.png 424w, /__u/substackcdn.com/image/fetch/$s_!Vwmk!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce4e181-ea0e-4ce9-ba31-fb1fb06b2bcd_1458x550.png 848w, /__u/substackcdn.com/image/fetch/$s_!Vwmk!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce4e181-ea0e-4ce9-ba31-fb1fb06b2bcd_1458x550.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Vwmk!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce4e181-ea0e-4ce9-ba31-fb1fb06b2bcd_1458x550.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Vwmk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce4e181-ea0e-4ce9-ba31-fb1fb06b2bcd_1458x550.png" width="640" height="241.3186813186813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6ce4e181-ea0e-4ce9-ba31-fb1fb06b2bcd_1458x550.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:549,&quot;width&quot;:1456,&quot;resizeWidth&quot;:640,&quot;bytes&quot;:293614,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://ceroasenior.substack.com/i/193167415?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce4e181-ea0e-4ce9-ba31-fb1fb06b2bcd_1458x550.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Vwmk!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce4e181-ea0e-4ce9-ba31-fb1fb06b2bcd_1458x550.png 424w, /__u/substackcdn.com/image/fetch/$s_!Vwmk!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce4e181-ea0e-4ce9-ba31-fb1fb06b2bcd_1458x550.png 848w, /__u/substackcdn.com/image/fetch/$s_!Vwmk!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce4e181-ea0e-4ce9-ba31-fb1fb06b2bcd_1458x550.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Vwmk!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce4e181-ea0e-4ce9-ba31-fb1fb06b2bcd_1458x550.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>2. El Listener:</strong> su trabajo es puramente orquestador. Aqu&#237; es donde desacoplamos m&#243;dulos. Si ma&#241;ana queremos que al empezar una ingesta tambi&#233;n se env&#237;e un mensaje a Slack, solo tenemos que a&#241;adir otro Listener, <strong>sin tocar una sola l&#237;nea del c&#243;digo original</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Kx_k!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3db86d7b-66e8-448e-bebc-4ce16e49b999_1694x780.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Kx_k!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3db86d7b-66e8-448e-bebc-4ce16e49b999_1694x780.png 424w, /__u/substackcdn.com/image/fetch/$s_!Kx_k!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3db86d7b-66e8-448e-bebc-4ce16e49b999_1694x780.png 848w, /__u/substackcdn.com/image/fetch/$s_!Kx_k!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3db86d7b-66e8-448e-bebc-4ce16e49b999_1694x780.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Kx_k!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3db86d7b-66e8-448e-bebc-4ce16e49b999_1694x780.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Kx_k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3db86d7b-66e8-448e-bebc-4ce16e49b999_1694x780.png" width="640" height="294.5054945054945" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3db86d7b-66e8-448e-bebc-4ce16e49b999_1694x780.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:670,&quot;width&quot;:1456,&quot;resizeWidth&quot;:640,&quot;bytes&quot;:395746,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://ceroasenior.substack.com/i/193167415?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3db86d7b-66e8-448e-bebc-4ce16e49b999_1694x780.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Kx_k!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3db86d7b-66e8-448e-bebc-4ce16e49b999_1694x780.png 424w, /__u/substackcdn.com/image/fetch/$s_!Kx_k!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3db86d7b-66e8-448e-bebc-4ce16e49b999_1694x780.png 848w, /__u/substackcdn.com/image/fetch/$s_!Kx_k!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3db86d7b-66e8-448e-bebc-4ce16e49b999_1694x780.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Kx_k!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3db86d7b-66e8-448e-bebc-4ce16e49b999_1694x780.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>3. El Job: </strong>aqu&#237; es donde vive la fuerza bruta. Este c&#243;digo se ejecuta en un proceso aparte gracias a <strong>Redis</strong>. Si la API de Google Ads tarda 30 segundos en responder, no importa: el usuario ya est&#225; navegando por otra parte de la App.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!QUZM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93740ad3-0da0-40c9-bf28-8c1b10173302_1592x780.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!QUZM!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93740ad3-0da0-40c9-bf28-8c1b10173302_1592x780.png 424w, /__u/substackcdn.com/image/fetch/$s_!QUZM!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93740ad3-0da0-40c9-bf28-8c1b10173302_1592x780.png 848w, /__u/substackcdn.com/image/fetch/$s_!QUZM!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93740ad3-0da0-40c9-bf28-8c1b10173302_1592x780.png 1272w, /__u/substackcdn.com/image/fetch/$s_!QUZM!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93740ad3-0da0-40c9-bf28-8c1b10173302_1592x780.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!QUZM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93740ad3-0da0-40c9-bf28-8c1b10173302_1592x780.png" width="631" height="308.9993131868132" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93740ad3-0da0-40c9-bf28-8c1b10173302_1592x780.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:713,&quot;width&quot;:1456,&quot;resizeWidth&quot;:631,&quot;bytes&quot;:389407,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://ceroasenior.substack.com/i/193167415?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93740ad3-0da0-40c9-bf28-8c1b10173302_1592x780.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!QUZM!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93740ad3-0da0-40c9-bf28-8c1b10173302_1592x780.png 424w, /__u/substackcdn.com/image/fetch/$s_!QUZM!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93740ad3-0da0-40c9-bf28-8c1b10173302_1592x780.png 848w, /__u/substackcdn.com/image/fetch/$s_!QUZM!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93740ad3-0da0-40c9-bf28-8c1b10173302_1592x780.png 1272w, /__u/substackcdn.com/image/fetch/$s_!QUZM!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93740ad3-0da0-40c9-bf28-8c1b10173302_1592x780.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/como-hacer-que-tu-app-no-se-cuelgue/comments&quot;,&quot;text&quot;:&quot;Deja un comentario&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/como-hacer-que-tu-app-no-se-cuelgue/comments"><span>Deja un comentario</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/como-hacer-que-tu-app-no-se-cuelgue?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Compartir&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/como-hacer-que-tu-app-no-se-cuelgue?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Compartir</span></a></p><div><hr></div><p>La diferencia entre un programador Junior y uno Senior no est&#225; en cu&#225;ntas l&#237;neas escribe, sino en <strong>c&#243;mo se hablan las piezas de su sistema.</strong></p><ul><li><p>Un monolito bien dise&#241;ado es un conjunto de contextos que colaboran.</p></li><li><p>Los <strong>Domain Events</strong> cuentan la historia de tu negocio.</p></li><li><p>Las <strong>Colas</strong> hacen que el sistema sea r&#225;pido para el usuario sin dejar de ser potente por dentro.</p></li></ul><p>Dise&#241;ar as&#237; es lo que te asegura que tu software est&#233; preparado para escalar y, sobre todo, para que cuando vuelvas al c&#243;digo dentro de tres meses (despu&#233;s de estar absorbido por otros clientes), entiendas perfectamente qu&#233; est&#225; pasando.</p><p>&#191;Te ha quedado clara esta separaci&#243;n de conceptos? &#191;Quieres que la semana que viene veamos c&#243;mo monitorizamos con Horizon que todo esto no explote en producci&#243;n?</p><p>Nos vemos en la pr&#243;xima entrega.</p><p><strong>Juli&#225;n</strong> </p>]]></content:encoded></item><item><title><![CDATA[Aprender un lenguaje no te hace programador]]></title><description><![CDATA[La diferencia entre escribir c&#243;digo y pensar como programado]]></description><link>https://ceroasenior.substack.com/p/aprender-un-lenguaje-no-te-hace-programador</link><guid isPermaLink="false">https://ceroasenior.substack.com/p/aprender-un-lenguaje-no-te-hace-programador</guid><dc:creator><![CDATA[Julián Campos]]></dc:creator><pubDate>Sun, 29 Mar 2026 07:02:48 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/86ccb259-a633-4f70-a785-b3b33b4116df_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hoy te quiero plantear algunas preguntas que van mucho m&#225;s all&#225; de lo t&#233;cnico. </p><p>No va de backend, frontend, arquitectura o testing, sino que son <strong>preguntas que en alg&#250;n punto de mi carrera me plante&#233;</strong> y creo que si no lo has hecho, t&#250; tambi&#233;n deber&#237;as.</p><p>Porque cambia la forma en la que ves tu carrera y en c&#243;mo te adaptas al constante cambio al que estamos sometidos.</p><p>Y es que&#8230;</p><p><strong>&#191;En qu&#233; punto podemos considerarnos programadores?</strong></p><p><strong>&#191;Es un punto que va cambiando con el tiempo y la evoluci&#243;n de la tecnolog&#237;a?</strong></p><p>Igual parecen dos preguntas muy sencillas y tontas, pero es que hay algo que veo constantemente cuando alguien empieza en programaci&#243;n.</p><p>Algo por lo que yo tambi&#233;n pas&#233;.</p><p>Y se trata de una especie de <strong>checklist</strong> o roadmap mental:</p><p>Primero, aprender JavaScript (o pon la tecnolog&#237;a que quieras).</p><p>Luego, aprender React.</p><p>Para despu&#233;s aprender un framework de backend y hacer algunos proyectos.</p><p>Todo eso para llegar a ese momento en el que piensas:</p><p>Y entonces llega ese momento en el que piensas: <strong>ya s&#233; programar.</strong></p><p>Creo que es un proceso por el que muchos pasan y s&#237;, yo tambi&#233;n lo pens&#233; en su d&#237;a.</p><p>Y estaba bastante equivocado.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#191;Te gustan las entregas de CERO a SENIOR? No te olvides suscribirte y recibir&#225;s semanalmente un nuevo consejo para tu carrera como programador</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h3>Programar no es escribir c&#243;digo</h3><p>Y es que durante mucho tiempo confundimos estas dos cosas.</p><p>A menudo pensamos que programar es saber <strong>sintaxis</strong>, conocer un <strong>framework</strong>, montar <strong>componentes</strong> o saber hacer llamadas a una <strong>API.</strong></p><p>Puede parecer l&#243;gico, pero sinceramente creo que eso no es programar.</p><p>Todo esto que he mencionado se trata de saber usar <strong>herramientas</strong>, procesos en los que el factor humano no es importante.</p><p>Sinceramente pienso que <strong>programar de verdad es otra cosa</strong>: se trata de <strong>entender el problema</strong>, de <strong>dividirlo en partes</strong>, es<strong> tomar decisiones y saber qu&#233; hacer&#8230;</strong> cuando nadie te dice qu&#233; hacer.</p><p>Esto es lo que diferencia el saber escribir c&#243;digo de ser programador.</p><p>Y cuando entiendes esto, es que todo cambia.</p><p>Cambia c&#243;mo trabajas, cambia tu valor para la empresa y cambia tu futuro profesional&#8230; sobre todo en tiempos de IA.</p><p>Porque hoy, herramientas como ChatGPT o Copilot ya hacen muy bien la parte f&#225;cil:</p><ul><li><p>Escribir c&#243;digo</p></li><li><p>Montar estructuras</p></li><li><p>Generar soluciones &#8220;v&#225;lidas&#8221;</p></li></ul><p>Es decir, lo que antes te hac&#237;a sentir que avanzabas o que aportabas como valor&#8230; ahora lo puede hacer una m&#225;quina en segundos.</p><p>Y ojo, que esto no es una amenaza: simplemente es un filtro.</p><h3>La IA no sustituye programadores (no a todos)</h3><p>No te voy a mentir, hay veces en las que yo tambi&#233;n me pongo en modo pesimista con la evoluci&#243;n que puede tener la IA y c&#243;mo nos puede afectar a los programadores.</p><p>Pero en esos momentos, me pongo a analizar bien la situaci&#243;n y siempre llego a la misma conclusi&#243;n:</p><p><strong>La IA no te quita el trabajo por saber menos sintaxis.</strong> Te lo quita si solo sabes eso.</p><p>Porque si tu valor como programador es escribir c&#243;digo, no eres imprescindible. </p><p>La IA ya puede generar funciones, componentes, endpoints e incluso estructuras completas en segundos. Lo que antes te llevaba horas, ahora lo tienes en minutos.</p><p>Pero hay algo que no puede hacer por ti, y es entender el contexto real de un problema. </p><p>No sabe <strong>qu&#233; necesita de verdad el cliente</strong>, no entiende q<strong>u&#233; partes del sistema son cr&#237;ticas</strong>, ni qu&#233; <strong>decisiones t&#233;cnicas</strong> te pueden explotar dentro de seis meses. Tampoco entiende los <strong>trade-offs</strong> que est&#225;s aceptando cuando eliges una soluci&#243;n u otra.</p><p>Y ah&#237; es donde est&#225; la diferencia. <strong>Porque programar no es producir l&#237;neas de c&#243;digo</strong>, es tomar decisiones bajo incertidumbre. Es priorizar, simplificar y, muchas veces, saber qu&#233; no hacer.</p><p>Por eso, cuando tu valor est&#225; en pensar, dise&#241;ar y decidir, la IA deja de ser una amenaza y se convierte en una ventaja brutal. </p><p>Te permite ir m&#225;s r&#225;pido, probar m&#225;s opciones y centrarte en lo importante. Pero la direcci&#243;n sigue dependiendo de ti. Y esa diferencia, cada vez, va a ser m&#225;s grande.</p><h3>La diferencia real</h3><p>No me cansar&#233; de repetirlo en las entregas de esta Newsletter, pero tu carrera cambia cuando entiendes la diferencia de pensamiento entre un programador junior a uno senior.</p><p>Y es que un junior piensa: <strong>&#8220;&#191;C&#243;mo hago esto en X tecnolog&#237;a?&#8221;.</strong></p><p>Un programador empieza a pensar: <strong>&#8220;&#191;Qu&#233; problema estoy resolviendo?&#8221;.</strong></p><p>Y un senior va un paso m&#225;s all&#225;: <strong>&#8220;&#191;Cu&#225;l es la mejor forma de resolver esto con el menor coste y complejidad?&#8221;.</strong></p><p>Esa diferencia no est&#225; en el lenguaje, sino que se encuentra en tu cabeza.</p><h3>C&#243;mo aplicar esto en tu trabajo (aunque solo te den tickets)</h3><p>Aqu&#237; es donde mucha gente se queda atascada. Porque piensan: &#8220;vale, todo esto est&#225; muy bien&#8230; <strong>pero yo estoy en una consultora resolviendo tickets todo el d&#237;a.</strong>&#8221; </p><p>Y es verdad. Tu d&#237;a a d&#237;a seguramente sea un ticket en Jira, una descripci&#243;n m&#225;s o menos clara, un trozo de c&#243;digo que no has escrito t&#250;&#8230; y ejecutar.</p><p>Pero incluso en ese contexto puedes marcar una diferencia enorme. </p><p>Puedes hacer el ticket como un ejecutor: lees lo que te piden, haces lo m&#237;nimo para que funcione y pasas al siguiente. </p><p>O puedes hacerlo como un programador: entiendes qu&#233; problema real hay detr&#225;s, revisas si la soluci&#243;n encaja con el sistema, detectas posibles efectos secundarios y mejoras ligeramente el c&#243;digo que est&#225;s tocando.</p><p>Antes de escribir una sola l&#237;nea de c&#243;digo, puedes empezar haci&#233;ndote mejores preguntas: &#191;esto por qu&#233; est&#225; fallando realmente?, &#191;hay m&#225;s sitios donde pasa lo mismo?, &#191;estoy arreglando el s&#237;ntoma o la causa?, &#191;esta soluci&#243;n va a escalar o es solo un parche temporal? </p><p>Ese peque&#241;o cambio de enfoque ya te coloca en otro nivel.</p><p>Y mientras trabajas, puedes ir <strong>dejando el c&#243;digo un poco mejor de como lo encontraste</strong>. </p><p>No hace falta hacer nada espectacular: renombrar variables confusas, extraer l&#243;gica duplicada o simplificar una funci&#243;n ya es suficiente. </p><p>Son cambios peque&#241;os, casi invisibles, pero que tienen un impacto enorme cuando los repites cada d&#237;a.</p><p>Porque ah&#237; est&#225; la clave: <strong>no es lo que haces en un ticket, es c&#243;mo lo haces</strong>. </p><p>Y cuando repites este enfoque durante semanas y meses, dejas de ser alguien que ejecuta tareas&#8230; y empiezas a ser alguien que entiende sistemas.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/aprender-un-lenguaje-no-te-hace-programador?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Compartir&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/aprender-un-lenguaje-no-te-hace-programador?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Compartir</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscr&#237;bete ahora&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/subscribe"><span>Suscr&#237;bete ahora</span></a></p><div><hr></div><p>Si est&#225;s empezando, este es el cambio clave: <strong>deja de medir tu progreso por las tecnolog&#237;as</strong> que sabes y empieza a medirlo por los problemas que eres capaz de resolver.</p><p>Porque puedes saber cinco frameworks&#8230; y no saber programar.</p><p>O puedes entender c&#243;mo pensar&#8230; y aprender cualquier tecnolog&#237;a en semanas.</p><p>Si me preguntas qu&#233; har&#237;a hoy empezando desde cero, lo tendr&#237;a claro: menos cursos, m&#225;s problemas reales. Menos obsesi&#243;n por herramientas y m&#225;s foco en c&#243;mo pensar.</p><p>Porque al final, en un mundo donde la IA escribe c&#243;digo&#8230;</p><p><strong>Tu valor no est&#225; en lo que escribes, est&#225; en lo que entiendes.</strong></p><p>Nos vemos en la pr&#243;xima.</p><p>Juli&#225;n.</p>]]></content:encoded></item><item><title><![CDATA[Demasiado grande]]></title><description><![CDATA[El error que cometen todos los juniors]]></description><link>https://ceroasenior.substack.com/p/demasiado-grande</link><guid isPermaLink="false">https://ceroasenior.substack.com/p/demasiado-grande</guid><dc:creator><![CDATA[Julián Campos]]></dc:creator><pubDate>Sun, 22 Mar 2026 08:02:06 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/9794ef85-c32e-4aa5-bbfb-994e822624a2_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hace un tiempo, en uno de mis primeros proyectos serios como desarrollador por cuenta ajena (es decir, trabajando en una consultora), me encontr&#233; con algo que seguramente te suene:</p><p>Un proyecto con bastantes horas de desarrollo ya detr&#225;s.</p><p>Con c&#243;digo dif&#237;cil de leer, funciones enormes, duplicidad por todos lados y&#8230; una sensaci&#243;n constante de que todo estaba hecho un desastre.</p><p>Mi reacci&#243;n fue inmediata.</p><p><strong>No pasa nada. Esto lo arreglo yo en un par de d&#237;as.</strong></p><p>Spoiler: no lo arregl&#233;. Lo romp&#237;.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#191;Te gustan las entregas de CERO a SENIOR? No te olvides suscribirte y recibir&#225;s semanalmente un nuevo consejo para tu carrera como programador</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h3>El impulso de querer rehacerlo todo</h3><p>Cuando empiezas en programaci&#243;n, hay un momento en el que empiezas a ver lo que est&#225; mal.</p><p>Y eso es buena se&#241;al, ya que significa que est&#225;s creciendo.</p><p>El problema es lo que haces con esa informaci&#243;n, porque lo m&#225;s habitual es caer en la trampa de que la soluci&#243;n es rehacerlo todo desde cero.</p><p>Es un error muy de junior, vemos el c&#243;digo, vemos un desastre y empezamos a pensar en <strong>cambiar nombres, mover archivos, reestructurar carpetas, aplicar patrones de dise&#241;o.</strong>.<br>Y ya que est&#225;s&#8230; &#8220;dejarlo bien de una vez&#8221;.</p><p>El famoso <strong>big bang</strong>. </p><p>Un cambio enorme que, en tu cabeza, va a solucionar todos los problemas.</p><h3>Lo que no ves cuando haces un &#8220;big bang&#8221;</h3><p>El problema de estos cambios no es la intenci&#243;n, es el impacto.</p><p>Cuando cambias demasiadas cosas a la vez:</p><p>No sabes qu&#233; ha roto qu&#233;.</p><p>No puedes probar bien cada parte.</p><p>El c&#243;digo se vuelve dif&#237;cil de revisar.</p><p>Y el equipo <strong>pierde confianza en ese cambio</strong>.</p><p>Y aqu&#237; hay algo importante que muchos juniors no entienden al principio:</p><p>El problema no es solo que el c&#243;digo funcione, es que otros puedan confiar en &#233;l Porque en un entorno profesional, si tu cambio genera dudas&#8230; <strong>es un mal cambio</strong>.</p><h3>La primera vez que entend&#237; esto</h3><p>Recuerdo perfectamente la primera vez que alguien me par&#243; los pies con esto.</p><p>Abr&#237; un Pull Request enorme.</p><p>De esos que te hacen sentir orgulloso ya que hab&#237;a &#8220;arreglado&#8221; medio m&#243;dulo.</p><p>Al rato, un compa&#241;ero m&#225;s senior coment&#243; algo que se me qued&#243; grabado:</p><p><strong>Esto no se puede revisar.</strong></p><p>Ni siquiera entr&#243; a discutir si estaba bien o mal. Simplemente <strong>no era viable</strong> ya que era <strong>demasiado grande, demasiado arriesgado y demasiado dif&#237;cil de entender</strong>.</p><p>Y ah&#237; entend&#237; algo que no te ense&#241;an en cursos:</p><p><strong>No todo lo que mejora el c&#243;digo&#8230; mejora el proyecto.</strong></p><h3>C&#243;mo trabajan los seniors de verdad</h3><p>Con el tiempo, empec&#233; a fijarme en c&#243;mo trabajaban desarrolladores con experiencia.</p><p>Y me di cuenta de algo que al principio parec&#237;a contraintuitivo:</p><p><strong>No hac&#237;an grandes cambios.</strong></p><p>Hac&#237;an cambios peque&#241;os, muy peque&#241;os.</p><p>Igual parece que te lo estoy exagerando pero ve&#237;a cambios de simplemente un nombre de variable, na funci&#243;n extra&#237;da.</p><p>De eliminar una duplicidad concreta o simplemente a&#241;adir un test unitario.</p><p>Nada espectacular.</p><p>Pero cada cambio ten&#237;a algo en com&#250;n:</p><p><strong>Era f&#225;cil de entender, era f&#225;cil de probar y era f&#225;cil de revertir.</strong></p><p>Y eso lo cambiaba todo.</p><h3>El poder de los peque&#241;os pasos</h3><p>Aqu&#237; est&#225; la clave:</p><p><strong>Los sistemas complejos no se arreglan con grandes revoluciones </strong>S<strong>e arreglan con peque&#241;as mejoras constantes.</strong></p><p>Cada peque&#241;o cambio reduce un poco la complejidad y cada mejora deja el c&#243;digo un poco m&#225;s limpio.</p><p>Cada refactor peque&#241;o prepara el siguiente.</p><p>Y lo m&#225;s importante:</p><p><strong>No rompes todo en el proceso.</strong></p><h3>Refactorizar no es rehacer</h3><p>Hay una diferencia enorme que me hubiera gustado entender antes:</p><p>Rehacer es destruir y volver a construir.</p><p><strong>Refactorizar es mejorar sin cambiar el comportamiento.</strong></p><p>Y eso, en la pr&#225;ctica, se hace as&#237;:</p><ol><li><p>Tocas una parte del c&#243;digo.</p></li><li><p>La mejoras un poco.</p></li><li><p>Validas que todo sigue funcionando igual.</p></li></ol><p>No hace falta m&#225;s, no necesitas arreglar todo el sistema.</p><p><strong>S&#243;lo necesitas dejar mejor lo que has tocado.</strong></p><h3>Por qu&#233; los seniors no hacen &#8220;big bangs&#8221;</h3><p>Porque entienden algo clave:</p><p><strong>En programaci&#243;n, el riesgo importa m&#225;s que la intenci&#243;n.</strong></p><p>Los seniors no buscan hacerlo perfecto a la primera, sino que buscan avanzar sin romper.</p><p>Por eso trabajan en pasos peque&#241;os.</p><p>Porque as&#237; pueden equivocarse sin consecuencias graves y eso les permite avanzar m&#225;s r&#225;pido a largo plazo.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/demasiado-grande?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Compartir&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/demasiado-grande?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Compartir</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscr&#237;bete ahora&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/subscribe"><span>Suscr&#237;bete ahora</span></a></p><div><hr></div><p>Si est&#225;s empezando, qu&#233;date con esto:</p><p><strong>No necesitas rehacer proyectos enteros para crecer como programador.</strong></p><p>De hecho, muchas veces eso es lo que m&#225;s te frena.</p><p>Aprende a mejorar poco a poco. A hacer cambios peque&#241;os. A dejar el c&#243;digo un poco mejor de lo que lo encontraste.</p><p>Porque la diferencia entre un junior y un senior no est&#225; en hacer grandes cambios.</p><p>Est&#225; en saber dar el siguiente paso correcto.</p><p>Nos vemos en la pr&#243;xima.</p><p><strong>Juli&#225;n.</strong></p>]]></content:encoded></item><item><title><![CDATA[Aprende a cerrar el portátil]]></title><description><![CDATA[Proyectos, WordCamps, redes sociales&#8230; y por qu&#233; tambi&#233;n necesitas desconectar.]]></description><link>https://ceroasenior.substack.com/p/aprende-a-cerrar-el-portatil</link><guid isPermaLink="false">https://ceroasenior.substack.com/p/aprende-a-cerrar-el-portatil</guid><dc:creator><![CDATA[Julián Campos]]></dc:creator><pubDate>Sun, 15 Mar 2026 07:54:27 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6027da4c-0db5-44d0-a147-de409799e471_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>La semana pasada no hubo newsletter.</strong></p><p>Y no fue por falta de ganas.</p><p>Fue por algo mucho m&#225;s com&#250;n: y es que literalmente <strong>no ten&#237;a tiempo.</strong></p><p>Ahora mismo estoy bastante metido en varios proyectos de clientes, con entregas, reuniones y bastante trabajo acumulado. </p><p>Y la realidad es que el domingo pasado, cuando normalmente env&#237;o esta newsletter, simplemente <strong>no llegu&#233;</strong>.</p><p>Adem&#225;s, ese mismo fin de semana estuve en la <strong>WordCamp Madrid</strong>, rodeado de desarrolladores, charlas, networking, caf&#233;s y conversaciones sobre WordPress, producto y tecnolog&#237;a.</p><p>Y por si fuera poco, los domingos estoy jugando <strong>un campeonato de ajedrez por equipos</strong>, as&#237; que tampoco ten&#237;a demasiado margen para sacar unas horas tranquilas para escribir.</p><p>Todo eso est&#225; muy bien.</p><p>Pero tambi&#233;n me hizo pensar en algo que creo que muchos programadores olvidamos con facilidad:</p><p><strong>No todo puede ser trabajar, aprender, programar y seguir programando.</strong></p><p>Porque si no sabes parar&#8230; tarde o temprano el cuerpo te pasa factura.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#191;Te gustan las historias y entregas de <strong>CERO a SENIOR</strong>? No te olvides de suscribirte y recibir&#225;s semanalmente un nuevo consejo para tu carrera.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h3>El problema de querer correr demasiado</h3><p>Cuando empiezas en programaci&#243;n, es muy f&#225;cil caer en una mentalidad peligrosa.</p><p>Quieres aprender <strong>todo lo antes posible</strong>.</p><p>Aprender un nuevo framework.</p><p>Hacer cursos.</p><p>Leer libros.</p><p>Practicar algoritmos.</p><p>Construir proyectos personales.</p><p>Trabajar en tickets.</p><p>Mirar c&#243;digo de otros.</p><p>Ver v&#237;deos t&#233;cnicos en YouTube.</p><p>Y si eres como muchos programadores que conozco (y como yo mismo he sido muchas veces), <strong>empiezas a sentir culpa cuando no est&#225;s programando</strong>.</p><p>Si descansas, sientes que otros est&#225;n avanzando m&#225;s r&#225;pido.</p><p>Si sales a dar un paseo, piensas que podr&#237;as estar aprendiendo Docker.</p><p>Si te tomas un d&#237;a libre, imaginas a otro desarrollador aprendiendo y creando un v&#237;deo de c&#243;mo est&#225; desarrollando un SaaS que le har&#225; millonario.</p><p>Pero hay algo que casi nadie te cuenta cuando empiezas:</p><p><strong>Esta carrera es una marat&#243;n, no un sprint.</strong></p><p>Y el que intenta correr demasiado r&#225;pido al principio&#8230; normalmente no llega muy lejos.</p><h3>Las redes sociales tambi&#233;n pueden agotarte</h3><p>Hoy en d&#237;a hay otro factor que antes no exist&#237;a tanto en nuestra profesi&#243;n:</p><p><strong>Las redes sociales.</strong></p><p>Si est&#225;s en Twitter, LinkedIn o YouTube es muy f&#225;cil caer en una din&#225;mica peligrosa.</p><p>Siempre parece que hay alguien que:</p><ul><li><p>Publica un hilo t&#233;cnico cada d&#237;a</p></li><li><p>Lanza un v&#237;deo nuevo cada semana</p></li><li><p>Comparte tips de programaci&#243;n constantemente</p></li><li><p>Crea cursos, art&#237;culos y proyectos sin parar</p></li></ul><p>Y aunque muchas veces ese contenido es muy &#250;til, tambi&#233;n puede generar una sensaci&#243;n rara: <strong>la sensaci&#243;n de que nunca est&#225;s haciendo suficiente.</strong></p><p>Adem&#225;s, si t&#250; mismo creas contenido, el problema puede ser a&#250;n mayor.</p><p>Te lo digo por experiencia.</p><p>Durante mucho tiempo <strong>yo tambi&#233;n he sido uno de esos programadores que no paran de crear contenido</strong>: v&#237;deos, hilos, newsletter, ideas para nuevos proyectos&#8230;</p><p>Y hay momentos en los que sinceramente <strong>me entran ganas de quitarme todas las redes sociales</strong>.</p><p>Porque incluso cuando no est&#225;s trabajando para clientes, sigues conectado al mundo de la programaci&#243;n.</p><p>Sigues pensando en contenido.</p><p>Sigues leyendo sobre tecnolog&#237;a.</p><p>Sigues respondiendo comentarios.</p><p>Y al final <strong>nunca desconectas del todo</strong>.</p><h3>El enemigo silencioso: el burnout</h3><p>En el mundo del desarrollo hay una palabra que aparece cada vez m&#225;s:</p><p><strong>Burnout.</strong></p><p>No es simplemente estar cansado, es algo m&#225;s profundo.</p><p>Es esa sensaci&#243;n de abrir el editor de c&#243;digo y <strong>no tener ganas de escribir c&#243;digo</strong>, ver una nueva tarea en Jira y sentir <strong>rechazo inmediato</strong>, sentirte constantemente <strong>agotado</strong>, incluso despu&#233;s de dormir, <strong>perder la curiosidad</strong> por aprender cosas nuevas.</p><p>Y lo m&#225;s peligroso es que el burnout <strong>no aparece de golpe</strong>.</p><p>Se construye poco a poco.</p><p>Meses trabajando sin parar.</p><p>Semanas sin desconectar del ordenador.</p><p>Fines de semana estudiando porque hay que ponerse al d&#237;a.</p><p>Hasta que un d&#237;a te das cuenta de algo inquietante:</p><p><strong>La programaci&#243;n ya no te ilusiona.</strong></p><p>Y eso es una tragedia en una profesi&#243;n como la nuestra.</p><p>Porque si algo nos hace buenos desarrolladores es <strong>la curiosidad</strong>.</p><p>Cuando el burnout mata esa curiosidad, tu crecimiento profesional tambi&#233;n se frena.</p><h3>Incluso el ocio puede convertirse en otra obligaci&#243;n</h3><p>Aqu&#237; viene algo curioso que me pas&#243; la semana pasada.</p><p>Como te dec&#237;a antes, los domingos estoy jugando <strong>un campeonato de ajedrez por equipos</strong>.</p><p>Y me gusta mucho el ajedrez, llevo jugando 27 a&#241;os.</p><p>Pero cuando formas parte de un equipo ocurre algo interesante: <strong>no siempre puedes decir que no</strong> (y m&#225;s si eres el presidente del club como yo).</p><p>Si faltas, est&#225;s dejando colgado al equipo.</p><p>As&#237; que aunque en teor&#237;a sea ocio, tambi&#233;n se convierte en <strong>un compromiso m&#225;s en la agenda</strong>.</p><p>El domingo pasado, entre el campeonato, el trabajo acumulado y la semana que llevaba encima, simplemente <strong>no ten&#237;a energ&#237;a mental para escribir la newsletter</strong>.</p><p>Y ah&#237; me di cuenta de algo importante.</p><p>Para desconectar de verdad, muchas veces necesitas <strong>actividades que no impliquen compromisos fuertes</strong>.</p><p>Cosas que puedas hacer&#8230; o no hacer.</p><p>Sin presi&#243;n.</p><p>Sin fechas.</p><p>Sin depender de otras personas.</p><h3>El descanso tambi&#233;n es parte de tu carrera</h3><p>Hay algo curioso en programaci&#243;n y es que muchas veces las mejores soluciones <strong>no aparecen cuando est&#225;s programando</strong>.</p><p>Aparecen cuando te alejas del problema.</p><p>Mientras caminas, mientras haces deporte o mientras est&#225;s tomando un caf&#233;.</p><p>Tu cerebro sigue procesando el problema en segundo plano.</p><p>Por eso muchos desarrolladores han tenido esa experiencia de:</p><p>Estar atascado durante dos horas.</p><p>Cerrar el port&#225;til.</p><p>Y de repente, una hora despu&#233;s, <strong>entender exactamente cu&#225;l era la soluci&#243;n</strong>.</p><p>El descanso no es perder el tiempo, <strong>es parte del proceso mental que te hace mejor programador.</strong></p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/aprende-a-cerrar-el-portatil/comments&quot;,&quot;text&quot;:&quot;Deja un comentario&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/aprende-a-cerrar-el-portatil/comments"><span>Deja un comentario</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/aprende-a-cerrar-el-portatil?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Compartir&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/aprende-a-cerrar-el-portatil?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Compartir</span></a></p><div><hr></div><p>Si he compartido esto contigo hoy es porque quiero que recuerdes algo si est&#225;s en los comienzos de tu carrera:</p><p><strong>No necesitas programar todo el tiempo para llegar lejos, necesitas constancia durante a&#241;os.</strong></p><p>Y para mantener esas constancia necesitas<strong> descansar, desconectar y tener vida fuera de la pantalla.</strong></p><p>Porque la carrera de un programador no se mide en semanas, ni meses ni a&#241;os, se mide en d&#233;cadas.</p><p>Y pienso firmemente que es mucho m&#225;s f&#225;cil llegar lejos cuando sabes <strong>cerrar el port&#225;til</strong>.</p><p>Pi&#233;nsalo y mientras tanto, nos vemos en la pr&#243;xima entrega.</p><p>Juli&#225;n.</p>]]></content:encoded></item><item><title><![CDATA[Ser freelance fue mi peor decisión]]></title><description><![CDATA[Nadie te cuenta esta parte]]></description><link>https://ceroasenior.substack.com/p/ser-freelance-fue-mi-peor-decision</link><guid isPermaLink="false">https://ceroasenior.substack.com/p/ser-freelance-fue-mi-peor-decision</guid><dc:creator><![CDATA[Julián Campos]]></dc:creator><pubDate>Sun, 01 Mar 2026 09:01:54 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/89a20846-7be5-41de-ac2e-53e479dc7cc3_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Los comienzos, y m&#225;s cuando es en una profesi&#243;n, siempre son duros.</p><p>Aunque hay &#233;pocas que son mejores o m&#225;s propicias para empezar en el mercado laboral que otras, no creo que haya una &#233;poca en la que empezar sea realmente f&#225;cil.</p><p>Y bueno, hay situaciones en las que realmente no es que sea f&#225;cil, sino que es bastante complicado.</p><p>Esta reflexi&#243;n (quiz&#225;s algo obvia) te la estoy contando desde <strong>Faro, Portugal</strong>.</p><p>Aunque te la pod&#237;a haber contado desde C&#243;rdoba, Barcelona, Menorca, Sof&#237;a (Bulgaria), Tarragona, Viena (Austria), Toulouse (Francia) o Madrid, que son muchos de los sitios que he visitado en el &#250;ltimo a&#241;o.</p><p>Desde que soy <strong>desarrollador Freelance</strong>.</p><p>Si me pongo a analizar en la situaci&#243;n que me encuentro hoy, la verdad, no me puedo quejar. </p><p><strong>Muchos me dicen que vivo no bien, sino muy bien</strong>. </p><p>Porque me ven trabajando desde casa (remoto), eligiendo mis proyectos o clientes y con tiempo para otras cosas.</p><p>Aunque ojo, esto &#250;ltimo no siempre, que el ser tu propio jefe tambi&#233;n tiene su parte oscura.</p><p>Pero bueno, lo que no todo el mundo sabe es que mis comienzos no fueron para nada as&#237;. </p><p><strong>Fueron mucho m&#225;s confusos y duros.</strong></p><p>Igual no lo sabes, pero mi camino no fue una l&#237;nea recta. Si te lo resumo, se ver&#237;a algo as&#237;:</p><ul><li><p><strong>En 2018</strong>, empec&#233; como programador freelance.</p></li><li><p><strong>En 2019</strong>, combin&#233; mis proyectos freelance con mi trabajo como maestro de Educaci&#243;n Primaria.</p></li><li><p><strong>En 2020</strong>, el s&#237;ndrome del impostor me peg&#243; tan fuerte que decid&#237; estudiar un Grado Superior de Aplicaciones Multiplataforma. Ten&#237;a conocimientos de sobra, pero necesitaba que un papel validara lo que yo sent&#237;a que me faltaba.</p></li><li><p><strong>En 2022</strong>, tom&#233; la decisi&#243;n que lo cambi&#243; todo: dej&#233; el mundo freelance y el de maestro para irme a trabajar a una consultora en Francia (y bueno, a tener un golpe de realidad con el mercado laboral y lo que es trabajar en una empresa)</p></li><li><p><strong>En 2025</strong>, tras haber absorbido todo de esa etapa y haber trabajado en proyectos inmensos para gigantes como <strong>Airbus</strong> en Toulouse, volv&#237; a ser 100% freelance.</p></li></ul><p>Y es en ese primer salto, entre el freelance de 2018 y el empleado de 2022, donde comet&#237; <strong>el mayor error t&#233;cnico de mi vida.</strong></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><em>&#191;Te gustan las historias y entregas de CERO a SENIOR? No te olvides de suscribirte y recibir&#225;s semanalmente un nuevo consejo para tu carrera.</em></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p><strong>En 2018, ten&#237;a claro que me quer&#237;a dedicar al mundo del desarrollo.</strong></p><p>Hab&#237;a aprendido de manera autodidacta a programar con 14 a&#241;os y ya ten&#237;a m&#225;s de 6 a&#241;os de experiencia por mi cuenta con PHP y desarrollo de Wordpress.</p><p>Lo ten&#237;a claro, pero tambi&#233;n le ten&#237;a <strong>verdadero miedo</strong> a esa dureza inicial del mercado laboral.</p><p>A no tener un t&#237;tulo oficial, a no tener experiencia demostrable y a las pruebas t&#233;cnicas donde te desnudan los conocimientos y al s&#237;ndrome de ser &#8220;el Junior&#8221; de la oficina.</p><p>As&#237; que, por casualidades de la vida, tras presentarse un par de proyectos &#8220;gordos&#8221; de Wordpress para hacer como freelance, vi el camino f&#225;cil y me tir&#233; de cabeza: <strong>decid&#237; que iba a ser mi propio jefe desde el d&#237;a uno</strong>. </p><p>Ten&#237;a proyectos que pagaban bien (bueno, hoy siendo objetivos ni levantar&#237;a la tapa del port&#225;til para hacerlos).</p><p>Pens&#233; que hab&#237;a <em>hackeado</em> el sistema ya que me salt&#233; las entrevistas de trabajo, a los Tech Leads exigentes y las jerarqu&#237;as. </p><p>Trabajaba solo y mi &#250;nica prueba de fuego era que el cliente (que no ten&#237;a ni idea de c&#243;digo) viera que la web funcionaba.</p><p><strong>Entregaba los proyectos, cobraba, y la pantalla no daba error 500</strong>. </p><p>En mi cabeza, yo era un crack. Un desarrollador hecho a s&#237; mismo.</p><p>Hasta que lleg&#243; 2022.</p><p>Ese a&#241;o, tras compaginar el trabajo freelance con unos a&#241;os de docencia, decid&#237; que quer&#237;a ir m&#225;s all&#225;.</p><p>Dejar los t&#237;picos proyectos de Wordpress y trabajar en proyectos grandes y reales.</p><p>Proyectos en los que me pod&#237;a sentir realizado (cosas de hacer solo landings en WP).</p><p>As&#237; que dej&#233; esa burbuja en la que viv&#237;a y entr&#233; a la consultora en Francia y me integr&#233;, por primera vez, en un equipo de desarrollo de verdad.</p><p>Y ah&#237; me llev&#233; <strong>la mayor bofetada de realidad de toda mi carrera.</strong> </p><p>Mi primera semana me asignaron un ticket. </p><p>Escrib&#237; mi c&#243;digo (exactamente igual que lo hac&#237;a en mi casa), abr&#237; mi primer <em>Pull Request</em> de la historia, y me fui a por un caf&#233; sinti&#233;ndome intocable.</p><p>Al volver a mi sitio, vi la notificaci&#243;n de mi compa&#241;ero m&#225;s Senior. </p><p>Hab&#237;a <strong>decenas de comentarios en rojo</strong> destrozando mi c&#243;digo:</p><p><em>&#8220;&#191;Por qu&#233; haces una consulta a la base de datos dentro de este bucle?&#8221;</em></p><p><em>&#8220;Este controlador tiene demasiadas responsabilidades, s&#225;calo a un servicio.&#8221;</em></p><p><em>&#8220;&#191;D&#243;nde est&#225;n los tests?&#8221;</em></p><p><em>&#8220;Esto no va a escalar cuando entren 1.000 usuarios de golpe.&#8221;</em></p><p>Sent&#237; que me herv&#237;a la sangre, pero sobre todo, sent&#237; una verg&#252;enza terrible.</p><p>Ah&#237; me di cuenta del precio que hab&#237;a pagado por tomar el camino f&#225;cil en 2018. </p><p><strong>No era un buen programador.</strong> </p><p>Era un solucionador de problemas con a&#241;os de vicios acumulados, que dejaba un rastro de deuda t&#233;cnica en los proyectos.</p><p>Como hab&#237;a estado solo todo ese tiempo, mis malas pr&#225;cticas eran mi est&#225;ndar. </p><p>Como nunca tuve a nadie por encima, carec&#237;a de humildad t&#233;cnica. </p><p>Al evitar la dureza de empezar como el novato de una empresa, me hab&#237;a privado del mayor acelerador profesional que existe: <strong>aprender de los errores de gente que sabe m&#225;s que t&#250;.</strong></p><h3>La ventaja de empezar tu carrera en una empresa</h3><p>Aquel equipo en Francia me ense&#241;&#243; a base de palos (y much&#237;sima paciencia) lo que significaba de verdad la ingenier&#237;a de software.</p><p>Tragarme el ego y sentarme a aprender de los que sab&#237;an m&#225;s que yo me dio unas ventajas que jam&#225;s habr&#237;a conseguido por mi cuenta:</p><ul><li><p><strong>Entender el impacto del tr&#225;fico real:</strong> en mi casa, mis proyectos los usaban 10 personas al d&#237;a. En la consultora, vi lo que pasa cuando entran miles de usuarios de golpe. Aprend&#237; sobre sistemas de cach&#233;, race conditions y por qu&#233; una mala consulta a la base de datos te puede tirar el servidor entero en segundos.</p></li><li><p><strong>Escribir c&#243;digo para humanos, no para m&#225;quinas:</strong> como mis compa&#241;eros ten&#237;an que revisar y mantener mi trabajo, aprend&#237; a nombrar variables con sentido, a aplicar principios SOLID y a separar responsabilidades. Descubr&#237; c&#243;mo escribir realmente c&#243;digo limpio sin tener que leerme un libro.</p></li><li><p><strong>Flujos de trabajo y despliegues seguros:</strong> adi&#243;s a subir cosas a lo loco al repositorio. Me ense&#241;aron a usar Git en equipo, pipelines de Integraci&#243;n Continua (CI/CD) y a hacer despliegues automatizados donde nadie ten&#237;a que cruzar los dedos y rezar para que producci&#243;n no explotara.</p></li><li><p><strong>Arquitecturas a prueba de balas:</strong> me pas&#233; horas y horas leyendo los repositorios de mis compa&#241;eros con m&#225;s experiencia. Descubr&#237; c&#243;mo aplicaban patrones de dise&#241;o para construir sistemas modulares que no se ca&#237;an a pedazos cada vez que el cliente ped&#237;a un requerimiento nuevo. Cosas que en mi burbuja de freelance habr&#237;a tardado una d&#233;cada en deducir.</p></li></ul><p>Esa experiencia, esas horas leyendo c&#243;digo ajeno y entendiendo arquitecturas complejas, fue la que, tiempo m&#225;s tarde, me permiti&#243; enfrentarme a la bestialidad t&#233;cnica que es trabajar en proyectos para <strong>Airbus</strong> y sentirme c&#243;modo con ello.</p><p>Entrar a repositorios gigantescos con est&#225;ndares estrictos ya no me daba miedo, porque me hab&#237;an ense&#241;ado la habilidad m&#225;s importante de todas: a leer, entender y respetar el c&#243;digo a nivel profesional.</p><h3>El retorno al mundo freelance (esta vez, de verdad)</h3><p>Y es exactamente esa madurez t&#233;cnica la que me permiti&#243; en 2025 volver a ser 100% freelance, pero esta vez por la puerta grande.</p><p>Ser freelance ahora no tiene absolutamente nada que ver con la ruleta rusa que era mi vida en 2018.</p><p>En mis inicios, mi supuesta libertad y el valor que aportaba a un cliente era una ilusi&#243;n.</p><p>Hoy, cuando un cliente me contrata, no le vendo l&#237;neas de c&#243;digo: <strong>le vendo ingenier&#237;a y tranquilidad.</strong></p><ul><li><p><strong>Duermo tranquilo:</strong> monto los proyectos con una arquitectura s&#243;lida desde el primer commit. Configuro mis propios pipelines (CI/CD) y puedo hacer un despliegue a producci&#243;n un viernes desde una cafeter&#237;a en Viena sin que me suden las manos.</p></li><li><p><strong>Mantengo sin sufrir:</strong> si tengo que retomar el proyecto de un cliente seis meses despu&#233;s, mi c&#243;digo est&#225; estructurado y limpio. Ya no me dan ganas de llorar al leer mis propios archivos.</p></li><li><p><strong>Hablo de t&#250; a t&#250; con los grandes:</strong> haber pasado por una empresa y haber tocado c&#243;digo de gigantes como Airbus me dio el criterio para saber decir no a malas decisiones de producto y poder justificarlo. Ahora hablo el mismo idioma que los Tech Leads de mis clientes.</p></li><li><p><strong>Tarifas de Senior:</strong> ya no cobro por hacer una web, cobro por dise&#241;ar soluciones escalables que no van a dejar tirado al cliente cuando su negocio crezca. Y eso se paga (y se valora) much&#237;simo mejor.</p></li></ul><p>Por eso hoy puedo viajar por Europa y escribirte desde Faro con una paz mental absoluta.</p><p>Esa libertad id&#237;lica que buscaba en 2018 no me la dio el hacerme aut&#243;nomo. Me la dio <strong>haber aprendido en una empresa.</strong></p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/ser-freelance-fue-mi-peor-decision/comments&quot;,&quot;text&quot;:&quot;Deja un comentario&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/ser-freelance-fue-mi-peor-decision/comments"><span>Deja un comentario</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/ser-freelance-fue-mi-peor-decision?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Compartir&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/ser-freelance-fue-mi-peor-decision?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Compartir</span></a></p><div><hr></div><h3>La moraleja de mi historia</h3><p>No me malinterpretes. La vida que tengo hoy, viajando y eligiendo mis proyectos como freelance no est&#225; mal.</p><p>No es lo id&#237;lico que muchos piensan, pero eso da para otra entrega de la newsletter.</p><p>Si quieres ser freelance, no te quiero desanimar.</p><p>Simplemente advertirte que si quieres ser un desarrollador s&#243;lido, es un estilo de vida que debes desbloquear <strong>despu&#233;s</strong> de haber pasado por las trincheras de trabajar en una (o varias) empresas).</p><p>Ser freelance no es algo que te aconseje para los inicios de tu carrera profesional.</p><p>&#191;Puedes hacerlo? Claro, pero te vas a perder un crecimiento profesional bastante grande.</p><p>Nos vemos en la pr&#243;xima entrega. </p><p><strong>Juli&#225;n</strong></p>]]></content:encoded></item><item><title><![CDATA[El cuello de botella que diseñé sin darme cuenta]]></title><description><![CDATA[El error silencioso que convierte un c&#243;digo limpio en una experiencia lenta]]></description><link>https://ceroasenior.substack.com/p/el-cuello-de-botella-que-disene-sin</link><guid isPermaLink="false">https://ceroasenior.substack.com/p/el-cuello-de-botella-que-disene-sin</guid><dc:creator><![CDATA[Julián Campos]]></dc:creator><pubDate>Thu, 26 Feb 2026 08:01:45 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/2cb039dc-1f35-4964-aa42-86d8660317e6_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Sin prisa, pero sin pausa.</p><p>As&#237; est&#225; siendo el desarrollo de <strong><a href="https://kpiads.app">KPIAds.app</a>.</strong></p><p>Por suerte o por desgracia, estoy hasta arriba de trabajo y no le estoy pudiendo dedicar el tiempo que me gustar&#237;a al desarrollo de mi side project.. pero tampoco lo abandono.</p><p>Si sigues las entregas sobre el desarrollo de KPIAds, sabr&#225;s (o te intuir&#225;s) que estamos acabando la fase de dise&#241;o de todo el sistema.</p><p>Aunque est&#225; siendo bastante lento, es crucial para que luego el desarrollo vaya fluido y las cosas est&#233;n claras.</p><p>Que no nos toque improvisar en temas tan importantes como la arquitectura de nuestro futuro SaaS.</p><p>Tambi&#233;n sabr&#225;s, si le&#237;ste <strong><a href="/__u/ceroasenior.substack.com/p/el-anti-patron-que-esta-matando-tu">la &#250;ltima entrega sobre KPIAds</a></strong>, que en esta &#250;ltima entrega dimos un paso gigante en el dise&#241;o de <strong>KPIAds</strong>: decidimos sacar la l&#243;gica de negocio de los controladores y encapsularla en <em>Actions</em>.</p><p>Dejamos bien claro c&#243;mo ser&#237;a el flujo de nuestro SaaS , un flujo bien precioso donde todo gira entorno a Route &#8594; Controller &#8594; Action &#8594; View.</p><p>Cada pieza tiene una &#250;nica responsabilidad. Todo parece perfecto.</p><p>Pero hay una trampa mortal en la fase de dise&#241;o en la que es muy f&#225;cil caer. Una trampa que dejar&#225; tu c&#243;digo muy limpio, pero que <strong>destrozar&#225; la experiencia de tu usuario</strong>.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#191;Te gustan las entregas de CERO a SENIOR? No olvides suscribirte y recibir&#225;s semanalmente herramientas que cambiar&#225;n tu trabajo como programador</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p>D&#233;jame plantearte este escenario.</p><p>&#191;Qu&#233; pasa cuando un usuario crea un nuevo proyecto en la plataforma?</p><ol><li><p>Guardamos el proyecto en la base de datos.</p></li><li><p>Generamos las m&#233;tricas por defecto.</p></li><li><p>Le enviamos un email de bienvenida.</p></li><li><p>Notificamos al administrador por Slack.</p></li></ol><p>Si en nuestro dise&#241;o metemos todo esto de forma secuencial dentro de la caja del Action CreateProjectAction&#8230; &#191;sabes qu&#233; va a pasar cuando programemos esto? </p><p>Que el usuario har&#225; clic en &#8220;Crear&#8221;, y se quedar&#225; mirando la pantalla de carga durante 4 o 5 segundos mientras el servidor espera a que las APIs de correo y Slack respondan.</p><p><strong>S&#237;, acabamos de dise&#241;ar un cuello de botella.</strong></p><h3>El problema del acoplamiento oculto</h3><p>Cuando dise&#241;as una <em>Action</em> para que haga su trabajo principal (crear el proyecto) pero adem&#225;s le otorgas la responsabilidad de disparar efectos secundarios (emails, notificaciones, sincronizaciones), est&#225;s violando el principio de responsabilidad &#250;nica por la puerta de atr&#225;s.</p><p>La soluci&#243;n para dise&#241;ar un sistema que escale, sin que los tiempos de respuesta se disparen, se llama <strong>Arquitectura Orientada a Eventos o Event-Driven Architecture</strong>.</p><p>En lugar de que la <em>Action</em> se encargue de todo, su &#250;nica responsabilidad ser&#225; hacer su trabajo principal y comunicar al resto que lo ha hecho.</p><p>Estos son los 3 pilares de comunicaci&#243;n interna que he dejado definidos en el documento de arquitectura de KPIAds:</p><h3>1. Domain Events</h3><p>Un Evento de Dominio no es una acci&#243;n, es un hecho. Describe algo que ya ha pasado en el sistema. </p><p>En nuestro dise&#241;o, por ejemplo,  hemos definido el evento ProjectCreated.</p><p>A partir de ahora, la <em>Action</em> guarda el proyecto y simplemente &#8220;dispara&#8221; este evento.</p><p>Inmediatamente despu&#233;s, devuelve la respuesta al usuario. </p><p><strong>Tiempo de espera dise&#241;ado: 0.1 segundos, </strong>de esta forma<strong> </strong>el usuario no espera por procesos de terceros.</p><h3>2. Listeners y Jobs</h3><p>Pero claro, el email hay que enviarlo&#8230; &#191;Qui&#233;n lo dise&#241;a? </p><p>Para esto tendremos que definir <em>Listeners</em> (oyentes). </p><p>Se tratan de cajas en nuestra arquitectura que est&#225;n escuchando por si alguien grita ProjectCreated.</p><p>Es decir, es un trozo de nuestro sistema que est&#225; todo el rato pendiente de que alguna otra parte del sistema comunique que ha creado el proyecto (Domain Event).</p><p>Pero como enviar un email bloquea el sistema, el Listener no lo env&#237;a directamente. </p><p>Su &#250;nica funci&#243;n es empaquetar esa tarea en un <strong>Job</strong> y tirarlo a una cola de trabajo para que se procese luego.</p><h3>3. Colas con Redis + Horizon (La infraestructura as&#237;ncrona)</h3><p>Esos <em>Jobs</em> no se ejecutar&#225;n en el mismo proceso que atiende al usuario. </p><p>Para KPIAds, la decisi&#243;n de dise&#241;o es usar <strong>Redis</strong> (una base de datos en memoria ultrarr&#225;pida) para gestionar estas colas.</p><p>Por detr&#225;s, habr&#225; <em>Workers</em> (procesos en segundo plano) cogiendo esos trabajos uno a uno. </p><p>Y para gobernar todo esto sin ir a ciegas, la pieza clave de monitorizaci&#243;n que hemos elegido es <strong>Laravel Horizon</strong>.</p><h3>Diagrama y Contratos de Dise&#241;o</h3><p>Como a&#250;n no hemos escrito una sola l&#237;nea de c&#243;digo en el IDE, as&#237; es como se ve este flujo en nuestros documentos de dise&#241;o. F&#237;jate en la diferencia entre el tiempo que espera el usuario y lo que pasa por detr&#225;s:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!dWWW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fbcb34a-56e1-4794-8a04-46f5944754d1_3306x5388.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!dWWW!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fbcb34a-56e1-4794-8a04-46f5944754d1_3306x5388.png 424w, /__u/substackcdn.com/image/fetch/$s_!dWWW!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fbcb34a-56e1-4794-8a04-46f5944754d1_3306x5388.png 848w, /__u/substackcdn.com/image/fetch/$s_!dWWW!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fbcb34a-56e1-4794-8a04-46f5944754d1_3306x5388.png 1272w, /__u/substackcdn.com/image/fetch/$s_!dWWW!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_webp, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fbcb34a-56e1-4794-8a04-46f5944754d1_3306x5388.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!dWWW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fbcb34a-56e1-4794-8a04-46f5944754d1_3306x5388.png" width="584" height="951.8076923076923" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6fbcb34a-56e1-4794-8a04-46f5944754d1_3306x5388.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2373,&quot;width&quot;:1456,&quot;resizeWidth&quot;:584,&quot;bytes&quot;:765078,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://ceroasenior.substack.com/i/189178015?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fbcb34a-56e1-4794-8a04-46f5944754d1_3306x5388.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!dWWW!, /__u/ceroasenior.substack.com/w_424, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fbcb34a-56e1-4794-8a04-46f5944754d1_3306x5388.png 424w, /__u/substackcdn.com/image/fetch/$s_!dWWW!, /__u/ceroasenior.substack.com/w_848, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fbcb34a-56e1-4794-8a04-46f5944754d1_3306x5388.png 848w, /__u/substackcdn.com/image/fetch/$s_!dWWW!, /__u/ceroasenior.substack.com/w_1272, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fbcb34a-56e1-4794-8a04-46f5944754d1_3306x5388.png 1272w, /__u/substackcdn.com/image/fetch/$s_!dWWW!, /__u/ceroasenior.substack.com/w_1456, /__u/ceroasenior.substack.com/c_limit, /__u/ceroasenior.substack.com/f_auto, /__u/ceroasenior.substack.com/q_auto:good, /__u/ceroasenior.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fbcb34a-56e1-4794-8a04-46f5944754d1_3306x5388.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Y para que las distintas capas se comuniquen sin acoplarse, en lugar de c&#243;digo PHP, lo que definimos en esta fase son los <strong>contratos</strong>: qu&#233; informaci&#243;n viaja en cada paso para que los servicios sean independientes.</p><pre><code><code>[ Acci&#243;n ] -&gt; CreateProjectAction
Responsabilidad: Escribir en BBDD y emitir evento.

[ Evento de Dominio ] -&gt; ProjectCreated
Payload requerido:
  - project_id (UUID)
  - user_id (UUID)
  - timestamp_creacion

[ Listener ] -&gt; SetupProjectDefaults
Responsabilidad: Escuchar 'ProjectCreated' y despachar Jobs.
Acciones:
  - dispatch(GenerateMetricsJob, payload: project_id)
  - dispatch(SendWelcomeEmailJob, payload: user_id)
</code></code></pre><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/el-cuello-de-botella-que-disene-sin?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Compartir&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/el-cuello-de-botella-que-disene-sin?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Compartir</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/el-cuello-de-botella-que-disene-sin/comments&quot;,&quot;text&quot;:&quot;Deja un comentario&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/el-cuello-de-botella-que-disene-sin/comments"><span>Deja un comentario</span></a></p><div><hr></div><p>Y bueno, hasta aqu&#237; la entrega de hoy del desarrollo de mi SaaS para controlar el gasto y rendimiento publicitario.</p><p>Quiero que tengas claro con esta entrega en una (de muchas) diferencias entre un programador Junior y uno Senior.</p><p><strong>Un perfil Junior</strong> se pone a escribir c&#243;digo y mete el env&#237;o del email en el controlador para ver si funciona. </p><p><strong>Un perfil Senior</strong> se sienta primero con un papel, dibuja las cajas y se asegura de que el env&#237;o del email no hunda el rendimiento de la aplicaci&#243;n entera.</p><p>Dise&#241;ar el sistema con Eventos y Colas desde el principio marca la diferencia entre una aplicaci&#243;n fr&#225;gil y un software preparado para miles de usuarios.</p><p><strong>&#191;Te ha quedado clara esta separaci&#243;n de conceptos en la fase de dise&#241;o? </strong></p><p><strong>&#191;Quieres que la semana que viene pasemos ya a ver c&#243;mo se traduce esto a c&#243;digo real en el editor?</strong> </p><p>Nos vemos en la pr&#243;xima entrega.</p><p><strong>Juli&#225;n</strong></p>]]></content:encoded></item><item><title><![CDATA[El código es lo de menos: 10 reglas para ser Senior]]></title><description><![CDATA[La diferencia entre un desarrollador estancado y uno que domina su carrera]]></description><link>https://ceroasenior.substack.com/p/el-codigo-es-lo-de-menos-10-reglas</link><guid isPermaLink="false">https://ceroasenior.substack.com/p/el-codigo-es-lo-de-menos-10-reglas</guid><dc:creator><![CDATA[Julián Campos]]></dc:creator><pubDate>Sun, 22 Feb 2026 08:00:49 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/f4408ba0-3b0b-431a-a816-acd9376edac3_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hace tiempo, en una entrega de la Newsletter, compart&#237; contigo <strong><a href="/__u/ceroasenior.substack.com/p/10-consejos-que-aceleran-tu-camino">10 consejos</a></strong> que, sinceramente, me hubieran ahorrado muchos dolores de cabeza y horas perdidas si alguien me la hubiera dado cuando estaba empezando.</p><p>Si algo me he dado cuenta a lo largo de los &#250;ltimos a&#241;os trabajando en el mundo del desarrollo es de una verdad inc&#243;moda.</p><p>Y es que <strong>saber la sintaxis de un lenguaje o el &#250;ltimo framework de moda no te hace Senior.</strong></p><p>Lo que realmente te convierte en desarrollador Senior es tu criterio.</p><p>C&#243;mo tomas decisiones.</p><p>C&#243;mo gestionas tu tiempo.</p><p>C&#243;mo te enfrentas a la frustraci&#243;n t&#233;cnica y c&#243;mo entiendes que el c&#243;digo es solo una herramienta para resolver problemas. </p><p>Los desarrolladores que se estancan en la etapa Junior/Mid suelen ser los que se obsesionan solo con la tecnolog&#237;a y olvidan el contexto.</p><p>Por eso, hoy te traigo otros <strong>10 consejos</strong> (o m&#225;s bien, verdades) que separan a los que simplemente escriben c&#243;digo de los verdaderos profesionales del software.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#191;Te gustan las entregas de CERO a SENIOR? No olvides suscribirte y recibir&#225;s semanalmente herramientas que cambiar&#225;n tu trabajo como programador</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h3>1. No aprendes solo empezando proyectos, aprendes termin&#225;ndolos.</h3><p>Empezar es f&#225;cil. Terminar es lo que de verdad te forma.</p><p>Es cuando aparecen los problemas reales: decisiones inc&#243;modas, bugs, recortes, simplificaciones&#8230;</p><p>Ah&#237; es donde empiezas a desarrollar criterio. Algo que ning&#250;n tutorial puede darte.</p><h3>2. Automatiza lo aburrido.</h3><p>Si haces algo m&#225;s de dos o tres veces, probablemente deber&#237;as automatizarlo.</p><p>Cada minuto que ahorras en tareas repetitivas es tiempo que puedes dedicar a pensar mejor.</p><p>Y tu valor no est&#225; en escribir c&#243;digo r&#225;pido, sino en pensar bien. </p><p>Aqu&#237; la IA es una gran aliada.</p><h3>3. La organizaci&#243;n personal tambi&#233;n es una <em>skill</em> t&#233;cnica.</h3><p>Esto se subestima much&#237;simo.</p><p>Cuando no tienes claro qu&#233; hacer, en qu&#233; orden o por qu&#233;&#8230; tu c&#243;digo lo refleja.</p><p>Ordenar tus tareas, tu entorno y tu cabeza es parte de programar mejor.</p><h3>4. La humildad t&#233;cnica te hace avanzar m&#225;s que el ego.</h3><p>No creces demostrando lo que sabes.</p><p>Creces estando abierto a lo que no sabes.</p><p>Escuchar en una code review, aceptar feedback o cambiar de opini&#243;n es inc&#243;modo&#8230;<br>pero es lo que te hace avanzar.</p><h3>5. No midas tu progreso por horas, m&#237;delo por claridad.</h3><p>Puedes estar 8 horas delante del ordenador sin avanzar nada.</p><p>Y otros d&#237;as, en una sola idea, avanzar much&#237;simo.</p><p>Muchas veces, progresar es entender qu&#233; NO hay que hacer.</p><h3>6. No te sobrecargues de tutoriales. Aprende menos, aplica m&#225;s.</h3><p>Consumir contenido da sensaci&#243;n de progreso.</p><p>Pero si no aplicas, no sirve de nada.</p><p>Lo que construyes, lo que rompes y lo que arreglas&#8230; eso es lo que se queda.</p><h3>7. Los logs son tu mejor aliado.</h3><p>Esto parece b&#225;sico, pero marca una diferencia enorme.</p><p>Antes de tocar c&#243;digo sin rumbo, mira qu&#233; est&#225; pasando realmente.</p><p>Aprender a leer logs con calma te ahorra horas (y frustraci&#243;n).</p><h3>8. Tu portafolio no son tus proyectos, es tu criterio.</h3><p>En una entrevista t&#233;cnica no importa cu&#225;ntos repositorios tengas en GitHub, sino c&#243;mo piensas en ellos. Las decisiones que tomaste, lo que priorizaste y lo que decidiste descartar es lo que realmente demuestra tu nivel al que te est&#225; evaluando (y lo que deber&#237;as aprender a documentar y vender, m&#237;rate las entregas de <strong><a href="/__u/ceroasenior.substack.com/t/producto">KPIAds</a></strong><a href="/__u/ceroasenior.substack.com/t/producto"> </a>y c&#243;mo estamos documentando todo).</p><h3>9. La IA no te sustituye, te expone.</h3><p>Si solo sabes escribir c&#243;digo de forma mec&#225;nica, la IA te puede reemplazar.</p><p>Pero si sabes pensar, decidir y entender el problema&#8230; la IA te multiplica.</p><p>La diferencia est&#225; ah&#237;.</p><h3>10. Refactorizar no es perder el tiempo, es invertir en tu futuro yo.</h3><p>El c&#243;digo que no limpias hoy, te lo encontrar&#225;s ma&#241;ana&#8230; pero peor.</p><p>M&#225;s bugs, m&#225;s deuda t&#233;cnica y m&#225;s frustraci&#243;n.</p><p>Refactorizar no es perder el tiempo. Es invertirlo.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/el-codigo-es-lo-de-menos-10-reglas/comments&quot;,&quot;text&quot;:&quot;Deja un comentario&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/el-codigo-es-lo-de-menos-10-reglas/comments"><span>Deja un comentario</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscr&#237;bete ahora&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/subscribe"><span>Suscr&#237;bete ahora</span></a></p><div><hr></div><p>Para acabar, te voy a dejar otro consejo extra: </p><p>No intentes aplicar estas 10 cosas de golpe ma&#241;ana por la ma&#241;ana. Eso es receta segura para agobiarse y no hacer nada.</p><p>Elige solo una y apl&#237;calo.</p><p>Si esta semana te centras simplemente en aprender a leer mejor los logs antes de tocar c&#243;digo, o en por fin terminar y desplegar ese <em>side project</em> que tienes a medias desde octubre, ya habr&#225;s dado un salto enorme en tu carrera.</p><p>La experiencia no se gana calentando la silla durante a&#241;os, se gana acumulando buenas decisiones y aprendiendo de las malas.</p><p>Me encantar&#237;a saber cu&#225;l de estos 10 consejos te ha resonado m&#225;s o cu&#225;l te cuesta m&#225;s aplicar en tu d&#237;a a d&#237;a.</p><p>Nos vemos la semana que viene.</p><p><strong>Juli&#225;n</strong></p>]]></content:encoded></item><item><title><![CDATA[Criterio técnico > Fanatismo]]></title><description><![CDATA[Si criticas tecnolog&#237;as as&#237;, sigues pensando como Junior]]></description><link>https://ceroasenior.substack.com/p/criterio-tecnico-fanatismo</link><guid isPermaLink="false">https://ceroasenior.substack.com/p/criterio-tecnico-fanatismo</guid><dc:creator><![CDATA[Julián Campos]]></dc:creator><pubDate>Sun, 15 Feb 2026 08:01:56 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/aa99ceab-96cc-4441-a1e5-eaf975ab1bef_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Llevo cuatro a&#241;os creando contenido sobre programaci&#243;n y pensaba que ya estaba curado de espanto.</p><p>Cre&#237;a que en Twitter, donde m&#225;s activo estoy, era donde se concentraban los <em>haters</em> y los <em>fanboys</em> radicales de cualquier tecnolog&#237;a. Pero esta semana, <strong><a href="https://www.linkedin.com/in/juliancamposes/">LinkedIn</a> me ha dado una bofetada de realidad.</strong></p><p>Y no, no te escribo esto para contarte un salseo de redes sociales.</p><p>Te lo cuento porque detr&#225;s de esta peque&#241;a pol&#233;mica se esconde <strong>un error de mentalidad muy grave</strong> que diferencia a un Junior que se estanca de un Senior que avanza.</p><p>D&#233;jame ponerte en contexto.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#191;Te gustan las entregas de CERO a SENIOR? No te olvides suscribirte y recibir&#225;s semanalmente un nuevo consejo para tu carrera como programador</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p>Llevo un tiempo cruz&#225;ndome con publicaciones de LinkedIn (de desarrolladores y agencias de marketing) con un patr&#243;n recurrente. </p><p>Una t&#225;ctica muy vieja y muy poco elegante: <strong>destrozar una tecnolog&#237;a para vender otra.</strong></p><p>El argumento era el cl&#225;sico <em>&#8220;</em>WordPress es inseguro, est&#225; lleno de plugins, cuesta escalar&#8230; y por eso nosotros usamos Next.js (o Astro, o cualquier otra cosa moderna)<em>&#8221;.</em></p><p>Cansado de ver esto, decid&#237; hacer una publicaci&#243;n en mi perfil. Algo con educaci&#243;n y datos t&#233;cnicos.</p><p>No para justificar WordPress <em>per se</em>, sino para explicar que esa comparaci&#243;n era tramposa.</p><p>Les dije que estaban comparando un <strong>WordPress amateur</strong> hecho con plantillas de 50&#8364; (o constructores visuales pesados) contra un <strong>desarrollo a medida en React idealizado</strong>.</p><p><em>(Por cierto: s&#237;, en WordPress puedes desarrollar con React, bloques personalizados y bien optimizados, pero ese no es el tema de hoy).</em></p><p><strong>&#191;Sabes qu&#233; respuesta obtuve?</strong></p><p>Lejos de aceptar el debate t&#233;cnico, me acusaron de ser terco, de parecer una secta y siguieron repitiendo sus dogmas sin leer mis argumentos.</p><p>Lo peor de todo es que yo no estaba defendiendo WordPress y que no solo trabajo con WordPress como freelance (tambi&#233;n lo hago con React, Prestashop, Shopify, Laravel&#8230;). </p><p>Estaba defendiendo que <strong>cada tecnolog&#237;a tiene su contexto</strong> y que no hay herramientas buenas o malas, solo herramientas adecuadas o inadecuadas.</p><p>Y aqu&#237; es donde quiero aprovechar esta pol&#233;mica para darte <strong>tres consejos</strong> que diferencian a un Junior enfadado de un Senior pragm&#225;tico.</p><h3>No uses la cr&#237;tica de A para justificar B</h3><p>Si tu &#250;nico argumento para vender una tecnolog&#237;a (sea Next.js, Astro, Go o Wordpress) es decir que la otra es una mierda, <strong>tienes un problema de argumentaci&#243;n.</strong></p><p>Cada tecnolog&#237;a tiene su prop&#243;sito.</p><ul><li><p><strong>WordPress</strong> mueve el 43% de la web porque democratiz&#243; la publicaci&#243;n de contenido. Bien usado, es robusto y permite que equipos de marketing vuelen solos.</p></li><li><p><strong>Next.js</strong> es una maravilla para aplicaciones complejas, interactividad y estado global.</p></li><li><p><strong>Laravel</strong> es el rey de la productividad en backend.</p></li></ul><p>Un buen ingeniero no dice <em>WordPress no sirve</em>. </p><p>Un buen ingeniero dice: <em>para este proyecto en concreto, donde necesitamos renderizado din&#225;mico masivo y escalabilidad horizontal, WordPress no es la herramienta adecuada. Usemos Next.js por X, Y y Z ventajas</em>.</p><p><strong>Vende por las virtudes de tu soluci&#243;n, no por los defectos (reales o inventados) de la competencia.</strong></p><h3>Las herramientas no son una religi&#243;n</h3><p>Uno de los errores m&#225;s graves que puedes cometer en tu carrera es <strong>casarte con una tecnolog&#237;a.</strong></p><p>Cuando empiezas, es normal sentir pasi&#243;n por el lenguaje que est&#225;s aprendiendo.</p><p>Si aprendes React, todo lo que no sea React te parece obsoleto.</p><p>Si aprendes PHP, todo lo moderno te parece humo.</p><p>Pero un <strong>Senior</strong> sabe que <strong>no existen las balas de plata.</strong></p><p>Criticar una tecnolog&#237;a llam&#225;ndola &#8220;ineficiente&#8221; porque t&#250; prefieres otra, te cierra puertas y demuestra falta de visi&#243;n.</p><h3>Conoce los <em>Trade-offs</em> (Pros y Contras)</h3><p>El mercado no te paga por defender un framework a capa y espada. El mercado te paga por <strong>tener el criterio t&#233;cnico para elegir la herramienta m&#225;s eficiente para cada problema.</strong></p><p>Un buen arquitecto de software no dice que una tecnolog&#237;a es una mierda.... un buen arquitecto analiza el contexto:</p><p><strong>&#191;El cliente necesita un blog autogestionable y el equipo de marketing quiere editarlo todo sin llamarte? </strong></p><p>Aqu&#237; <strong>WordPress</strong> es una bestia imbatible. Montar esto en Next.js desde cero es reinventar la rueda y crearle una deuda t&#233;cnica al cliente que no necesita.</p><p><strong>&#191;Necesitas una aplicaci&#243;n web compleja, con estado global, mucha interactividad y sensaci&#243;n de App nativa? </strong></p><p>Aqu&#237; <strong>Next.js</strong> o <strong>Laravel</strong> con Inertia son la mejor opci&#243;n. Intentar forzar esto en un WordPress con 50 plugins es un suicidio.</p><p><strong>&#191;Es un sitio puramente est&#225;tico de contenido? </strong></p><p>Aqu&#237; <strong>Astro</strong> brilla por su rendimiento.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/p/criterio-tecnico-fanatismo?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Compartir&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/p/criterio-tecnico-fanatismo?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Compartir</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ceroasenior.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscr&#237;bete ahora&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/ceroasenior.substack.com/subscribe"><span>Suscr&#237;bete ahora</span></a></p><div><hr></div><p>Para cerrar la entrega de hoy, algo curioso de este debate fue la nula capacidad de la otra parte para leer mis argumentos t&#233;cnicos.</p><p>Cuando les habl&#233; de problemas reales de ingenier&#237;a en JS (como el <em>dependency hell</em>), su cerebro filtr&#243; esa informaci&#243;n y solo respondi&#243; con ataques personales.</p><p>Y esto es peligroso. </p><p>En nuestra profesi&#243;n, la <strong>comprensi&#243;n lectora</strong> es vital. Si no eres capaz de leer la documentaci&#243;n de una librer&#237;a, o el comentario de un compa&#241;ero en una <em>Code Review</em> sin sesgos y con atenci&#243;n, vas a cometer errores muy caros.</p><p>S&#233; agn&#243;stico. </p><p>Aprende de todo. </p><p>Usa de todo. </p><p>Y critica con datos y contexto, nunca con dogma.</p><p>Nos vemos la pr&#243;xima semana. </p><p><strong>Juli&#225;n</strong></p><p></p>]]></content:encoded></item></channel></rss>