Howdy

Nuestro blog

Codea 5X mejor (no más rápido) con IA

Programar con IA no va (solo) de ir más rápido, sino de escribir mejor código. Este artículo propone cinco tácticas prácticas para usar herramientas como Claude Code con criterio: más calidad, mejor arquitectura y menos caos. La velocidad llega sola. La diferencia está en cómo pensás.

Publicado 2026-01-12
LinkedInTwitter
Manos de un desarrollador codeando
author avatar
Darío Macchi
Developer Advocate @Howdy

Contenido

    Este artículo busca explorar cómo programar con asistencia de IA, en particular usando Claude Code, puede llevarte a escribir mejor código, no solo a hacerlo más rápido. Si bien la IA puede acelerar el desarrollo, el foco acá está en mejorar la calidad, mantenibilidad y efectividad general del código producido.

    No me malinterpretes: vas a ser más rápido igual, porque la IA escribe código más rápido que cualquier humano, pero el objetivo no es la velocidad, sino obtener mejores resultados. La rapidez llega como efecto secundario del uso de una IA.

    Si buscas en Google (o le preguntas a tu IA favorita), vas a encontrar toneladas de buenas prácticas para trabajar con IA, llenas de estrategias a seguir, consejos de configuración, la lógica y filosofía detrás de cada guía, etc. Y sí, este es otro de esos artículos.

    Lo único que lo diferencia de otros repositorios de guías sobre IA es que no prometo que sea el mejor. De hecho, estoy bastante seguro de que apenas se publique este artículo voy a querer hacerle algunas actualizaciones aquí y allí. ¡Al menos no lo voy a querer reescribir entero!

    Las cosas están cambiando bastante rápido, así que es importante pensar en cómo queremos trabajar, pero sin aferrarnos demasiado a nuestros procesos.

  1. Tácticas personales
  2. Inspirado en un correo de Shaw Talebi titulado “5 Tips That Help Me Code 5X Faster with AI”, me tomé un tiempo para reflexionar sobre mi propio recorrido y estrategias en la generación de código asistido por IA. Curiosamente, cada una de las cinco tácticas que Talebi describió encajan perfectamente con los métodos que vengo usando en los últimos meses, que ya he descrito antes [4]. También he comparado estos enfoques con otras fuentes, lo que refuerza mi perspectiva sobre el tema.

    Táctica 1: Incorporar LLM directamente en tu base de código para mejorar la productividad

    TL;DR: integrar LLMs directamente en tu flujo de trabajo implica tratarlos como un compañero junior dentro de tu repositorio, no solo como asistentes de chat. Esta estrategia no solo mejora la productividad, sino que acelera patrones conocidos mediante automatización y fomenta la colaboración entre inteligencia humana y artificial.

    Incorporar modelos de lenguaje grande (LLMs) directamente en tu entorno de desarrollo puede mejorar significativamente tu proceso. En lugar del método “tradicional” de copiar y pegar código entre una IA como ChatGPT y tu entorno de desarrollo integrado (IDE), considera usar un IDE potenciado por IA que integre los LLMs directamente en tu base de código. Este enfoque permite que el modelo acceda y comprenda el contexto de todo tu proyecto, haciendo que sus sugerencias sean más relevantes y precisas.

    Simon Willison (co-creador de Django), defensor de incorporar LLMs en herramientas y flujos de trabajo, destaca la importancia de tratarlos no como asistentes externos, sino como partes integrales de tu kit de ingeniería. Él señala:

    “Lo realmente emocionante es conectar estos modelos con tus propios sistemas —que puedan hacer consultas sobre tus propios datos o código. Ahí es donde empiezan a volverse herramientas de ingeniería realmente útiles.” [1]

    Al integrar los LLMs directamente en tus sistemas, pasás de una mera conversación a un software más inteligente, capaz de adaptarse dinámicamente a las necesidades de tu proyecto. Este enfoque transforma a los LLMs de simples chatbots a poderosos aceleradores cuando se los trata como componentes programables.

    La clave para operacionalizar la IA de forma efectiva está en incrustar estos modelos dentro de tu ciclo de desarrollo. Al conectarlos con el contexto del repositorio, les permitís actuar como un ingeniero senior emparejado con vos:

    “Tratá a la IA como a un ingeniero senior emparejado contigo: especificá, revisá, iterá.” [2]

    Mantener el contexto es crucial; conservar ideas, especificaciones, arquitectura y reglas dentro del repositorio garantiza que cada prompt de IA se beneficie de ese contexto enriquecido.

    Para implementar esta táctica de forma eficiente:

    • Usá documentación existente de proyectos anteriores, como docs/convention.md y docs/workflow.md, e integrarlas en nuevos proyectos copiándolas dentro del directorio .cursor/rules [2].
    • Establecé límites y pautas claras sobre cómo los agentes de IA interactuarán con la base de código.
    • Creá patrones arquitectónicos sólidos que los agentes puedan seguir para garantizar consistencia.
    • Desarrolla bucles de retroalimentación efectivos entre desarrolladores humanos y capacidades de IA.

    Como se destaca en el newsletter The Pragmatic Engineer:

    “La IA destaca en ayudarnos a implementar patrones que ya entendemos. Es como tener un compañero de programación infinitamente paciente que escribe muy rápido.” [3]

    Al integrar LLMs en la base de código, los equipos pueden automatizar el scaffolding, el refactoring y las pruebas, mientras mantienen la coherencia arquitectónica. Los equipos más efectivos de los próximos años serán probablemente aquellos que aprendan a aprovechar estas capacidades de forma inteligente.

    Táctica 2: Escribir especificaciones a nivel de proyecto

    TL;DR: integrar esta táctica en tu flujo de trabajo escribiendo especificaciones de proyecto detalladas crea un entorno donde la creatividad humana y las soluciones generadas por IA pueden prosperar juntas para alcanzar los objetivos del proyecto.

    En el contexto de la programación asistida por IA, una de las estrategias más efectivas es comenzar con especificaciones detalladas a nivel de proyecto. Usando herramientas como el archivo CLAUDE.md de Claude Code para delinear cuidadosamente aspectos como el stack tecnológico, la arquitectura, el alcance y los usuarios objetivo, se puede mejorar notablemente la alineación entre la visión del proyecto y las respuestas generadas por los modelos de lenguaje (LLMs). Este enfoque minimiza errores derivados de supuestos incorrectos hechos por la IA.

    Simon Willison enfatiza que los ingenieros obtienen mejores resultados cuando proporcionan contexto estructurado. En sus palabras:

    “Si le decís al modelo ‘esto es lo que queremos lograr’, funciona muchísimo mejor. No solo tires código: describí la intención detrás de él.” [1]

    Esto resalta la importancia de no saltarse la fase de planificación. La mayoría de las personas se lanza directo a escribir prompts, pero los LLMs brillan cuando se les da una especificación detallada. Al aportar claridad desde el inicio, reducís sorpresas más adelante en el desarrollo.

    La idea es que las especificaciones del proyecto sirvan como una “estrella del norte” tanto para los humanos como para las herramientas de IA. Guían las acciones siguientes y garantizan que todos estén alineados bajo una misma visión.

    Según la guía “Vibe-Coding Done Right” [2], la especificación debe ser “una especificación técnica concisa” que actúe como una “fuente única de verdad”:

    “Escribí una especificación técnica concisa y ejecutable que actúe como hoja de ruta y documentación… incluí stack técnico, arquitectura del proyecto, dominio y modelo de datos, API, estrategia de testing, almacenamiento, seguridad, presupuestos de performance, estrategia de observabilidad y logging, feature flags, i18n/a11y, analíticas, no-objetivos y estrategia de despliegue.” [2]

    Este documento sirve como punto de referencia para todas las interacciones con la IA: cada prompt debería alinearse con esta especificación.

    Además, existe una guía de meta-prompts sobre cómo generar especificaciones con LLMs:

    “Hacé preguntas si algo no está claro o hay múltiples opciones posibles. Pero no sobre-ingenierices. Enfocate en un MVP listo para producción.” [2]

    Una especificación bien documentada brinda el contexto crucial para generar código de alta calidad y consistencia desde la IA. Sin esa “estrella del norte” compartida, tanto los sistemas de IA como los desarrolladores humanos corren el riesgo de optimizar hacia objetivos equivocados.

    Para aprovechar la IA de forma realmente efectiva —cinco veces mejor— es esencial invertir tiempo en planificación y diseño desde el principio. Esto asegura que cada paso posterior esté informado por objetivos claros, en lugar de lanzarse a programar sin dirección.

    “La IA no está haciendo que nuestro software sea dramáticamente mejor porque la calidad del software (quizás) nunca estuvo limitada por la velocidad de codificación. Las partes difíciles del desarrollo —entender requerimientos, diseñar sistemas mantenibles, manejar casos límite— todavía requieren juicio humano.” [3]

    Táctica 3: Proveer documentación

    TL;DR: un desafío común cuando un equipo quiere integrar IA en su flujo de trabajo es que los modelos de IA no están familiarizados con librerías o SDKs nuevos o poco comunes. ¿La solución? Documentación completa.

    Una estrategia efectiva es crear una carpeta dedicada dentro del proyecto para almacenar documentos relevantes o texto sobre herramientas nuevas, internas o poco conocidas. Esa carpeta se convierte en una mina de oro de información que ayuda a la IA a entender y trabajar mejor con tecnologías desconocidas. Como Simon enfatiza a menudo, la documentación es el combustible de la asistencia efectiva de IA:

    “Los mejores resultados que obtengo vienen de alimentar al modelo con mi propia documentación —archivos README, docs de API, notas de arquitectura—. De repente, entiende mi mundo.” [1]

    La magia ocurre cuando la IA comprende la jerga y el contexto específicos de tu proyecto. La clave está en darle ese contexto a través de documentación bien estructurada.

    La generación aumentada por recuperación (RAG) es el enfoque más práctico para ingenieros que buscan usar la IA de forma eficiente:

    “RAG es el héroe no reconocido. No necesitás ajustar el modelo; solo darle acceso a tus documentos.” [1]

    Esta táctica resalta cómo la documentación estructurada sienta las bases para todas las acciones futuras de un proyecto. De hecho, frameworks como Vibe Coding Guide están construidos en torno a la documentación como columna vertebral [2], con cada etapa produciendo archivos Markdown.

    La documentación no solo ayuda a la IA, también ayuda a los desarrolladores al actuar como un repositorio de memoria (que, al menos para mí, naturalmente falta). Tu asistente de IA podrá ofrecer sugerencias contextualizadas, aumentando la productividad y minimizando la “deriva de contexto”, porque tiene notas arquitectónicas, documentación de API y decisiones de diseño. Addy Osmani resalta esta importancia:

    “El patrón del ‘primer borrador con IA’: dejá que la IA genere una implementación básica, luego revisá y refactorizá manualmente para modularidad, agregá manejo de errores, escribí tests exhaustivos y documentá las decisiones clave.” [3]

    Empezar nuevos chats de IA para cada tarea ayuda a mantener el foco y reducir la confusión de contexto. Este enfoque garantiza revisiones frecuentes y ciclos de feedback cerrados.

    Táctica 4: Iterar sobre los planes, no sobre el código

    TL;DR: las herramientas de IA permiten a los desarrolladores no solo resolver los desafíos actuales, sino también navegar estratégicamente los futuros con precisión y confianza. Esto se logra iterando sobre los planes, no solo sobre el código.

    Saltar directamente al código en el desarrollo suele llevar a un caos de debugging y problemas arquitectónicos. En cambio, usar IA para generar primero un plan completo puede simplificar enormemente el proceso. Esta táctica mejora la eficiencia de la planificación y la comprensión de la funcionalidad deseada al aclarar la tarea e identificar carencias desde el principio.

    El poder de la planificación

    Un plan bien pensado actúa como un plano que guía el trabajo de programación. Dedicar tiempo al principio para articular planes detallados es la única forma de evitar días perdidos corrigiendo la arquitectura más adelante. Este método enfatiza la importancia de que “planificar ahorra tiempo de debugging” [2], no solo como una frase pegadiza, sino como principio rector del desarrollo eficiente.

    Simon Willison lo explica claramente:

    “La gente piensa que el modelo debería escribir código perfecto. No debería. Debería ayudarte a explorar posibles soluciones —la verdadera ingeniería viene después.” [1]

    Usar la IA como compañera de brainstorming, y no solo como generadora de código, permite esbozar ideas y refinar enfoques antes de escribir código de producción. Es un cambio de mentalidad: usar los LLMs para pensar e iterar, no solo para generar sintaxis.

    Enfoque estructurado de planificación

    Para aplicar esta táctica eficazmente, es fundamental planificar, simular y validar la arquitectura y las tareas antes de generar o editar archivos. La estrategia implica establecer bucles de retroalimentación cerrados antes de programar [2]:

    • Determinismo sobre vibra: establecé listas de control y criterios de aceptación claros antes de empezar. Hacé que la IA confirme el plan antes de generar código.
    • Bucles cortos: seguí un ciclo estructurado (como la generación multi-turn que mencionamos en este artículo).

    Como se detalla en la Sección 7 — Architecture Plan de la guía de Vadim Ivanov:

    “Escribí un plan de implementación por etapas… Para cada paso, incluí instrucciones exactas que indiquen a la IA qué archivos crear, tipos/interfaces/rutas, migraciones, tests y criterios de aceptación.” [2]

    Evitar el whack-a-mole debugging

    La tendencia de iterar infinitamente sobre el código sin revisar las suposiciones de alto nivel lleva al whack-a-mole debugging [3]. En lugar de pedir correcciones menores que puedan romper otras partes, una alternativa más eficiente es pausar, evaluar y refinar la estrategia general.

    El artículo de The Pragmatic Engineer “How AI-assisted coding will change software engineering: hard truths” lo explica así:

    “El patrón de ‘dos pasos atrás’: intentás arreglar un bug pequeño. La IA sugiere un cambio que parece razonable. Ese arreglo rompe otra cosa… y repetís.” [3]

    Como dijimos en nuestro artículo “Ser rápido no es suficiente: cómo programar con velocidad utilizando la IA”, los desarrolladores deberían empezar por tareas pequeñas y aisladas, e ir escalando a funcionalidades más grandes. También deberían revisar cada línea generada. Siguiendo estos pasos, se puede aprovechar la IA para acelerar tareas conocidas, explorar posibilidades y automatizar actividades rutinarias.

    En definitiva, entender en qué la IA sobresale permite a los desarrolladores guiar su salida con intención, reduciendo errores acumulativos mediante diseño y estrategias de test más pensadas.

    Táctica 5: Hacer commits pequeños y frecuentes

    TL;DR: iniciar nuevos chats de IA para tareas específicas ayuda a mantener un contexto claro, mientras que revisar y hacer commits frecuentes asegura alineación con los estándares de ingeniería. Usá la IA para acelerar tu trabajo, no para reemplazar tu criterio: cuestioná cualquier código generado que no te cierre o sea inconsistente con tus estándares.

    En el mundo del código asistido por IA, hacer commits pequeños y frecuentes es invaluable. Esta práctica facilita volver atrás si hay errores y ayuda a entender cómo cada cambio afecta el conjunto del proyecto. Además, los mensajes de commit describen claramente qué hace cada cambio, reforzando la comprensión y la responsabilidad.

    Simon Willison promueve tratar la codificación asistida como un prototipado rápido, con bucles de feedback cerrados a través de pequeños experimentos. En sus palabras: “prompt small, commit small”. Esta filosofía fomenta construir de manera incremental mientras se mantiene el control del proceso. Al registrar ideas funcionales con frecuencia, reducís el riesgo de perder el rumbo y mantenés una trayectoria clara.

    Adoptar este enfoque coincide con las mejores prácticas de muchos flujos de trabajo. Mantener trabajo atómico, observable y revisable garantiza claridad tanto para humanos como para la IA.

    Los commits frecuentes permiten verificar los cambios generados por IA de forma aislada. Esto refleja el patrón de “conversación constante” de Addy Osmani, con ciclos cerrados entre generación, revisión y validación [3]. Cada commit actúa como un punto de control donde podés “confiar, pero verificar”, asegurando que la velocidad de la IA no comprometa la calidad ni la comprensión.

  3. Conclusión
  4. Este artículo enfatiza programar mejor con ayuda de IA, no solo más rápido, siendo la velocidad un efecto colateral positivo. Aunque existen muchas guías, esta reconoce el ritmo acelerado de cambio en la IA y aboga por la adaptabilidad por encima de los procesos rígidos.

    Para lograr mejores resultados, se presentan cinco tácticas clave:

    1. Integrar LLMs directamente en tu base de código para aumentar la productividad: tratá a los LLMs como un compañero junior dentro de tu repo, no solo como asistentes de chat.
    2. Escribir especificaciones de proyecto desde el inicio para alinear creatividad humana e IA y reducir errores.
    3. Proveer documentación para ayudar a la IA a comprender librerías y herramientas nuevas mediante Retrieval-Augmented Generation (RAG).
    4. Iterar sobre planes, no sobre código, usando la IA para planificar, refinar y diseñar antes de programar.
    5. Hacer commits pequeños y frecuentes para mantener el foco, la claridad y los estándares de ingeniería sin perder la agilidad.

    Adoptando estas estrategias, los desarrolladores pueden usar la IA no solo para mejorar la eficiencia del desarrollo, sino también para elevar la calidad y mantenibilidad de su software.

    [1]: AI tools for software engineers, but without the hype – with Simon Willison (Co-Creator of Django) - https://www.youtube.com/watch?v=uRuLgar5XZw

    [2]: Vibe-Coding Done Right: Engineering Manager's Guide to Building Production-Ready AI Apps - https://github.com/vadim-givola/vibe-coding-guide

    [3]: How AI-assisted coding will change software engineering: hard truths - https://newsletter.pragmaticengineer.com/p/how-ai-will-change-software-engineering

    [4]: Ser rápido no es suficiente: cómo programar con velocidad utilizando la IA - https://www.howdylatam.com/blog/ser-rapido-no-es-suficiente-como-programar-con-velocidad-utilizando-la-ia

