¿Buscas nuestro logo?
Aquí te dejamos una copia, pero si necesitas más opciones o quieres conocer más, visita nuestra área de marca.
¿Buscas nuestro logo?
Aquí te dejamos una copia, pero si necesitas más opciones o quieres conocer más, visita nuestra área de marca.
dev
Raúl Martínez Hace 25 minutos Cargando comentarios…
Recientemente, he estado interactuando con Cascade Windsurf integrado en un Intellij para desarrollar un piloto con IA probando diferentes técnicas. Cascade es un asistente de IA avanzado e integrado que ofrece capacidades como la autonomía para ejecutar acciones e implementar soluciones completas, que entiende el contexto del proyecto profundamente, donde tendremos herramientas especializadas, se puede desarrollar de modo multitask y donde se almacenan memorias con pasos importantes que se han dado durante el desarrollo de una tarea.
En este post voy a describir cómo ha sido mi experiencia con esta herramienta durante los últimos 3 meses, y en el siguiente post hablaré sobre el uso de la interfaz, definiendo sus reglas y los modos de trabajo (chat y code).
Hablaremos sobre modelos, capacidades, modos de empleo de los modelos (que denominaremos “modelo de trabajo”), estrategia de planes... Una guía completa donde veremos cómo hemos utilizado esta herramienta tan útil, siempre con el objetivo de mejorar y adoptar nuevas formas y paradigmas.
Cascade es un asistente de IA agentic desarrollado por Windsurf, diseñado específicamente para pair programming y desarrollo de software. A diferencia de un simple autocompletado de código, Cascade es un agente autónomo capaz de:
Es, en esencia, un compañero de desarrollo que entiende tanto el código como el contexto del proyecto.
Cascade se integra nativamente con IDEs como IntelliJ IDEA y VS Code, proporcionando:
Permite cambiar entre diferentes modelos según la tarea:
Después de 3 meses trabajando con esta herramienta, he identificado varios modos de interacción con Cascade según la naturaleza de la tarea:
Este es el modo que utilizo cuando no conozco la mejor solución:
"Investiga cuál es el patrón estándar para manejar refresh tokens en Spring Boot. Explícame las opciones y recomienda una antes de implementar."
En este caso, lo utilizo para tareas claras y bien definidas:
"Crea un endpoint POST /api/orders que reciba un OrderDTO,valide los datos y guarde el pedido en la BD usando OrderService."
Este sería el modo de interacción para resolver errores:
"Tengo un error 401 en /api/orders. Stack trace adjunto. Revisa JwtAuthenticationFilter y SecurityConfig."
Para decisiones de diseño:
"Quiero unificar las entidades User y AdminUser. Analiza el impacto, propón una estrategia de migración paso a paso."
Este modo se puede utilizar para entender código existente:
"Explícame cómo funciona el sistema de refresh tokens que implementamos. ¿Cómo evita la condición de carrera?"
Para después de implementar, le diríamos:
"Ejecuta los tests E2E para verificar que el flujo de checkout funciona correctamente."
Una de las características más potentes de Cascade es la posibilidad de elegir entre diferentes modelos de IA según la naturaleza de la tarea. Durante el desarrollo del piloto, he trabajado principalmente con los siguientes modelos:
Gemini Pro 2.5
Claude Sonnet 4
Claude Sonnet 3.7 (Thinking)
GPT-5
Claude Sonnet 4.5 (Thinking) y 4.5 ((Nuevo, Octubre ‘25)
En el momento de escribir este artículo lo he probado para una migración de Mappers a Map Struct donde me ha estructurado un plan completísimo, con estimaciones, posibles problemas y soluciones a dichos problemas, ejemplos de código, inyecciones de dependencia, porcentajes de pruebas y número de líneas a refactorizar. Su capacidad para refactorizar, resolver errores y analizar el environment me ha impresionado, es tremendamente potente y la diferencia respecto a modelos anteriores es notable. Este modelo nos va a aportar:
Gemini Pro 2.5 como modelo principal:
Familia Claude Sonnet (3.7 y 4):
GPT-5 para casos especiales:
Reservado para problemas que requieren capacidades de última generación (por ser el último modelo que salió en el momento del piloto). No me ha sido de gran utilidad. He hecho 3 o 4 prompts y no me ha dado las respuestas esperadas.
Consistencia entre modelos:
Uno de los patrones más efectivos que he desarrollado trabajando con Cascade es el uso sistemático de planes escritos para organizar y documentar el trabajo complejo. Estos planes funcionan como:
He organizado diferentes planes en mi proyecto categorizados por tipo de plan:
plans/plan-general.md
En este plan recogemos:
Extracto del plan general:
### Fase 1: Configuración del Proyecto
1. Crear estructura de carpetas del proyecto
2. Configurar entorno de desarrollo
3. Configurar dependencias y herramientas de construcción
4. Configurar conexiones a bases de datos
Planes detallados para cada componente del sistema:
## Objetivo
[Descripción clara del módulo]
Arquitectura (3 Capas)
Capa de Presentación (Controller)
Capa de Servicio (Service)
Capa de Persistencia (Repository)
Implementación Detallada
[Paso a paso técnico]
Pruebas
[Estrategia de testing]
Documentan cambios arquitectónicos importantes:
Ejemplo de plan de refactorización:
# Plan de Refactorización: Unificación de Usuarios
Fase 1: Análisis y Preparación
[x] Identificación del Problema
[x] Decisión Arquitectónica
Fase 2: Refactorización del Backend
[ ] Modificar entidad User.java
[ ] Eliminar AdminUser.java
[ ] Unificar UserDetailsService
[ ] Actualizar SecurityConfig
Fase 3: Verificación y Pruebas
[ ] Actualizar pruebas unitarias
[ ] Ejecutar suite E2E
Fase 4: Limpieza Final
[ ] Eliminar ficheros obsoletos
[ ] Actualizar memoria del proyecto
Estrategias completas para diferentes tipos de pruebas:
Plan E2E (extracto):
### Fase 1: Aislamiento de Dependencias
1. Perfil Maven (e2e-test) en Backend
- Excluir spring-kafka y Testcontainers
- Saltar tests unitarios
### Fase 2: Lanzador de Backend Controlado
- Crear InfiniaSportsE2ETestApplication.java
- Usar SpringApplicationBuilder
- Forzar perfil e2e-test
### Fase 3: Orquestación del Ciclo de Vida con Maven
- exec-maven-plugin en playwright-tests
- pre-integration-test: Iniciar backend y frontend
- integration-test: Ejecutar tests Playwright
- post-integration-test: Detener servidores
Configuración de servicios externos y despliegue:
Vamos a ver paso a paso cómo sería esta metodología de trabajo con los planes.
"Vamos a implementar las pruebas E2E con Playwright.
Antes de empezar, crea un plan detallado en plans/e2e_testing_setup.md
que incluya fases, dependencias, configuración y estrategia de orquestación."
"Según el plan en plans/e2e_testing_setup.md,
implementemos la Fase 1: Aislamiento de Dependencias."
"Actualiza plan_user_unification.md:
marca como completada la Fase 2 y añade notas sobre
el problema de condición de carrera que encontramos."
Ejemplo real (plan-kafka-carga-productos.md):
## 4.1. Persistencia robusta e idempotencia
El DataInitializer asigna un UUID único a cada producto antes de enviarlo a Kafka.
El consumidor (ProductConsumer) convierte el id de String a UUID y antes de guardar comprueba si ya existe (existsById).
Control idempotente: productos no se duplican aunque el flujo se repita.
Podemos extraer 6 ventajas principales:
Los planes y las memorias se complementan, ya que los planes contienen documentación estructurada y fases de implementación, y las memorias, reglas y decisiones que Cascade debe recordar siempre.
Ejemplo:
Cascade de Windsurf no nos sustituye como desarrolladores/as, nos da un entorno de trabajo completo, sincronizado, con capacidad para ayudarte en momentos claves del diseño y del desarrollo.
También nos aumenta nuestra productividad, que he estimado entre un 80%-100%. Por tanto, creo que aunque es una herramienta que no es perfecta y nos obliga a pilotar la nave, hoy en día es imprescindible para aumentar nuestra productividad. ¿La has probado? Te leo en comentarios.
Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.
Cuéntanos qué te parece.