Recently, I’ve been working with Cascade Windsurf integrated into IntelliJ to develop an AI-driven pilot project while testing different techniques. Cascade is an advanced AI assistant that offers capabilities such as autonomous execution of actions and implementation of complete solutions, a deep understanding of project context, specialized tools, true multitasking, and persistent memory that stores important steps taken during task execution.

In this post, I’ll describe my experience with this tool over the last 3 months. In the next one, I’ll talk about using the interface, its rules, and the working modes (chat and code).

We’ll cover models, capabilities, model usage modes (“work models”), planning strategies… A complete guide showing how we’ve used this powerful tool—always with the goal of improving and embracing new ways and paradigms.

What Is Windsurf Cascade?

Cascade is an agentic AI assistant developed by Windsurf, specifically designed for pair programming and software development. Unlike a simple code autocomplete, Cascade is an autonomous agent capable of:

In essence, it’s a development partner that understands both the code and your project context.

Key Features

1 Deep IDE Integration

Cascade integrates natively with IDEs like IntelliJ IDEA and VS Code, providing:

2 Multiple AI Models

You can switch between different models depending on the task:

3 Persistent Memory System with a Memory Bank

4 Productivity Tools

5 Agentic Capabilities

Working Modes with Cascade

After 3 months working with this tool, I’ve identified several modes of interaction with Cascade depending on the nature of the task:

Research Mode

This is the mode I use when I don’t know the best solution:

"Research the standard pattern for handling refresh tokens in Spring Boot. Explain the options to me and recommend one before implementing."

Implementation Mode

In this case, I use it for clear and well‑defined tasks:

"Create a POST /api/orders endpoint that receives an OrderDTO, validates the data, and saves the order in the database using OrderService."

Debugging Mode

This would be the interaction mode to resolve errors:

"I’m getting a 401 error on /api/orders. Stack trace attached. Check JwtAuthenticationFilter and SecurityConfig."

Architecture Mode

For design decisions:

"I want to unify the User and AdminUser entities. Analyze the impact and propose a step-by-step migration strategy."

Learning Mode

This mode can be used to understand existing code:

"Explain to me how the refresh token system we implemented works. How does it prevent race conditions?"

Validation Mode

For post-implementation, we would say:

"Run the E2E tests to verify that the checkout flow works correctly."

Which AI Models Have We Used?

One of Cascade's most powerful features is the ability to choose between different AI models depending on the nature of the task. During the pilot development, I primarily worked with the following models:

Gemini Pro 2.5

Claude Sonnet 4

Claude Sonnet 3.7 (Thinking)

GPT-5

Claude Sonnet 4.5 (Thinking) and 4.5 (New, October ‘25)

At the time of writing, I’ve tested it for a Mapper to MapStruct migration, where it structured a very comprehensive plan with estimates, potential problems and solutions, code examples, dependency injection strategies, testing percentages, and refactorable lines. Its ability to refactor, troubleshoot, and analyze the environment really impressed me—incredibly powerful, and noticeably more capable than previous models. This model brings:

Model Observations

Gemini Pro 2.5 as the main model:

Claude Sonnet family (3.7 and 4):

GPT-5 for special cases:

Reserved for tasks requiring next-gen capabilities (as it was the latest model available during the pilot). I didn’t find it particularly useful. I tried 3 or 4 prompts, and it didn’t return the expected answers.

Consistency across models:

Using Plans to Organize the Project

One of the most effective patterns I’ve developed while working with Cascade is the systematic use of written plans to organize and document complex work. These plans function as:

Structure of the plans/ Folder

I’ve organized different plans in my project categorized by plan type:

  1. General Plan
plans/plan-general.md

In this plan we cover:

Excerpt from the general plan:

### Phase 1: Project Setup
1. Create the project folder structure
2. Set up the development environment
3. Configure dependencies and build tools
4. Set up database connections
  1. Module Implementation Plans

Detailed plans for each system component:

## Objective
[Clear description of the module]

Architecture (3 Layers)
   Presentation Layer (Controller)
   Service Layer (Service)
   Persistence Layer (Repository)

Detailed Implementation
   [Technical step-by-step]
   Testing
   [Testing strategy]
  1. Refactoring Plans

These plans document major architectural changes:

Example of a refactoring plan:

# Refactoring Plan: User Unification

Phase 1: Analysis and Preparation
  [x] Problem Identification
  [x] Architectural Decision

Phase 2: Backend Refactor
  [ ] Modify User.java entity
  [ ] Remove AdminUser.java
  [ ] Unify UserDetailsService
  [ ] Update SecurityConfig

Phase 3: Verification and Testing
  [ ] Update unit tests
  [ ] Run E2E test suite

Phase 4: Final Cleanup
  [ ] Remove obsolete files
  [ ] Update project memory
  1. Testing Plans

Comprehensive strategies for different types of tests:

E2E Plan (excerpt):

### Phase 1: Dependency Isolation
1. Maven Profile (e2e-test) in Backend
   - Exclude spring-kafka and Testcontainers
   - Skip unit tests

### Phase 2: Controlled Backend Launcher
   - Create InfiniaSportsE2ETestApplication.java
   - Use SpringApplicationBuilder
   - Force e2e-test profile

### Phase 3: Lifecycle Orchestration with Maven
   - exec-maven-plugin in playwright-tests
   - pre-integration-test: Start backend and frontend
   - integration-test: Run Playwright tests
   - post-integration-test: Stop servers
  1. Infrastructure Plans

Configuration of external services and deployment:

  1. Frontend Plans
  1. Documentation Plans

Plan-Based Working Methodology

Let’s break down the step-by-step methodology for working with plans.

  1. Creating the plan with Cascade when facing a complex task:
"We're going to implement E2E tests with Playwright. 
Before we begin, create a detailed plan in plans/e2e_testing_setup.md 
including phases, dependencies, configuration, and orchestration strategy."
  1. Cascade researches, proposes a structure, and creates the document.
  2. Plan-guided iteration. The plan becomes the working guide:
"According to the plan in plans/e2e_testing_setup.md, 
let’s implement Phase 1: Dependency Isolation."
  1. Cascade consults the plan and executes that specific phase.
  2. Plan updates during development. As I progress, I update the status:
"Update plan_user_unification.md:  
mark Phase 2 as completed and add notes  
about the race condition issue we encountered."
  1. Plans as project memory. The plans document key technical decisions.

Real example (plan-kafka-carga-productos.md):

## 4.1. Robust persistence and idempotency

The DataInitializer assigns a unique UUID to each product before sending it to Kafka.

The consumer (ProductConsumer) converts the id from String to UUID and checks if it already exists (existsById) before saving.

Idempotency control: products are not duplicated even if the flow is repeated.

What are the advantages of this approach?

We can identify 6 main advantages:

Integration with Cascade’s memory system

Plans and memories complement each other. Plans contain structured documentation and implementation phases, while memories store rules and decisions that Cascade must always remember.

Example:

Conclusion

Cascade by Windsurf does not replace us as developers, but provides a complete, synchronized work environment with the ability to support us at key moments in design and development.

It also boosts our productivity, which I’ve estimated between 80%-100%. So, even though it’s not a perfect tool and we still need to pilot the ship, I believe it is essential today to increase our productivity. Have you tried it? I’d love to hear your thoughts.

Tell us what you think.

Comments are moderated and will only be visible if they add to the discussion in a constructive way. If you disagree with a point, please, be polite.

Subscribe