Este artículo busca explorar cómo programar con asistencia de IA, en particular usando Claude Code, puede llevarte a escribir mejor código, no solo a hacerlo más rápido. Si bien la IA puede acelerar el desarrollo, el foco acá está en mejorar la calidad, mantenibilidad y efectividad general del código producido.

No me malinterpretes: vas a ser más rápido igual, porque la IA escribe código más rápido que cualquier humano, pero el objetivo no es la velocidad, sino obtener mejores resultados. La rapidez llega como efecto secundario del uso de una IA.

Si buscas en Google (o le preguntas a tu IA favorita), vas a encontrar toneladas de buenas prácticas para trabajar con IA, llenas de estrategias a seguir, consejos de configuración, la lógica y filosofía detrás de cada guía, etc. Y sí, este es otro de esos artículos.

Lo único que lo diferencia de otros repositorios de guías sobre IA es que no prometo que sea el mejor. De hecho, estoy bastante seguro de que apenas se publique este artículo voy a querer hacerle algunas actualizaciones aquí y allí. ¡Al menos no lo voy a querer reescribir entero!

Las cosas están cambiando bastante rápido, así que es importante pensar en cómo queremos trabajar, pero sin aferrarnos demasiado a nuestros procesos.

Tácticas personales

Inspirado en un correo de Shaw Talebi titulado “5 Tips That Help Me Code 5X Faster with AI”, me tomé un tiempo para reflexionar sobre mi propio recorrido y estrategias en la generación de código asistido por IA. Curiosamente, cada una de las cinco tácticas que Talebi describió encajan perfectamente con los métodos que vengo usando en los últimos meses, que ya he descrito antes [4]. También he comparado estos enfoques con otras fuentes, lo que refuerza mi perspectiva sobre el tema.

