Guía para un desarrollo robusto con IA: Cursor y Github Copilot

Los asistentes de código con IA se han extendido en los últimos tiempos por la potencia que ofrecen para acelerar el desarrollo de software. Sin embargo, aprender a usarlos no es tan sencillo como escribir un simple prompt. La curva de aprendizaje para conseguir sacarles todo el partido que nos ofrecen no es tan pequeña como podríamos pensar. Si la subestimamos corremos el riesgo de a) producir código de mala calidad con errores y fallos de seguridad o b) hacer un uso limitado de las capacidades y obtener menos beneficios de los que están disponibles.

Este post pretende ser una guía dirigida a programadores que quieren iniciarse con los asistentes de código de IA, o a los que ya se han iniciado, pero quieren sacarle mayor provecho. Aunque en el título hablamos de Cursor y VSCode copilot, en realidad, es extrapolable a la mayoría de asistentes en el mercado. Comenzaremos por algunos principios que consideramos clave para programar con los asistentes, para luego hablar de prácticas y casos de uso.

Principios para desarrollar con asistentes de IA

Por ser los asistentes una herramienta tan potente, capaz de generar grandes cantidades de código por nosotros, creemos fundamental tener claros unos principios que guíen nuestro uso en todo momento. El objetivo es ser capaces de producir código con ellos a la vez que aumentamos el estándar de calidad. No creemos en aproximaciones donde se prima la velocidad y se dejan de lado aspectos importantes como la calidad y la seguridad del código generado.

  • Principio 1 – Revisión: Los asistentes de código actuales cometen errores con frecuencia, por lo que debemos SIEMPRE revisar el código generado con detenimiento.
  • Principio 2 – Ownership: El código generado por la IA es nuestro código a todos los efectos y somos los únicos responsables.  
  • Principio 3 – Experimentación: Un mismo prompt puede funcionar en algunos casos y en otros no, una primera respuesta inválida no quiere decir que la IA no pueda ayudarnos, es recomendable reintentar cambiando el prompt: añadiendo contexto, dando instrucciones más detalladas, etc… Una actitud de experimentación nos ayudará a aprender a sacarles más partido en nuestro contexto particular.
  • Principio 4 – Contexto: La calidad e idoneidad de la respuesta dependerá en gran medida del contexto que tenga el asistente. Un contexto adecuado debe contener el código fuente necesario para hacer el cambio junto con instrucciones y reglas que guíen cómo se debe hacer, además en ciertas ocasiones proveer de documentación sobre el proyecto puede ser necesario.

Prácticas de uso recomendadas

  • Revisa las buenas prácticas de desarrollo: Las revisiones de código, los tests automáticos, el uso de linters, etc.. Son más necesarios que nunca, puesto que incorporar IA a tu equipo es equivalente a escalar el equipo, cuanto más se produzca más riesgo de introducir errores o deuda técnica.
  • Planifica antes de empezar: Por defecto los asistentes están configurados para saltar directamente a la solución y entregarte el código, para luego explicártelo, sin embargo, cuando queremos hacer cambios que requieran cierta complejidad, lo recomendable es pedirle primero que diseñe la aproximación y el plan para hacer los cambios. De este modo podemos revisar la aproximación, sugerir cambios o descartarla.
  • Divide y vencerás: Del mismo modo que para abordar una tarea grande o una historia de usuario, dividirla en subtareas es beneficioso, cuando utilizamos un asistente, pedirle que haga pasos pequeños nos permite ir con paso más firme. Lo ideal es pedirle una tarea pequeña → revisar el código y ajustarlo → testear el código → repetir este loop.
  • Ante errores re-intenta con otro prompt o modelo: Como hemos dicho antes la IA comete errores, sin embargo, que frente a un prompt nos dé una respuesta incorrecta no quiere decir que no se pueda utilizar en ese caso. Para estos casos sirve entender de dónde viene el error, y reintentar. Ejemplos:
    • Falta de contexto -> Referenciar ficheros de código fuente o el código completo. Generar ficheros de documentación por módulos para dárselos a la IA, ej.: documento con el modelo de datos.
    • Falta de especificación -> Añadir instrucciones que detallen cómo queremos que se hagan los cambios. Definición de ficheros de reglas.
    • Falta de capacidad por complejidad -> Descomponer en tareas más pequeñas y sencillas. Utilizar un modelo más avanzado con razonamiento. Ej: Gemini 2.5 pro, Claude 3.7 Sonnet Thinking, o3, …
    • Falta de capacidad por no haber datos -> Por ejemplo, si le pedimos algo muy de nicho que el modelo no ha “visto” antes. En ese caso, lo mejor es no usar la IA y volver al método tradicional.
  • Define reglas de proyecto: Cursor y VSCode te permiten definir reglas e incluirlas en tus repositorios para ahorrarte tener que escribirlas continuamente. Estas reglas te permiten conseguir consistencia y alineamiento con tu contexto, en las respuestas de la IA. Puede definir el estilo de cómo quieres las respuestas y el código que genera el asistente. Por ejemplo, en una regla puedes definir que se use siempre la librería Tailwind para el estilo del Frontend o que se use camel case para el naming.
  • Elige cuándo usarla y cuándo no: Con la práctica uno aprende para qué tareas es útil usar la IA y para cuáles es contraproducente. Como regla general, si la tarea es compleja o es muy dependiente de nuestro contexto, me parece preferible empezar sin IA, y utilizarla de forma acotada para tareas más específicas y sencillas. Para tareas más simples y repetitivas la IA sí nos va a ahorrar bastante tiempo.
  • Crea un foro para compartir experiencias internamente: Nadie mejor que otros compañeros que comparten proyectos y contexto para compartir su experiencia y aprender qué funciona mejor. Un canal de slack, una wiki o un documento compartido donde plasmar experiencias puede acelerar el aprendizaje colectivo y la identificación de las mejores prácticas para vuestro contexto específico.

