Por Dasen Razmilic, Ingeniero en Notus
¿Qué es Cursor?
Cursor es un editor de código optimizado para trabajar con inteligencia artificial, ampliamente adoptado por programadores. Ofrece funcionalidades como autocompletado, generación de código dentro de un archivo, chat y un modo agente al que se pueden ingresar prompts para generar código. Además, permite seleccionar el modelo de lenguaje (LLM) de preferencia. Su característica más distintiva es el modo agente, que no solo introduce automáticamente cambios en las secciones correspondientes del código, sino que también puede crear archivos nuevos y ejecutar comandos de ser necesario, lo que agiliza considerablemente el flujo de trabajo.
Un amigo del mundo startup me había recomendado Cursor durante un tiempo, asegurando que había multiplicado por diez su productividad y que el código generado funcionaba bien. Sonaba demasiado bueno para ser verdad. Afortunadamente, existía una prueba gratuita de 30 días, así que decidí comprobarlo por mi cuenta. Además, tenía una idea que quería desarrollar, lo que me permitió hacer una prueba aplicada y realista.
El Proyecto con Cursor
En un proyecto realizado en Notus el año pasado, desarrollamos y calibramos varios modelos de optimización que funcionaban de manera secuencial. Estos modelos tomaban la proyección de ventas de una tienda junto con las labores básicas del personal y generaban una malla de turnos junto con la calendarización de tareas.
El proyecto en sí fue muy interesante y los modelos dieron buenos resultados. De hecho, actualmente se encuentra en etapa de piloto. Sin embargo, en esta fase no se consideró ninguna interfaz o herramienta de software para interactuar con los modelos; todo se realizaba mediante scripts de Python. Como resultado, su uso requería un conocimiento técnico que podía limitar su adopción durante el piloto.
Implementando Cursor
Antes de probar Cursor, ya habíamos discutido la posibilidad de desarrollar una herramienta sencilla para mejorar la experiencia del usuario y facilitar el uso de los modelos. Sin embargo, esto implicaba dedicar tiempo y esfuerzo al desarrollo. Con Cursor, aparecía la posibilidad de crear esta herramienta en una fracción del tiempo y esfuerzo requerido.
«En menos de una hora ya había construido la base de la primera iteración; solo faltaba integrar los modelos.»
Mi primer experimento con esta tecnología fue desarrollar la herramienta que habíamos pensado: una interfaz que permitiera cargar los distintos archivos de entrada (aproximadamente siete archivos de Excel) y ejecutar los modelos tomando los datos de estos archivos. En pocos minutos ya tenía una interfaz funcional para cargar y descargar los distintos archivos. En otro rato, construí una vista para ejecutar los modelos, permitiendo seleccionar las tiendas y validando que cada una tuviera los datos necesarios para evitar errores en la ejecución. Todo esto lo logré simplemente mediante prompts: Cursor se encargó de editar múltiples archivos, crear nuevos cuando era necesario y recomendar comandos para la terminal. En menos de una hora ya había construido la base de la primera iteración; solo faltaba integrar los modelos.
Desafíos
Durante aproximadamente cuatro días, repartidos a lo largo de un par de semanas, desarrollé con Cursor un prototipo funcional para el piloto. La herramienta permitía cargar los archivos de entrada y almacenar los datos en la base de datos de los modelos. Sin embargo, enfrenté algunos desafíos, especialmente con nombres de encabezados en los archivos de entrada, lo que requirió modificaciones manuales en el código.
En pocos minutos, armé vistas para visualizar los datos de las tiendas, consolidando información de distintos archivos y mostrando mapas de calor con las ventas por día y hora. También creé una interfaz que permitía editar los parámetros antes distribuidos en varios archivos y tablas. Sin embargo, la integración con los modelos resultó ser más desafiante de lo esperado.
Cursor funcionó muy bien para desarrollar nuevas funcionalidades desde cero, especialmente aquellas relacionadas con frontend, CRUD y generación de vistas. Sin embargo, editar código preexistente resultó más complicado. Ni siquiera para el debugging fue de mucha ayuda. Al final, tuve que realizar la integración manualmente, lo que me tomó tanto tiempo como desarrollar toda la interfaz.

Conclusiones
De esta experiencia, destaco el enorme potencial de Cursor. Al igual que Copilot facilitó tareas específicas del desarrollo, Cursor automatiza muchas partes del proceso y aumenta significativamente la productividad. Sin embargo, el desarrollador sigue siendo una pieza clave. Su criterio y experiencia son más relevantes que nunca, ya que es quien dirige el agente y evalúa la calidad del código autogenerado.
Mi prueba estuvo centrada en un caso de uso específico, por lo que me es difícil asegurar su rendimiento en otros escenarios. Sin embargo, para desarrollo de interfaces, funcionalidades de frontend y CRUD, Cursor funciona de manera excelente. Por otro lado, trabajar con código legado y depurar errores automáticamente sigue siendo un reto. Además, en algunas ocasiones generó código innecesario o que no aplicaba al caso.
A pesar de estas limitaciones, el potencial de Cursor para la creación rápida de prototipos es indiscutible. Actualmente, muchos expertos del mundo tech coinciden en que el código autogenerado aún no está listo para producción sin supervisión, debido a posibles fallas y problemas de escalabilidad. Sin embargo, cuando se trata de prototipos, estas preocupaciones son menos relevantes. Finalmente, hasta qué punto se puede o conviene integrar código autogenerado dentro del flujo de desarrollo se tiene que probar directamente según el caso de uso de cada aplicación a desarrollar. Dado el potencial de productividad, definitivamente vale la pena intentarlo.