Táctica 1: Incorporar LLM directamente en tu base de código para mejorar la productividad

TL;DR: integrar LLMs directamente en tu flujo de trabajo implica tratarlos como un compañero junior dentro de tu repositorio, no solo como asistentes de chat. Esta estrategia no solo mejora la productividad, sino que acelera patrones conocidos mediante automatización y fomenta la colaboración entre inteligencia humana y artificial.

Incorporar modelos de lenguaje grande (LLMs) directamente en tu entorno de desarrollo puede mejorar significativamente tu proceso. En lugar del método “tradicional” de copiar y pegar código entre una IA como ChatGPT y tu entorno de desarrollo integrado (IDE), considera usar un IDE potenciado por IA que integre los LLMs directamente en tu base de código. Este enfoque permite que el modelo acceda y comprenda el contexto de todo tu proyecto, haciendo que sus sugerencias sean más relevantes y precisas.

Simon Willison (co-creador de Django), defensor de incorporar LLMs en herramientas y flujos de trabajo, destaca la importancia de tratarlos no como asistentes externos, sino como partes integrales de tu kit de ingeniería. Él señala:

“Lo realmente emocionante es conectar estos modelos con tus propios sistemas —que puedan hacer consultas sobre tus propios datos o código. Ahí es donde empiezan a volverse herramientas de ingeniería realmente útiles.” [1]

