Amplitude lanza 3 veces más código en producción con Cursor
Amplitude usa Cursor para crear un pipeline de desarrollo autónomo que lleva el software de la idea a producción con una intervención mínima de los desarrolladores.
El equipo de ingeniería de Amplitude quería crear un pipeline de desarrollo totalmente autónomo que pudiera llevar el software de la idea a producción con una intervención mínima de los desarrolladores. Con Cursor, Amplitude ya ha configurado sistemas que recogen contexto de todo el ciclo de vida del software -- desde los comentarios de los clientes hasta las herramientas de observabilidad y las revisiones de código -- y lo delegan a agentes para su ejecución.
Ahora, cuando los clientes reportan errores o solicitan nuevas funciones en Slack, los agentes en la nube se activan automáticamente para investigar, abrir un ticket y solucionarlo. Las automatizaciones de Cursor se ejecutan continuamente en segundo plano, migrando código heredado y clasificando el nivel de riesgo de cada PR nuevo o actualizado. Bugbot actúa como la primera línea de revisión, integrando automáticamente los cambios de bajo riesgo y dirigiendo los PR de alto riesgo a los revisores adecuados.
La mayoría de las herramientas de IA para programar te dan más código. Cursor te da más software útil en producción. La capacidad de ejecutar agentes que pueden paralelizar el trabajo de forma eficaz, probar sus propios cambios y llevar una funcionalidad de la idea a producción marca la diferencia.
Los agentes locales limitan la paralelización y la autonomía
Al principio de su adopción de agentes de programación, Amplitude se topó con lo que Adam Lohner, ingeniero principal de software, describió como un falso techo en la productividad de ingeniería.
Los verdaderos impulsores de la velocidad de desarrollo llegan cuando los agentes producen software de producción realmente útil, no solo mucho código. Para lograr eso, necesitábamos mucho más paralelismo y autonomía de los agentes, algo que no ofrecen los agentes confinados a las estaciones de trabajo locales de los desarrolladores.
Los agentes locales compiten por el mismo conjunto limitado de recursos y enseguida generan conflictos. Incluso ejecutar dos o tres agentes a la vez puede provocar una caída del rendimiento. La base de código de Amplitude es lo bastante grande como para que las máquinas locales de los desarrolladores llegaran al límite de memoria, incluso en hardware de gama alta con grandes cantidades de RAM.
Los agentes locales tampoco tienen acceso a un entorno de desarrollo completo, como sí lo tiene un ingeniero. Sin él, los agentes no pueden probar ni verificar su propio trabajo. Los desarrolladores todavía tienen que configurar entornos, ejecutar pruebas integrales y verificar manualmente los cambios antes de poder desplegar nada.
La nube rompe el techo local de los agentes
Para conseguir más paralelismo y autonomía, Amplitude recurrió a los agentes en la nube de Cursor. Hubo varias capacidades que destacaron:
- Ejecución paralela a escala: Los agentes en la nube se ejecutan en máquinas virtuales aisladas y escalables, lo que elimina las limitaciones de recursos que frenan el paralelismo local.
- Entorno de desarrollo completo: Los agentes en la nube pueden probar, verificar e iterar sobre su trabajo igual que lo haría un ingeniero, con acceso a un entorno de desarrollo completo.
- Ejecución de larga duración: Amplitude está delegando tareas más profundas y ambiciosas para que los agentes en la nube las resuelvan de principio a fin, en lugar de limitarse a tareas cortas y síncronas.
- Agentes siempre activos: Las Automatizaciones de Cursor permiten a Amplitude configurar agentes en la nube para que se ejecuten en respuesta a disparadores o programaciones recurrentes, en lugar de depender de prompts manuales.
Estamos ejecutando muchos agentes en la nube a la vez en Cursor, cada uno con acceso completo a nuestro stack de herramientas. La capacidad de poner en marcha agentes que no se ven limitados por los recursos locales ni requieren una microgestión constante ha supuesto un cambio radical.
Los ingenieros de Amplitude ahora alternan entre agentes en la nube y agentes locales según el tipo de trabajo. Las nuevas ideas suelen empezar en la nube, donde el harness de Cursor permite que los agentes trabajen de forma independiente durante largos periodos de tiempo. Muchos ingenieros lanzan Cursor directamente desde hilos de Slack en los que se están debatiendo ideas de funcionalidades.
Los desarrolladores llevan los agentes al entorno local cuando están listos para centrarse en una iteración más controlada o profundizar en los detalles. Cursor sirve como espacio de trabajo unificado tanto en la nube como en local.
Cursor ofrece la mejor interfaz para orquestar todos tus agentes paralelos. Puedes mantenerte en un nivel general o profundizar en detalles como diferencias y archivos cuando lo necesites.
Desde que adoptó los agentes en la nube, Amplitude ha visto triplicarse los commits semanales en producción. Cursor se ha convertido en uno de los tres principales contribuidores al codebase de Amplitude por volumen de commits, con más de 1.000 ejecuciones de agentes iniciadas cada semana sin ningún prompt ni intervención de desarrolladores.
La nube es donde se crea el software; el entorno local es donde probamos e iteramos. La compatibilidad de Cursor con transiciones fluidas entre ambos ha sido la clave para impulsar la velocidad de producto de Amplitude.
De Slack al ticket y a la PR
Amplitude tiene canales dedicados de Slack donde los equipos de campo transmiten reportes de errores y solicitudes de nuevas funcionalidades de los clientes. Antes de Cursor, tenían a un miembro del equipo dedicado a monitorear estos canales, priorizar incidencias, dar seguimiento a los tickets y asignar tareas del backlog.
Luego, Pauly creó una Automatización de Cursor para delegar todo este flujo de trabajo a agentes. Cuando llega un mensaje nuevo a Slack, un agente en la nube comprueba en Linear si ya existe un ticket para la incidencia. Si existe, el agente agrega el nuevo contexto del cliente. Si no, el agente explora la base de código, abre un ticket nuevo y abre una PR con la solución ya implementada.
Las automatizaciones de Cursor nos están ayudando a eliminar la brecha entre el cliente y nuestros ingenieros. Estamos respondiendo a las necesidades de los clientes más rápido y con mejores soluciones.
Puedes empezar a crear una automatización para convertir reportes de Slack en PRs con esta plantilla.
Refactorización automatizada de código heredado
La base de código del frontend de Amplitude había acumulado años de patrones distintos y en conflicto: componentes CSS heredados, diseños de React obsoletos y convenciones de estilo incoherentes.
Tenemos tantos patrones heredados y en conflicto que a los agentes les cuesta interpretar correctamente cuál es la mejor forma de avanzar. Es el clásico problema de ‘basura entra, basura sale’.
Para solucionar esto, Lohner creó un conjunto de Automatizaciones de Cursor basadas en cron que se ejecutan cada hora para ir avanzando en la migración del código heredado. Una automatización analiza archivos CSS en busca de estilos que pueden sustituirse directamente por clases de Tailwind, realiza los cambios, elimina los archivos antiguos, abre una PR y envía una notificación a Slack. Otra se encarga de las más de 20.000 instancias de componentes de diseño heredados de React en Amplitude, sustituyéndolos por equivalentes nativos de Tailwind.
Ejecutar estas migraciones en la nube como automatizaciones significa que se realizan continuamente en segundo plano sin desplazar otro trabajo ni consumir tiempo de los desarrolladores.
Revisión de código liderada por agentes
El otro cuello de botella que frenaba la velocidad de ingeniería de Amplitude era la revisión manual de código. Amplitude quería un proceso de revisión centrado en agentes que mejorara la fiabilidad del producto y redujera las interrupciones para los desarrolladores.
Amplitude implementó Bugbot como su capa dedicada de revisión con agentes. La adopción creció de forma orgánica a medida que los desarrolladores veían que Bugbot detectaba incidencias que los revisores humanos pasaban por alto, dada la escala y complejidad de la base de código de Amplitude.
Bugbot detecta regularmente errores realmente difíciles y propone soluciones sólidas para las incidencias.
Lohner también creó una Automatización de Cursor que evalúa el nivel de riesgo de cada PR. Los cambios de bajo riesgo pueden avanzar a la fusión, con Bugbot revisando y corrigiendo automáticamente incidencias sin intervención de los desarrolladores. Las PR de alto riesgo con cambios lógicos más complejos se enrutan automáticamente a los ingenieros adecuados. Aproximadamente el 60-70% de las PR de bajo riesgo se fusionan sin trabajo adicional por parte de los desarrolladores. Puedes empezar a crear una automatización para convertir reportes de Slack en PR con esta plantilla.
El historial de Bugbot detectando con frecuencia errores reales que amenazan la producción lo ha convertido en una parte clave de nuestro proceso de revisión de código.
A continuación, Amplitude está centrada en llevar las automatizaciones a la última parte del ciclo de desarrollo: pipelines de CI/CD, validación de compilaciones y despliegue. El objetivo es que los agentes lleven el software desde una PR revisada hasta producción sin intervención de los desarrolladores.
Si te interesa crear pipelines de desarrollo autónomo con Cursor, comunícate con nuestro equipo para comenzar una prueba de Cursor.