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.

¿Qué es Cascade de Windsurf?

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.

Características principales

1 Integración profunda con el IDE

Cascade se integra nativamente con IDEs como IntelliJ IDEA y VS Code, proporcionando:

2 Múltiples modelos de IA

Permite cambiar entre diferentes modelos según la tarea:

3 Sistema de memorias persistentes con un memory bank

4 Herramientas de productividad

5 Capacidades Agentic

Modos de trabajo con Cascade

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:

Modo investigación

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."

Modo implementación

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."

Modo debugging

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."

Modo arquitectura

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."

Modo aprendizaje

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?"

Modo validación

Para después de implementar, le diríamos:

"Ejecuta los tests E2E para verificar que el flujo de checkout funciona correctamente."

¿Qué modelos de IA hemos utilizado?

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:

Observaciones sobre los modelos

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:

Uso de planes para la organización del proyecto

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:

Estructura de la carpeta plans/

He organizado diferentes planes en mi proyecto categorizados por tipo de plan:

  1. Plan general
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
  1. Planes de implementación de módulos

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]
  1. Planes de refactorización

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
  1. Planes de testing

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
  1. Planes de infraestructura

Configuración de servicios externos y despliegue:

  1. Planes de frontend
  1. Planes de documentación

Metodología de trabajo con planes

Vamos a ver paso a paso cómo sería esta metodología de trabajo con los planes.

  1. Creación del plan con Cascade cuando enfrento una tarea compleja:
"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."
  1. Cascade investiga, propone estructura y crea el documento.
  2. Iteración guiada por el plan. El plan se convierte en la guía de trabajo:
"Según el plan en plans/e2e_testing_setup.md, 
implementemos la Fase 1: Aislamiento de Dependencias."
  1. Cascade consulta el plan y ejecuta esa fase específica.
  2. Actualización del plan durante el desarrollo. A medida que avanzo, actualizo el estado:
"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."
  1. Planes como memoria del proyecto. Los planes documentan decisiones técnicas importantes.

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.

¿Cuáles son las ventajas de este enfoque?

Podemos extraer 6 ventajas principales:

Integración con el sistema de memorias de Cascade

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:

Conclusión

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.

Cuéntanos qué te parece.

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.

Suscríbete