Al integrar los LLMs directamente en tus sistemas, pasás de una mera conversación a un software más inteligente, capaz de adaptarse dinámicamente a las necesidades de tu proyecto. Este enfoque transforma a los LLMs de simples chatbots a poderosos aceleradores cuando se los trata como componentes programables.

La clave para operacionalizar la IA de forma efectiva está en incrustar estos modelos dentro de tu ciclo de desarrollo. Al conectarlos con el contexto del repositorio, les permitís actuar como un ingeniero senior emparejado con vos:

“Tratá a la IA como a un ingeniero senior emparejado contigo: especificá, revisá, iterá.” [2]

Mantener el contexto es crucial; conservar ideas, especificaciones, arquitectura y reglas dentro del repositorio garantiza que cada prompt de IA se beneficie de ese contexto enriquecido.

Para implementar esta táctica de forma eficiente:

  • Usá documentación existente de proyectos anteriores, como docs/convention.md y docs/workflow.md, e integrarlas en nuevos proyectos copiándolas dentro del directorio .cursor/rules [2].
  • Establecé límites y pautas claras sobre cómo los agentes de IA interactuarán con la base de código.
  • Creá patrones arquitectónicos sólidos que los agentes puedan seguir para garantizar consistencia.
  • Desarrolla bucles de retroalimentación efectivos entre desarrolladores humanos y capacidades de IA.