Casos de uso

Los asistentes de IA generativa integrados en el IDE soportan muchos más casos de uso que la escritura de código. En la imagen podemos ver un reporte de Stackoverflow sobre el uso de la IA en 2024, donde se aprecia cómo se está utilizando la tecnología por los desarrolladores.

  • Búsqueda de información. Nos permite hacerle preguntas directamente y nos evita tener que salirnos del IDE para abrir un navegador y buscar en Google.
  • Revisión de código. Pedirle que revise el código en busca de errores, problemas y riesgos de seguridad; se le puede dar una guía de referencia para que sepa cómo revisar.
  • Crear tests. Si tenemos código que no tiene tests, se le puede pedir que nos cree los tests unitarios, es recomendable darle una referencia como otro fichero de tests, para que cree tests consistentes. También se puede utilizar para hacer TDD, donde se le pide que empiece por los tests y los utilizamos para ir diseñando la funcionalidad.
  • Depurar. Si le pegamos la traza del error que nos da y le damos el contexto del código puede depurar y proponer soluciones que muchas veces son correctas. También son muy útiles si le pedimos que añada trazas y logs al código para ayudarnos a depurar.
  • Refactoring. Dado un código existente, se le puede pedir que nos ayude a refactorizar siguiendo una guía de buenas prácticas y estilo.
  • Entender código legacy. Pedir que lo explique, que nos genere diagramas, hacerle preguntas, etc…
  • Documentar. Va muy bien para crear una estructura y esqueleto, nos ahorra el partir de una hoja en blanco. Necesitaremos revisar y cambiar cosas seguramente. Le podemos pasar plantillas para que sepa cómo estructurar la información.
  • Brainstorming y planificación. Cuando debemos abordar un proyecto o una tarea nueva y queremos explorar opciones, se le puede pedir al asistente que nos ayude y sugiera varias ideas de cómo abordarlo. Una cosa que se les da bien a los LLMs es generar muchas opciones, dado que han sido entrenados con muchísimos datos.
  • Especificaciones. Si la tarea no está suficientemente especificada, se puede utilizar el asistente para que nos sugiera una especificación, que nos sirva como base para pulir y obtener la especificación deseada.
  • Evaluar decisiones técnicas. Cuando tenemos que elegir entre varias tecnologías, o varias soluciones para un problema, la IA nos puede ayudar enumerando los puntos a favor y en contra de cada una, y hacer zoom en los puntos que queramos para tomar una decisión más informada.
  • Automatizar tareas en el entorno local. Funciona muy bien para crear scripts que nos automaticen trabajo en local.
  • Migración a otras tecnologías y lenguajes. Por ejemplo, migrar un proyecto en Java 8 a Java 24, o migrar el ORM que usamos.
  • Automatizaciones de despliegue e integración (pipelines CI/CD). Sobre todo cuando empezamos un nuevo proyecto, nos permite crear pipelines para la plataforma que tengamos en muy poco tiempo.
  • Adaptar el código para hacerlo accesible. Suele ser una tarea algo tediosa pero muy necesaria, que no suele tener gran complejidad, por lo que es un caso de uso ideal para usar IA.
  • Análisis de logs y grandes cantidades de datos. Sobretodo cuando trabajamos investigando problemas en producción, la IA nos puede ayudar mucho a analizar datos y buscar patrones. Sin embargo, más que pasarle un log a la IA para que extraiga errores, lo ideal es decirle que nos construya un script para hacer eso. Esta aproximación nos dará muchos mejores resultados y evitará que tengamos que compartir datos de producción con la IA.

TL:DR

Los asistentes de IA generativa en el desarrollo han llegado para quedarse por lo que es fundamental aprender a sacarles el máximo partido para acelerar el desarrollo e incrementar la calidad del software. Si tienes que quedarte con unas pocas ideas de este documento, son:

  1. (Calidad) Pon el foco en las buenas prácticas de desarrollo para asegurar la calidad y seguridad.
  2. (Revisión) Revisa TODO el código generado.
  3. (Ownership) El código generado por la IA sigue siendo TU responsabilidad.
  4. (Divide y vencerás) Da preferencia a pequeñas iteraciones: prompt -> revisión y ajuste -> pruebas.
  5. (Criterio) Decide cuándo usarla y cuándo no.
  6. (Aprendizaje compartido) Crea foros para compartir los aprendizajes dentro de la empresa.


Como Fractional CTO, he ayudado a varias empresas a adoptar la IA generativa como parte de sus procesos de desarrollo, por lo que sé cómo definir y ejecutar una estrategia que maximice el valor de estas herramientas limitando los riesgos. Si estáis valorando la adopción de estos asistentes y queréis hacerlo de una forma robusta y con garantías, puedo ayudarte.

Deja un comentario