I'm Addicted to Windsurf, Send Help
SourceIt is not even a competition. Right now, Windsurf is hands down the best AI IDE. It combines the best of both worlds. It's very easy to collaborate with it as a co-pilot, but it's also able to perform a lot of long-running and complex coding tasks as an agent. And because of that, I have a confession to make.
I am completely addicted to using the platform, and in this video, I'll show you how I've learned to use it to achieve some incredible results. Everyone and their mother has been asking me where my windsurf video is, and I've been saving it until now so that I can share something really practical from my experiences after using Windsurf along with AutoDev for over 50 hours already. I am not exaggerating. Trust me, I know that Windsurf has only been around for a couple of weeks, but I have truly become a super user of the platform, and I'm going to show you how to do the same. Now let me be clear: it is certainly not a perfect platform. I still prefer AutoDev or Bolt.new to build my initial frontends, which, by the way, pair very well with Windsurf. More on that later. Additionally, you still need a lot of coding knowledge to really create something that is production-ready.
But it has already saved me hours and hours of time coding, and that gives me the time to build on top of what it creates to make my code truly high quality. It's funny because one of the biggest arguments against AI coding assistants like Windsurf is that they don't truly produce production-ready code, and thus you shouldn't use them at all. I seriously disagree with that because using something like Windsurf to lay the groundwork, write some of my tests, and document some of my code really gives me the time I need to invest in creating the best of the best. With that being said, let's dive into how to get the most out of Windsurf, overcome some of its shortcomings, and really bring your projects to life as quickly as possible. Codium, the creators of Windsurf, have done a very good job marketing the platform and framing what makes it revolutionary. It can all be summed up in this one big bolded sentence at the top of the Windsurf homepage: "It is built to keep you in flow state." Essentially, this means you want a cohesive experience with the agent as you're using it to code.
So it doesn't feel like there are two very separate processes where you're writing your code somewhere and then, when you need help, you go to the agent and then have to go back to your code. You want it to all feel like a single experience so you can remain in that very focused flow state that developers really seek for productivity. WindSurf really does that well. If I scroll down here, you'll see they outline what this looks like when working with the agent and the co-pilot. It's a neat diagram, but they also explain it in much more detail in this link right here.
So, if you click on "Learn More About AI Flows," they provide a timeline that describes what coding looked like a couple of years ago, specifically in 2022, and how it has changed with the introduction of flows. I'll go back up to the top here because I want to explain this quickly. I believe it neatly illustrates the benefits of Windsurf and all the other AI IDEs that are emerging in the near future. Back in 2022, coding was primarily done manually, which is what this timeline shows.
And then in 2022, co-pilots were introduced, where you had AI help with small parts of your process, like autocomplete in the code editor, for example, or assisting you with research before you move on to the next part of your code. Although it wasn't very integrated, it still provided some assistance at that point. In 2024, we reached the stage of agents, which is obviously a significant focus of my channel. These agents utilize large language models that can perform tasks for you, such as generating code, running commands, and interacting with your knowledge base. However, there are a couple of issues with this approach. First of all, as mentioned here, sometimes you experience unreasonable waiting periods, you receive inconsistent results, and it doesn't feel very integrated with your IDE when you have to go to a separate place to interact with your agent.
But now we get to flows, and this is what was introduced in November 2024. This month, Codium is currently collaborating with Windsurf. You can see that the timeline here is completely synchronized between you and the AI agent, so it's aware of all the changes you're making. You're easily able to see all the changes it’s making.
And it feels like a very integrated experience where you remain in flow. You don't have a separate place for your code and a separate place for your agent. You're constantly in communication with each other, essentially as a pair programmer with an AI agent. And yes, it is just absolutely phenomenal. So, that's the benefit of Windsurf in a nutshell.
Now we can dive into how to actually use this platform. The first thing I want to share is my general flow for building applications with AI, because I don't just use Windsurf. As I mentioned at the start of the video, Autodev and Bolt excel more at creating the initial front end. So, I'll build it out in Autodev or Bolt, like I'm doing right here, work on it until it gets stuck—because generally it does at some point, even though you can go pretty far—then I'll export it, bring it into Windsurf, add in the finishing touches, and then build my backend in Windsurf as well, because it generally excels at that, especially with tasks like Python coding and managing your databases. So, that's my general flow.
I still absolutely love Autodev. I'm going to keep pouring my heart and soul into the project, but there is a place for Windsurf as well. That's why I'm talking about combining them right now, because that really is a huge opportunity. So, yeah, I created this little test app as a demo. I can add an item here, and it works pretty neat!
I’ll want to extend this a lot, but once I do that, I tend to reach a point where it gets stuck. At that point, I just go over to the code, click on download, get that zip file, bring it into Windsurf, and then keep going from there. So, it’s really a wonderful combination. The example I’m about to show you is an app I created with Windsurf, made solely with Windsurf for the sake of this video. But just know that this is generally my workflow, and it works very, very well. The sponsor of today’s video is SEO Writing, a cutting-edge AI-powered tool that simplifies the creation of SEO-optimized content.
It'll help you create really high-quality articles in minutes with features like keyword optimization, AI-generated visuals, automatic web research with citations, and integration with WordPress for easy publishing. And that's just to name a few. SEO writing is perfect for you if you're looking to dominate search engine rankings and grow your online presence. Let me show you quickly how easy it is to generate full articles in just minutes. Alright, let's go ahead and create an article using SEO writing.
There are so many options here. You can input your keyword and title. I'm doing "Top 10 Skills Learned in 2025 as an AI Software Engineer." In the core settings, you can change many different factors, such as the model you're using and the article size. You can also specify the level of reading comprehension you want for your article, which is really cool.
You also have a brand voice. Let me show you this quickly. You can create a brand voice where you simply paste in some of your own content, and it will describe what it thinks your brand voice is. This, by the way, is super accurate to me, so I have that selected. Then, you can include any details that you want. Here is where you specify AI-generated images and YouTube videos that it will actually find for you.
SEO keywords, the general structure, external and internal linking. Super cool! There are so many options for customization here. Connect it to the web for research and citations. Integrations allow for publishing to a website.
So many cool things! Let's go back up to the top and generate this. I'll be back once it is done generating. And there we go—look at that! We've got our full article here with images, YouTube videos, and tables.
Everything is formatted really nicely. This is the exact information I instructed it to include. This is looking absolutely fantastic. Definitely give SEO writing a try; it is super impressive.
I'll have a link to it in the description of this video. If you use the code COAL25 at Checo, you'll get a 25% discount, and it's a nice way to support my channel. All right, so I've already created an application with Windsurf to demonstrate all the tips and tricks that I'm about to show you now to become a power user on the platform. It's just a very basic chat application where the AI responds to a predefined message every time, and I can manage conversation history just in local storage in my browser on the left-hand side here. So, really, really neat.
I didn't want to build this from scratch because Windsurf is a very intuitive platform. So it didn't really make sense for me to show you how to download it and get everything set up, as it's very easy to do so. Instead, I want this to be a very directed video focused on how to make you a power user on the platform. With that, we can dive into tip number one. Hopefully, this goes without saying, but large language models can get very, very confused when conversations start to get long.
And you'll see that a lot in Windsurf, where it's doing a really good job. However, as you start to ask it for more and more changes, it begins to hallucinate a lot, and you might think Windsurf is an awful platform. The issue is actually that the conversation is just getting too long for Claude 3.5's limitations. In situations where it starts to hallucinate, I've found that the best approach is to go to the top right corner and click on this very magical button to start a brand new conversation. While you do lose some of that conversation history and context, this is the best way to eliminate those hallucinations. To re-explain a little bit here, this method is going to save you a lot of time, even though you have to reset the conversation, and it will significantly reduce the hallucinations most of the time.
So definitely try this. It saves me a lot of time. The next thing is that it is often very tempting, when you have a windsurf build, to see ten different problems with your app and to start spamming everything in one prompt with all the things you want it to fix. For example, let's say you have all these requirements—things that you want it to improve to polish things up for you. However, this is not the best way to go about it.
It takes a little bit of patience, but it is much better to give one request at a time. Otherwise, it will confuse itself as it tries to fulfill all of your requests at once. Even though it’s an agent running behind the scenes with a chain of thought, it still messes up when you have a lot of requirements. If you take all this and merge it down into just one thing, start with that, have it implement it, and make sure it corrects itself if it messes anything up. Then you can move on to the next thing. You will get much better results this way. That little bit of patience truly pays off in the long run and ends up making the whole process take less time.
One of my favorite features in Windsurf is that before it makes any changes, it asks you if you want to reject all or accept all. You can also go within the specific files and accept or reject specific changes. Now, the really important thing to know here—this is a big deal—is that it actually implements fixes for whatever it did wrong. So, you don't have to accept the changes, test them, and then manually revert if they don't work. Everything is handled right there with the reject button.
Really, really nice. Along the same lines, it is really important to take advantage of the fact that you can accept or reject specific changes that it makes across different files. The reason this is useful is that, a lot of times, you ask it to do a couple of things. As I said, you don't want it to do too much at once, but if you have it do a couple of things, sometimes it will get everything right except for one thing. Maybe you want to just reject that one thing before then clicking on "Accept All."
And so, within a file right here, let's say, for example, I don't like the loading indicator that it added. I can reject this and then go down and reject this change. But then I asked it to do another thing, which is to add the title to the conversations, and I want that. So then I can click accept, and then boom, now it's done. I've accepted and rejected everything, so my "Accept All" and "Reject All" buttons also went away.
But that way, I got to decide what I brought in, and the agent knows what I rejected and accepted. So, I can ask it to correct the things that I rejected, and it'll know what to do going forward. Another really neat feature within Windsurf is that you can call out specific files or functions to the agent so that it knows exactly what you're referring to when you want it to edit something specific or look at something specific. The way to do that is just with the "@" symbol right here. For example, if I want to reference my hook here, "Use Conversations," I can say "Use Conversations," and then it pops up all these suggestions for me. The top two are the file itself and the "Use Conversations" hook definition within the file. I can reference the file or the hook itself, click on one of these, and then it's injected within the conversation. Now I can say something like, "Edit this to make it better," and boom, it now knows exactly what I'm talking about, so it's not going to hallucinate and edit the wrong files, which it will do sometimes. It's very important, in general, to give it that kind of direction—"Here’s the file I want you to edit," or "Here’s the file for which I want you to create tests," and that kind of thing.
If it isn't obvious already, it is super important to be very specific with the large language model to guide it to get what you really want. This is applicable when using AI in any context, but especially in windsurfing, due to the complexity of what is happening under the hood; clear direction is crucial to achieving the desired output. Many of my other tips have emphasized the importance of being specific. Another critical area to address right from the start, when creating your application, is to define your tech stack. Be very specific about the programming languages and technologies you want to use to build your project. For example, here's a poorly constructed prompt: "Build me an API endpoint to manage users in my database."
This is not specific at all. You have no idea what it's going to output here or what tech stack it's going to use. Instead, I have a better prompt. I'm specifying that it should use FastAPI and Python for the API endpoint. I'm clearly stating what I want the API endpoint to do: change a user's email in PostgreSQL, which is hosted with Supabase. I'm being specific about the database and even specifying the schema.
It's important to provide all these details; otherwise, it's not really a copilot; it’s just kind of doing its own thing because you've barely told it what you want. So, it's very important to be specific, especially at the start. Alright, the next tip that has saved me a ton of time and solved a lot of problems is actually to use O1 when Windsurf is having trouble with Claw 3.5 Sonnet. Because Claw 3.5 Sonnet is fantastic, I actually think O1 is slightly better at coding. It solves some problems that I can't with Sonnet.
And so sometimes when I hit a snag in Windsurf, and I really can't seem to figure something out, I'll go over to 01. I'll even show you my kind of prompt template here: I'll go over to 01, paste in my code, and just say something like, "Here's my code; I'm trying to do X, Y, and Z, but I'm getting this error." Then, I'll paste in the error or whatever the issue is within Windsurf. I'll get the fix for it from 01; a lot of times, it does better. I'll go back into my code and correct it. Because we have this flow state where the agent in Windsurf knows all the changes I'm making, I can then just continue right where I left off with those fixes. It saves so much time.
The best way to make general, broad-stroke changes to your codebase is obviously through the conversation window on the right-hand side that we've been using so far. However, if you want to make directed changes and know exactly which function needs to be updated, there is a better way to do it to reduce hallucinations. You can click on the function or class you want to change. For example, I have "handleSubmit" selected in the top middle right here. From there, I can click on the refactor button, which provides a variety of predefined options, or I can type in whatever I want.
It's going to use that as instructions to edit just the handleSubmit function. So the context is focused specifically on this, so it doesn't have to search through my entire codebase. It's very focused, and that's going to give you better results. So do this when you can. Similarly, if I click on handleSubmit again, I can also click on "Explain."
And so this is another way, if you're looking over code that it produced, or even if you import a project from another person and you just want to help understand a function, you can do this as well. Now it's explaining to me just the handleSubmit function. It's doing that very, very well. So, yes, use these to your advantage to help you understand and change specific parts of your codebase. Next up, one of the things I mentioned at the start of my video is that using WindSurf to document your code is phenomenal and saves a lot of time.
As a developer, you do not want to skimp on your documentation. You have no idea when you're going to need it in the future, whether when you go back to the project, bring on other people to work on your codebase, or if you're already working with a team— in that case, it's even more important. WindSurf helps a lot with that. You can specify a particular function that you want it to document, or you can generally ask it to document this file or even the entire project if you want. The significant benefit I've seen it provide is that it will also update your code.
Along with adding documentation, unless you specify not to update the code in any way, it tends to follow this directive pretty well. However, it's very important to include this instruction. So, I will just prompt it right here. Additionally, it's worth noting that you can add a docstring. For example, I can click on "handleSubmit," as I did in the last tip, and then click on "Add Docstring." However, this will usually only add documentation right above the function.
But sometimes you want to have that docstring above the function, while also including certain comments within the code as well, kind of like we're seeing right here. You can provide a general overview, but also call out how specific features within the code work. That's why I generally prefer to do it this way instead of adding a docstring. However, just keep in mind that the option to include a docstring is available as well. You can see right here that with my prompting, it added all the documentation without changing the code at all. That's what you want when you're adding documentation.
You usually want to perform code cleanup and other tasks as a separate step. One area where AI has always been very helpful is in writing your tests, and with tools like Windsurf, this is no exception. It saves a lot of time, especially when dealing with tasks that can be quite tedious for developers. However, it's essential to do this step to ensure that you have production-ready code that can be consistently tested, preventing issues when changes are made. When you write your tests with AI, they may not always work perfectly right away, but they can help you set up a significant amount of boilerplate. This is particularly beneficial when you're integrating various libraries, such as Jest and the React Testing Library for front-end development, or if you're working with Pytest in the back end. Often, there is a considerable amount of setup required, and you may need to refer to documentation to figure out how to get everything working and have access to all necessary resources on your computer.
It's going to be able to research library documentation for us. It's going to be able to fully deploy anything it builds. I'm sure there are a million other features as well. That is the day I am looking forward to, and it's cool to see that with tools like Windsurf, that kind of thing is actually within reach, which is just fascinating to me.
So I would definitely recommend trying out windsurfing and giving it a shot. I promise that you are going to be impressed. If you appreciated this video, I would really appreciate a like and a subscribe. With that, see you in the next video!