Como se destaca en el newsletter The Pragmatic Engineer:

“La IA destaca en ayudarnos a implementar patrones que ya entendemos. Es como tener un compañero de programación infinitamente paciente que escribe muy rápido.” [3]

Al integrar LLMs en la base de código, los equipos pueden automatizar el scaffolding, el refactoring y las pruebas, mientras mantienen la coherencia arquitectónica. Los equipos más efectivos de los próximos años serán probablemente aquellos que aprendan a aprovechar estas capacidades de forma inteligente.

Táctica 2: Escribir especificaciones a nivel de proyecto

TL;DR: integrar esta táctica en tu flujo de trabajo escribiendo especificaciones de proyecto detalladas crea un entorno donde la creatividad humana y las soluciones generadas por IA pueden prosperar juntas para alcanzar los objetivos del proyecto.

En el contexto de la programación asistida por IA, una de las estrategias más efectivas es comenzar con especificaciones detalladas a nivel de proyecto. Usando herramientas como el archivo CLAUDE.md de Claude Code para delinear cuidadosamente aspectos como el stack tecnológico, la arquitectura, el alcance y los usuarios objetivo, se puede mejorar notablemente la alineación entre la visión del proyecto y las respuestas generadas por los modelos de lenguaje (LLMs). Este enfoque minimiza errores derivados de supuestos incorrectos hechos por la IA.

Simon Willison enfatiza que los ingenieros obtienen mejores resultados cuando proporcionan contexto estructurado. En sus palabras:

“Si le decís al modelo ‘esto es lo que queremos lograr’, funciona muchísimo mejor. No solo tires código: describí la intención detrás de él.” [1]

Esto resalta la importancia de no saltarse la fase de planificación. La mayoría de las personas se lanza directo a escribir prompts, pero los LLMs brillan cuando se les da una especificación detallada. Al aportar claridad desde el inicio, reducís sorpresas más adelante en el desarrollo.

La idea es que las especificaciones del proyecto sirvan como una “estrella del norte” tanto para los humanos como para las herramientas de IA. Guían las acciones siguientes y garantizan que todos estén alineados bajo una misma visión.

Según la guía “Vibe-Coding Done Right” [2], la especificación debe ser “una especificación técnica concisa” que actúe como una “fuente única de verdad”:

“Escribí una especificación técnica concisa y ejecutable que actúe como hoja de ruta y documentación… incluí stack técnico, arquitectura del proyecto, dominio y modelo de datos, API, estrategia de testing, almacenamiento, seguridad, presupuestos de performance, estrategia de observabilidad y logging, feature flags, i18n/a11y, analíticas, no-objetivos y estrategia de despliegue.” [2]

Este documento sirve como punto de referencia para todas las interacciones con la IA: cada prompt debería alinearse con esta especificación.

Además, existe una guía de meta-prompts sobre cómo generar especificaciones con LLMs:

“Hacé preguntas si algo no está claro o hay múltiples opciones posibles. Pero no sobre-ingenierices. Enfocate en un MVP listo para producción.” [2]

Una especificación bien documentada brinda el contexto crucial para generar código de alta calidad y consistencia desde la IA. Sin esa “estrella del norte” compartida, tanto los sistemas de IA como los desarrolladores humanos corren el riesgo de optimizar hacia objetivos equivocados.

Para aprovechar la IA de forma realmente efectiva —cinco veces mejor— es esencial invertir tiempo en planificación y diseño desde el principio. Esto asegura que cada paso posterior esté informado por objetivos claros, en lugar de lanzarse a programar sin dirección.

“La IA no está haciendo que nuestro software sea dramáticamente mejor porque la calidad del software (quizás) nunca estuvo limitada por la velocidad de codificación. Las partes difíciles del desarrollo —entender requerimientos, diseñar sistemas mantenibles, manejar casos límite— todavía requieren juicio humano.” [3]

Táctica 3: Proveer documentación

TL;DR: un desafío común cuando un equipo quiere integrar IA en su flujo de trabajo es que los modelos de IA no están familiarizados con librerías o SDKs nuevos o poco comunes. ¿La solución? Documentación completa.

Una estrategia efectiva es crear una carpeta dedicada dentro del proyecto para almacenar documentos relevantes o texto sobre herramientas nuevas, internas o poco conocidas. Esa carpeta se convierte en una mina de oro de información que ayuda a la IA a entender y trabajar mejor con tecnologías desconocidas. Como Simon enfatiza a menudo, la documentación es el combustible de la asistencia efectiva de IA:

“Los mejores resultados que obtengo vienen de alimentar al modelo con mi propia documentación —archivos README, docs de API, notas de arquitectura—. De repente, entiende mi mundo.” [1]

La magia ocurre cuando la IA comprende la jerga y el contexto específicos de tu proyecto. La clave está en darle ese contexto a través de documentación bien estructurada.

La generación aumentada por recuperación (RAG) es el enfoque más práctico para ingenieros que buscan usar la IA de forma eficiente:

“RAG es el héroe no reconocido. No necesitás ajustar el modelo; solo darle acceso a tus documentos.” [1]

Esta táctica resalta cómo la documentación estructurada sienta las bases para todas las acciones futuras de un proyecto. De hecho, frameworks como Vibe Coding Guide están construidos en torno a la documentación como columna vertebral [2], con cada etapa produciendo archivos Markdown.

La documentación no solo ayuda a la IA, también ayuda a los desarrolladores al actuar como un repositorio de memoria (que, al menos para mí, naturalmente falta). Tu asistente de IA podrá ofrecer sugerencias contextualizadas, aumentando la productividad y minimizando la “deriva de contexto”, porque tiene notas arquitectónicas, documentación de API y decisiones de diseño. Addy Osmani resalta esta importancia:

“El patrón del ‘primer borrador con IA’: dejá que la IA genere una implementación básica, luego revisá y refactorizá manualmente para modularidad, agregá manejo de errores, escribí tests exhaustivos y documentá las decisiones clave.” [3]

Empezar nuevos chats de IA para cada tarea ayuda a mantener el foco y reducir la confusión de contexto. Este enfoque garantiza revisiones frecuentes y ciclos de feedback cerrados.

Táctica 4: Iterar sobre los planes, no sobre el código

TL;DR: las herramientas de IA permiten a los desarrolladores no solo resolver los desafíos actuales, sino también navegar estratégicamente los futuros con precisión y confianza. Esto se logra iterando sobre los planes, no solo sobre el código.

Saltar directamente al código en el desarrollo suele llevar a un caos de debugging y problemas arquitectónicos. En cambio, usar IA para generar primero un plan completo puede simplificar enormemente el proceso. Esta táctica mejora la eficiencia de la planificación y la comprensión de la funcionalidad deseada al aclarar la tarea e identificar carencias desde el principio.

El poder de la planificación

Un plan bien pensado actúa como un plano que guía el trabajo de programación. Dedicar tiempo al principio para articular planes detallados es la única forma de evitar días perdidos corrigiendo la arquitectura más adelante. Este método enfatiza la importancia de que “planificar ahorra tiempo de debugging” [2], no solo como una frase pegadiza, sino como principio rector del desarrollo eficiente.

Simon Willison lo explica claramente:

“La gente piensa que el modelo debería escribir código perfecto. No debería. Debería ayudarte a explorar posibles soluciones —la verdadera ingeniería viene después.” [1]

Usar la IA como compañera de brainstorming, y no solo como generadora de código, permite esbozar ideas y refinar enfoques antes de escribir código de producción. Es un cambio de mentalidad: usar los LLMs para pensar e iterar, no solo para generar sintaxis.

Enfoque estructurado de planificación

Para aplicar esta táctica eficazmente, es fundamental planificar, simular y validar la arquitectura y las tareas antes de generar o editar archivos. La estrategia implica establecer bucles de retroalimentación cerrados antes de programar [2]:

  • Determinismo sobre vibra: establecé listas de control y criterios de aceptación claros antes de empezar. Hacé que la IA confirme el plan antes de generar código.
  • Bucles cortos: seguí un ciclo estructurado (como la generación multi-turn que mencionamos en este artículo).

Como se detalla en la Sección 7 — Architecture Plan de la guía de Vadim Ivanov:

“Escribí un plan de implementación por etapas… Para cada paso, incluí instrucciones exactas que indiquen a la IA qué archivos crear, tipos/interfaces/rutas, migraciones, tests y criterios de aceptación.” [2]

Evitar el whack-a-mole debugging

La tendencia de iterar infinitamente sobre el código sin revisar las suposiciones de alto nivel lleva al whack-a-mole debugging [3]. En lugar de pedir correcciones menores que puedan romper otras partes, una alternativa más eficiente es pausar, evaluar y refinar la estrategia general.

El artículo de The Pragmatic Engineer “How AI-assisted coding will change software engineering: hard truths” lo explica así:

“El patrón de ‘dos pasos atrás’: intentás arreglar un bug pequeño. La IA sugiere un cambio que parece razonable. Ese arreglo rompe otra cosa… y repetís.” [3]

Como dijimos en nuestro artículo “Ser rápido no es suficiente: cómo programar con velocidad utilizando la IA”, los desarrolladores deberían empezar por tareas pequeñas y aisladas, e ir escalando a funcionalidades más grandes. También deberían revisar cada línea generada. Siguiendo estos pasos, se puede aprovechar la IA para acelerar tareas conocidas, explorar posibilidades y automatizar actividades rutinarias.

En definitiva, entender en qué la IA sobresale permite a los desarrolladores guiar su salida con intención, reduciendo errores acumulativos mediante diseño y estrategias de test más pensadas.

Táctica 5: Hacer commits pequeños y frecuentes

TL;DR: iniciar nuevos chats de IA para tareas específicas ayuda a mantener un contexto claro, mientras que revisar y hacer commits frecuentes asegura alineación con los estándares de ingeniería. Usá la IA para acelerar tu trabajo, no para reemplazar tu criterio: cuestioná cualquier código generado que no te cierre o sea inconsistente con tus estándares.

En el mundo del código asistido por IA, hacer commits pequeños y frecuentes es invaluable. Esta práctica facilita volver atrás si hay errores y ayuda a entender cómo cada cambio afecta el conjunto del proyecto. Además, los mensajes de commit describen claramente qué hace cada cambio, reforzando la comprensión y la responsabilidad.

Simon Willison promueve tratar la codificación asistida como un prototipado rápido, con bucles de feedback cerrados a través de pequeños experimentos. En sus palabras: “prompt small, commit small”. Esta filosofía fomenta construir de manera incremental mientras se mantiene el control del proceso. Al registrar ideas funcionales con frecuencia, reducís el riesgo de perder el rumbo y mantenés una trayectoria clara.

Adoptar este enfoque coincide con las mejores prácticas de muchos flujos de trabajo. Mantener trabajo atómico, observable y revisable garantiza claridad tanto para humanos como para la IA.

Los commits frecuentes permiten verificar los cambios generados por IA de forma aislada. Esto refleja el patrón de “conversación constante” de Addy Osmani, con ciclos cerrados entre generación, revisión y validación [3]. Cada commit actúa como un punto de control donde podés “confiar, pero verificar”, asegurando que la velocidad de la IA no comprometa la calidad ni la comprensión.

Conclusión

Este artículo enfatiza programar mejor con ayuda de IA, no solo más rápido, siendo la velocidad un efecto colateral positivo. Aunque existen muchas guías, esta reconoce el ritmo acelerado de cambio en la IA y aboga por la adaptabilidad por encima de los procesos rígidos.

Para lograr mejores resultados, se presentan cinco tácticas clave:

  1. Integrar LLMs directamente en tu base de código para aumentar la productividad: tratá a los LLMs como un compañero junior dentro de tu repo, no solo como asistentes de chat.
  2. Escribir especificaciones de proyecto desde el inicio para alinear creatividad humana e IA y reducir errores.
  3. Proveer documentación para ayudar a la IA a comprender librerías y herramientas nuevas mediante Retrieval-Augmented Generation (RAG).
  4. Iterar sobre planes, no sobre código, usando la IA para planificar, refinar y diseñar antes de programar.
  5. Hacer commits pequeños y frecuentes para mantener el foco, la claridad y los estándares de ingeniería sin perder la agilidad.

Adoptando estas estrategias, los desarrolladores pueden usar la IA no solo para mejorar la eficiencia del desarrollo, sino también para elevar la calidad y mantenibilidad de su software.

[1]: AI tools for software engineers, but without the hype – with Simon Willison (Co-Creator of Django) - https://www.youtube.com/watch?v=uRuLgar5XZw

[2]: Vibe-Coding Done Right: Engineering Manager's Guide to Building Production-Ready AI Apps - https://github.com/vadim-givola/vibe-coding-guide

[3]: How AI-assisted coding will change software engineering: hard truths - https://newsletter.pragmaticengineer.com/p/how-ai-will-change-software-engineering

[4]: Ser rápido no es suficiente: cómo programar con velocidad utilizando la IA - https://www.howdylatam.com/blog/ser-rapido-no-es-suficiente-como-programar-con-velocidad-utilizando-la-ia