Submind YouTube summaries
Thumbnail for How the Visual Studio Team Uses AI Internally

How the Visual Studio Team Uses AI Internally

Watch on YouTube

Video summary

The Visual Studio team leverages artificial intelligence across three universal development phases—planning and implementation, validation, and code review—to build and ship the IDE while maintaining high standards for quality, security, and reliability. During the planning stage, engineers utilize Copilot Chat in "plan mode" alongside tools like MCPs to design features within the specific context of the IDE, often connecting directly to Azure DevOps or GitHub to retrieve relevant work items and pull requests. Sebastian emphasizes that successful AI integration relies on thorough human-led discussions regarding architecture and constraints rather than attempting one-shot solutions, a process that frequently involves breaking down complex tasks into logical units to ensure clarity on the "what, how, and why" before implementation begins. In the validation phase, the team employs specialized agents such as the debugger and profiler to rigorously verify generated code, diagnose bugs, analyze call stacks, and optimize performance metrics. While AI significantly accelerates prototyping, reducing initial development time from weeks to just a couple of days, manual oversight remains critical to prevent "AI slop" in enterprise-critical products; engineers still spend approximately 60-70% of their time reviewing code, including unit tests which AI sometimes generates with low value. This human-in-the-loop approach ensures that the final 20% of work, which involves respecting architectural principles and assessing customer impact, is handled by senior engineers who may even revert to traditional methods like paper and pencil for complex logic to maintain deep understanding. The code review process is further enhanced by Git agents that perform local pre-commit checks, leaving inline comments directly in the IDE before changes are pushed to hosting providers. The team also utilizes an internal "dogfooding" feature that groups related file diffs into logical clusters, helping reviewers assess risk levels and understand complex multi-file changes within the history view. Throughout these workflows, engineers frequently use worktrees to manage parallel branches and integrate with Work IQ via M365 Copilot to extract context from meeting transcripts, though they acknowledge current limitations such as the unavailability of certain MCP servers for on-premise environments and a desire for unified command syntax across different tools. Ultimately, the strategy balances powerful automation with essential human judgment to ensure that every feature meets the rigorous demands of the Visual Studio product line.
Read the full video transcript
Thank you for being here today. To to have some discussions about Visual Studio and how the Visual Studio team uses AI internally to build Visual Studio. Raise of hands, I'm assuming most of you all use Visual Studio in your day-to-day. That's good to hear. My name is Sebastian. I've been a software engineer within Visual Studio for 3 and 1/2 years. So not that long. But as many of you know, things have changed a lot in the last 3 and 1/2 years. I interned at Microsoft three times and when I started back in 2023 I don't think like ChatGPT and agents were in anyone's mind when working in Visual Studio. And heck, Visual Studio has changed a lot in the last 6 months within itself. And so when the opportunity presented itself to chat about how the engineers in Visual Studio are utilizing AI to build VS, I thought this conversation would be a walk in the park. But I was wrong. Mostly because as I started talking to the different engineers in VS I, as someone who just mostly builds features and fixes bugs on the version control space and the code review space as I was interviewing different engineers in VS, I understood the difficulty, the complexity of not just building Visual Studio but shipping Visual Studio to each and every one of y'alls machine. And not only VS 2026, but 2022, 2019, all of the servicing, the security, the compliance, the accessibility that we work on, right? So as I was interviewing engineers in VS to understand how they utilized AI and I expected that to happen. Um I kind of saw that everyone had different workflows, different tasks depending on what they worked on, which is totally normal in a software development company, right? Especially when you have engineers working on the back end for how to ship Visual Studio, engineers who work on compliance, security, right? So, the workflows can be different. And so, as I was interviewing these engineers, I had to find commonalities between each of them to understand, okay, how are engineers in Microsoft and VS utilizing their own tools, leveraging them to build something like Visual Studio, to make sure that we're delivering a quality, secure, reliable, compliant, accessible product to our professional, enterprise customers. And so, as I was looking for the common denominators between engineers, I saw a workflow that kind of matched between everyone. And that's what we're going to talk about today. We're going to talk about the three phases of development that, no matter the task, I saw engineers doing. So, phase number one will be the planning and the implementation phase. Phase number two, we'll talk about the validation phase. And the last phase, which I bet a lot of us are spending a lot of time on, is the code review phase. So, I have you all for a little bit of time today. So, we're going to try to build a feature on top of something that already exists within Visual Studio using this workflow today. So, let's go ahead and jump into VS. Can you all see my Visual Studio, okay? Perfect. So, one of the things that we're going to build on top of today is the ability to see pull requests within the IDE. So, as some of you may or may not know, we have the ability My screen's frozen. >> Okay. My pointer extension's not working properly, so I'll use my mouse today. We have the ability to see pull requests in the IDE today in the Git repository window. So, if you go to Git you go to your hosting provider like GitHub or Azure DevOps and you go to view pull request, the Git repository window right here uh which before used to only have branches and tags, will also have the list of active pull requests. Active being a keyword there for now because right now we only show the pull request in the hosting provider that are active. We don't show completed, we don't show abandoned. That's soon to come. But the thing that we want to build today is that on this filter box right here if for some reason the pull request has been completed or abandoned and you want to search based on an ID, let's say like 1 2 3 4 we want to go to GitHub we want to go to Azure DevOps and we want to pull that pull request and show it on the list itself. So, that's the goal today using those three development workflows. Do we understand what we're building today? Thumbs up, perfect. Okay. Now, before we jump into those phases, I do want to point out something that's been discussed in a few sessions, but I think it's good to point out since it's being utilized now more than ever. Uh and that's the ability to create work trees from the IDE. Something that I saw a lot of the engineers I interviewed was just that they had multiple work trees to work on different work in parallel. So, within the IDE in the Git repository window, we support that now. So, one of the things that I love to do whenever I get a new task, a new bug, a new feature is that right from the IDE, I'll typically go to main and go right click and create a new work tree from here. So, the context menu right at the bottom. And when I click on that you'll be able to create a new branch, put the branch name, um and if you'd like to work uh open the work tree in a current window, you can do that as well. So, I wanted to point that out because there's going to be a few things that engineers constantly mentioned when I was talking to them about how they utilized AI to build VS, and just having worktrees in general was one of the things that constantly came up. Okay. So, the difference is that the worktree will allow you to spin off a different branch, right? And you'll be able to work in parallel. So, you can have your own stage changes, the things that might not be committed or committed, right? And be working on the same repository at the same time, right? But with different um worktrees pointing at different branches, so that you can use them in parallel. Good question. Okay. So, I'm going to go ahead and jump into a different instance of Visual Studio to start going over what we want to build today. And so, we're going to start with the planning and the implementation phase. So, you can see that I have the GitHub Copilot Chat open right now. I want to point out a few things that we're constantly utilizing. Uh there's the different modes that we have, right? We have agent, agent preview, and I'll go over these in more detail in a bit. Uh we have the debugger agent, profiler, but one of the things that came up a lot was that most engineers like to plan. They like to understand that, hey, Copilot is in the same mentality, understanding the same context as the engineers. So, planning mode's important here. Right now, because I don't want to interact with the agent, I'm just going to bypass some of those conversations. And because I want a little more reasoning power for what we want to build today, I'm going to use Cloud Opus 4.6. But, as many of you know, you have the capability to switch models, right? Depending on the task, which will be important because sometimes you don't want something like Opus 4.6. Um if you're just describing maybe a work item or something like that, you could use a lesser more powerful model. Um I also want to call out the ability for tools. Uh tools are extremely important and especially in our internal workflow. Especially like MCPs, right? Uh a lot of those work in Azure DevOps or in GitHub. Azure DevOps has a great MCP to get pull requests, get work items, understand work items, uh and and a lot more. You can get comments from pull requests if you'd like to analyze them within the Copilot chat. Those are the things that are available. And also something very important is the skills. Um right now I'm working on a repository that's an extension of Visual Studio, and we insert a lot of our code into VS. And so I'm you I'm working on the version control code right now. And one of the things that sometimes we need to do is update dependencies. I I know a lot of us need to do that constantly. Before it used to be a very manual process. Uh you know, if Visual Studio has a new API that we want to use, or if they've helped us integrate some feature, we need to update our dependencies. Typically, we'd have an engineer do that very manually on the side, put up a pull request. Now we have a skill, and then of course we'll have an engineer still running through that process, but they can spin the skill with the agent, and the agent will take care of that. So I wanted to call those few things out that can be incorporated in that planning flow. I'm going to go ahead and go to the conversation that I started right before this demo. Um I will be frank with you all. I had a lot of prompts saved for this uh conversation today that we're going to reutilize to build the feature that we're building. I do want to hone in on the planning session though, which is um planning I I know right now AI generates a lot of code for us, but planning is extremely important because the anecdotally what I heard from engineers was that if you have the design discussions, if you have the technical discussions, if you have conversations on Teams, work items, issues, pull requests, right? If you understand the constraints of what you're trying to build, and how you're trying to build it, typically you'll have a better result with these models and with Copilot and the agents, right? Because if you don't, like I've tried it multiple times and I try it every now and then where I get a work item, I get a bug, and I'll give it to Copilot. I'll say, "Do it, right?" But typically it doesn't know how to one-shot that solution, right? Because it doesn't fully understand the breadth and the complexity of some of these large systems that we work on today and that many of you all work on, right? Um as you all know, Visual Studio is 20 plus years old. Um so there's a lot of code there that sometimes we need to analyze and understand to build the things that we want to build today. And so I still think it's a very important that the human factor and aspect is still there through conversations. Because if you're able to gather that context beforehand, understand what you want to build, understand how you want to build it, then you give it to Copilot or the agents, the models, then you'll have typically a better result than if you were just to try to one-shot the solution. Okay, so I've given uh Copilot uh the prompt of of what we want to build today. Um you can see that it's thinking through a few things. Now, you might say, "Hey Sebastian, you can do this in the CLI. You can do this in VS Code." Right, there's plenty of tools to do this, which I agree. I'm not saying there's not. And depending on the task, you know, one tool might be better than the other. But I developing features within Visual Studio, right? With the UI and the code navigation and the diffs that I need to inspect, I like being in the IDE to easily navigate things. So one of the things that you'll be able to notice is that Copilot is gathering the context here. So I can easily navigate to a specific interface, right? Right from the IDE to inspect it to see if it's actually gathering the context that I expect it to gather. So what the those are one of the things that I like from being here in the Copilot chat. Another thing is that um it's not just a full wall of text, right? I can inspect it from the Copilot chat. It's a a easier to read for me. Um and then I like that it breaks things down into steps. You could probably modify this through instructions or skills, but that's one of the things that I like. And then as you can see as when creating any plan, you'll see that it'll create a dot MD file. The copilot channel would typically open that. Go ahead. >> Yeah, but using the plan, how are you using the skills? How are you organizing the skills that are relevant or >> I think it depends on the user story or where you're trying >> Good question. So everybody can hear. >> Oh, yes. Okay. Thank you, Wendy. How are we modifying the skills or utilizing skills when creating the plan? Was the question, correct? Okay. >> And then also I guess just to continue on but are you creating Are you creating like plan or feature release specific skills or these different problems that you're working on? >> Yeah. We're working on a lot of problems at the same time and because all of this is new right now, I'll be frank. It depends on the situation as a whole. So one of the things that we're trying to inspect is like what are we doing repetitively, right? And so as I mentioned, we need to update Visual Studio dependencies. Before I did, you know, when I first started at Microsoft, it used to not be so frequent that we were updating these dependencies. It would happen every 6 months, you know, because we didn't necessarily need all of these new APIs, but now because of the faster development and working on newer features that we want to deliver quick and with quality, we're having to do things faster and faster, right? So one of the things that we noticed was okay, we're having to update Visual Studio dependencies a lot and it it seems burdensome. Nobody loved to do it. It it was a very manual process, right? And so, that's when we decided, okay, a skill could be a good use for that, right? Uh, when it comes to larger complex features, one of the things that we're trying to do is whether it be through skills, instructions, or documents, right? Cuz documentation is still very important, is understanding the architectural decisions into the what, the why, and the how. That's kind of what I'm I'm going to There's going to be a few parts where I'm going to let Copilot do its thing, and we'll have some more of those conversations uh between the audience, because I am interested to understand how you all are when building features, right? Like are we are we still documenting the things that we need to? And the key decisions, the key constraints of systems, so that Copilot can also use that as a reference, right? Because I think the how and the why is very important, and it's one of the things that we're trying to work on, like how can the agents understand that, right? When these conversations are happening at every work work item, pull requests, you know, team discussions, design discussions, and things like that. So, good question. >> With skills, zero bit or dangerous ideas are dangerous really. >> The question was, with skills, how do you know if they're high risk? Um, or like in like maybe like vulnerable? >> Uh, not security-wise, but just like whether they'll work consistently or not. It's a brittle process. Like, how how do you know the skill complexity looking at a skill or while you're building it or while we are using it? >> Good question. So, I know that uh there are best practices for some skills that maybe somehow I can share uh after this. Um, but one of the things that we're navigating, I don't know if we're like I can fully answer that myself since I haven't worked fully in the skill space. Um, but there are some skills that perform better than others. As to why that is is something that we're looking into. >> I can answer a little bit of that. .NET skills repo, um we have uh added a whole a evaluation process where we are determining whether they are providing value and reducing cost over um just using doing the same activity with Copilot themselves. And you can it that is an open source repo, so you can see how we're doing those evaluations and you can implement something very similar for yourself. >> Any more questions? I should probably not step away too much as my machine keeps uh going down. Let's see. Um Get that over here. Cool. Okay, so we see that Copilot created the plan. I gave it uh this prompt right before the session to create um to be able to go to the hosting provider, Azure DevOps or GitHub, and get a pull request. I can read through the plan, I can understand it, um and I'm going to go ahead and just implement the plan. Now, one of notice uh point out a few things at the bottom left corner. Well, we were in plan mode beforehand. And so, I had to a little a bit of context of what we're trying to do. And I just told it, "Hey, go implement the plan that we came up with." And switched over to agent mode or I like to think of it as like auto mode. And so, that's starting to work. Uh one of the things I want to point out here on why I like being in the IDE for something like this is because um sometimes, as you all know, Copilot will generate a lot of code. Uh these models will generate a lot, and sometimes it can be hard to parse. So, being within the IDE itself, um we have the good capability that easily give you the before and after, right? So, I can easily understand step-by-step what changed uh from the diffs that the Copilot chat will give me. So, that's one of the things that I like. Uh we'll let Copilot do its thing. How many are using plan mode within VS or within the CLI or VS code things like that? Okay, that's good. What about agent {slash} autopilot mode? Okay. Do Does anyone have any feedback or think that there are things that are missing in VS for these modes that you'd like for it to be there uh compared to maybe the CLI, VS code? >> I was going to say shortcut keys between Copilot and VS Studio. Also like you uh >> So So the various keywords. So you do a pound sign to pick up a file at VS code and Copilot it's the at sign, I think. >> Yes. >> And we use the at for the agent in VS. I just like those all to be the same. It'd be awesome. >> I agree. Yes, I plus one to that one. We'll relay that feedback cuz I'm constantly switching from the CLI to the V to VS, right? And as you mentioned, I'm clicking pound sign and and at when I shouldn't be. Any more feedback or thoughts? Okay, so it seems like uh Copilot is building. That's one of the things that I like being right from the IDE too. I can kind of see what's going on. It started building uh the solution uh that we're building today. Let's see whether it actually succeeds. We'll let that build a little longer. Do you folks feel like they're switching a lot from cuz you mentioned the the the pound and the hashtag. So is it common for you all to switch from the CLI to VS or VS code to VS and back and forth? Uh what What do you think inspires that? Like how come you're not just in VS? >> Uh the new SQL Server projects uh SSDT projects, they don't work in Visual Studio. >> Okay, that's good. Good feedback. SSDT SQL projects. >> Sadly, my company is way behind on our VS version. They won't let us install past 2022. So, I do most of my work in VS code and then go to VS when I can, basically. >> Visualization better. >> Yeah, in >> I like the visualization, so I really like using the CLI to to do large features and planning. It something feels better about it. I'm excited for the CLI the SDK that they're all going to share. I'm excited for the preview one. But, there's something that feels better about the CLI, but then I still like viewing the code and the differences in Visual Studio. So, I'm excited about the the launch and the switchover capability they talked about earlier. >> Yeah, that's one of the things that I heard as I was interviewing engineers in VS and I think talking to PMs and designers, right? Is something in the CLI, whether it be like through planning or starting to have those initial conversation feels different. Um, I have some thoughts, so maybe after this we can kind of brainstorm a bit to try to give more concrete feedback to our designers and our PMs to understand if we can either make that experience very similar or is it that VS needs to be faster in certain ways? Like, that'd be good to know. >> To me, uh, the old custom Visual Studio harness felt really inferior to VS code harness. I'm hoping 18.8 is going to fix that. >> Thank you for that. >> Uh, Visual Studio is not cross-platform. I've used VS code on Linux and Mac. >> Yes. Anything else? These are great points, uh, and we definitely want to hear this feedback. Okay, uh it said it succeeded. So, let's go ahead and transition over to the second phase, which is a validation phase. So, we planned, we implemented. What I'm going to do now is I'm going to do control F5. And this is going to spin out a different instance of Visual Studio, what we like to call an experimental instance. This is pretty much the binaries that we have from our extensions applied on top of another Visual Studio. So, let's see if Copilot did what we intended it to do. Okay, so I see an instance of VS coming up. That is good to hear. Um Okay, so you can see here um the theme looks a little different. I'm using like a lighter mode um in this VS experimental instance. And so if I launch the folder um of of the GitHub project that I have to test out this feature, there's two ways that you can go into the pull request experience. You can do go directly to the Git repository window. Um I like going through Git, GitHub, and then new pull request. If you had Azure DevOps, it would be the same. Um the the capability here is that it'll just automatically kind of collapse the branches and tags, and it'll expand that pull request section. And so in this validation phase, with so much code being generated by AI, we're spending a lot of time making sure that the layers, right, and that in the back end side of things to make sure that the Visual Studio that we're shipping, right, is of quality. With more integration tests, more unit tests, but also one of the things that we have to do now is so many so much code being generated is manually validating and making sure that the things that we expect to be sound are sound. But of course, the thing as we know with manual validation is that you're not going to catch every edge case. And so, that's why I believe there's more support into making sure that these integration tests, these unit tests uh are more in place uh to make sure that the product that we're delivering is still of the utmost quality. So, as we can see, pull request show, this is good. Nothing's broken in this end. What happens if I type a pull request ID of a pull request that did not exist before. So, if I put 22, you see something's happening, and we see that there's a new section, the completed section. And so, from the initial looks, it seems like if I click on this pull request, there's a few things I would like to improve here uh that Copilot didn't take into account. Um but we can see that the feature's working for the most part. I put in an ID that wasn't there before, and then it appeared in a section of its own. And you can see that this pull request is merged. So, we look through completed and abandoned pull requests all the time in case it caused issues or regressions. Uh it's good to have the context. Now, what happens if I clear that? Okay. So, there's a bug there. You can see that I cleared this pull request ID. Nothing's happening. The old list did not get restored. And so, this is part of the validation phase and the back and forth that we have with Copilot. Sometimes things work, sometimes things don't. And so, how can we leverage the power of Visual Studio to understand, debug, and see what the root cause of the issues are. And so, I'm going to go over to our GitHub Copilot chat over here, and I'm going to create a new session. And during this validation phase, I heard two things that every engineer kept repeating. That was the debugger agent and the profiler agent. Right? The debugger agent will help you understand the state of the world that is currently going on when you're debugging the application to try to understand what's happening. So, the beauty of the copilot agent, and let me switch over to it. And what I'm going to do really quick is I'm going to attach to a process. So, I'm showing you a little bit of the workflow that I have and people have in their day-to-day, which is when you're developing Visual Studio, but you're also debugging and understanding Visual Studio can seem a little bit meta. What we have is we attach to the other Visual Studio, as I have done right here. And so, I will be able to then set breakpoints, understand the call stack, the threading, look at the local information of the properties that are being set, right? Sometimes with race conditions, crashes, that can be difficult, right? Especially if there's going like five threads working at the same time or more, right? And so, the debugger agent helps you diagnose everything together. And so, one of the things I heard over and over from the engineers is that debugger has always been king in Visual Studio, right? And so, having the debugger agent help you start ramping up and hopefully making it faster to understand the root cause of the issue is one of the great capabilities of being in VS and utilizing the debugger agent. So, let me go ahead and grab one of the prompts that I constructed for the debugger agent to see if we can understand what's going on. In the prompt, you can also tell that I'm telling it to set some breakpoints. And so, it'll try to understand the code that I wrote and see what breakpoints are the most relevant that could be the the cause of the issue that's happening. The issue being again that when you clear the filter, the old list is not being restored, right? And we want that to happen. So, raise of hands, do people use or know of the debugger agent? Okay, not many, so this is good that we're exposing this. Um how do you debug right now? Uh is there capabilities in the CLI or VS code, or do you just rely on the old Visual Studio debugger? Would love to hear your thoughts. The old way, okay. So, in my opinion, this is almost like a cheat code uh because it I mean, sometimes it's like if you already know or have a good assumption of what's going on, being in the old like just being in that debugger state is great. But, sometimes you'll get an exception that you don't understand. You're like, "Why did I get this exception, right?" And so, I think even in the exceptions when you get one, there might be like a little Copilot icon that you can click. It'll take you to the debugger agent so that the debugger agent understands, "Okay, what's the exception that's occurring? What's currently this call stack? What's happening in the threads, right?" So that it can pick up context a bit quicker uh for that debugger agent. Okay, um it said that I can leave launch the debugger. I'm already here. It said I've set five breakpoints, which is great and great to see. Um and so, what I'm going to do really quick um before I hit those breakpoints that it set, I'm just going to see if it can solve the solution. Uh can you apply fix. Let's see if it can do that. Do folks feel that with generating AI code nowadays that sometimes it's harder to understand why Copilot did things? And so, when there's a bug, you're kind of like it doesn't seem at all related to to what we were working on. I'm getting a few yeses. Okay, that's good. Well, actually not good because you want to understand what's going on. Um that is one of the things that we see every now and then. Um it says this fix at a check when the filter is cleared. And it calls refresh check access. Um, I I know already what refresh check access actually does in the background, and I already know that this is incorrect. It'll solve the issue, right? But it's actually performing a lot of unnecessary work. So, one of the things that I maybe would have liked to see is um actually caching the list for a bit and keeping it, right? But refresh check access will actually hit the server, uh which we probably don't need to do in this instance. But I'll I'll kind of chat a little bit of in a bit about how we could improve that. But let's go ahead and validate as part of that second phase again, right? So, I'm jumping to the experimental instance of Visual Studio. I'm just going to start kind of like a clean session. Oh, actually, before I do that, um as something that I know is loved in Visual Studio is hot reload. So, hot reload in our workflow applies those new changes, the new capabilities of the binaries that we just modified onto that experimental instance of Visual Studio. So, if I click hot reload, no issues occurred. That's good. Um, so I'll jump over to the experimental instance. I'll go to Git, GitHub, new pull request. You can see there that the debugger agent actually set those breakpoints. So, that's good to see. Uh what I'm going to do really quick is I'm just going to um undo those for now. And I'm going to continue. It's retrieving the pull request. That's great. Um, these are all active. If I put in 22, we can see that that appears. So, that already worked beforehand. What happens if I clear it now? Boom. You You see that there's a loading bar and then it fixed the issue. Again, didn't fix in the best way because that loading bar means we're we're going to Azure DevOps or GitHub and making another web request when we could have easily just catch cached the list that we had. Again, this is part of the validation phase. Copilot and these models are not going to be perfect in the first time. Now, one of the other agents that I constantly heard in conversation was the profiler agent. And so, if I switch over to profiler agent, the profiler agent is able to analyze the performance and try to optimize the code that you've written or that's already been written, right? So, it already has some context of things that can be optimized. So, right now I'm in a solution and I'm going to tell it, "Hey, can you improve this or can you see if there's things that could be better in terms of performance?" So, let me go ahead and grab that prompt. Okay. Put that right in. Okay, with the raise of hands, who has heard of the profiler agent? Okay, so wow, a lot more people have heard of the profiler agent than the debug agent. Um well, that's good. That's good that you guys have heard of it. I'm constantly using it, right? To optimize code to see if there's things that could be made better. Uh one of the things that of course improved a lot in Visual Studio 2026 is the performance of it. So, hopefully whenever folks are able to switch to 2026, you'll see that uh things are a lot quicker uh in Visual Studio. And so, our profiler agent is thinking. And it'll go ahead and analyze the code. Yes. Uh that is the whole goal of the So, the the question was uh if you want to perform it improve performance or the scalability with a profile agent help with that. And the answer is yes. It'll help you create benchmarks as well, or if you already have benchmarks, it'll analyze those. Uh and it'll also try to just optimize the code to be more performant and scale as well. Any other questions? >> You're sharing a lot of the technical steps that you guys use on your team to go through this. >> Yeah. >> Can you also share some of the process changes that your team uses? For instance, where do you require human in the middle? Um yeah, how much do you trust is at what point you're having models review model code written by models, stuff like that? How did How did you guys process-wise adapt? >> Uh we are adapting. Uh I think that is an ongoing process. Uh we're we're having constant conversations now more than ever about like like you said, um how do we make sure that the human still part of every part of the process, right? Because when you're building products that are large for enterprise customers and professionals, you don't want to deliver what they call now nowadays AI slop, right? Um we have millions of users that are depending their job and their every day on us, right? And so, it's still crucial. And you kind of beating me a little bit into the last phase of development, which is the code review phase. Which we're spending more time than ever because there's so much code being generated. Um whether that all that new code being generated is is um is fully perfect to the standards that we want it to, that's the things that we're trying to analyze. How can we make sure that it is? Um and how can we make sure that people can view reviews flow kind of improve so that we can make this process easier. Because in a way we're spending more time reviewing now than we were actually writing code in our day-to-day. Um so it is important to still have So I think it is it is an ongoing conversation that people are constantly having. Um you know you can see companies around the world that that things go out or they have issues, right? Because an agent did something or code did something, right? And we want to make sure we prevent all those things. Um okay, so I think the profiler agent did some work. I don't want to stop debugging right now. Um Okay. So yeah, it it found a lot of things that could be improved that I've been seeing. So the first one is uh there's a method that's still doing a filter evaluation uh twice. And maybe we don't need to do that. Um I'm going to say don't stop debugging at the moment. Um the search is O of N with nested loops. We could definitely improve that. I wanted to see if Yeah, it didn't call out um at the moment that um that refresh was unnecessary. Um I've seen it sometimes it does call it out. Um so that's something that one could improve through instructions or giving it more content or or comment in the code of what that method actually does. So I'm going to stop debugging now. Uh we've gone over that that validation phase, right? We've gone over how to use the debug agent, the profiler agent to be able to analyze, validate the code. Something that's still very important though is unit test, is integration test, right? To make sure that there are a lot of guardrails so that nothing can occur. Uh go ahead. >> Do you need to have a hundred holes? >> I was what? >> Outrage and and in your development when it focuses continue at the aspect >> Yeah, we do I think it depends on the repository that you work at. Let me repeat the question. Do we need 100% coverage? Thank you all for calling that out. Do we need 100% coverage to all the code that that is writing? I think it depends a lot on where you like what part of the feature that you're working on uh since we already had a lot of code coverage beforehand. Um personal experience anecdotally sometimes I've seen Copilot generate very useless unit tests. And so I might write 10 unit tests. But maybe two or three of those were actually really useful. And so I think that's one of the things one of the cause that we've been making talking about is like, "Hey, do we need all these unit tests? Or do we actually want the ones that are very important and things that we want to clear cuz sometimes it'll say like um you know, if we we will have a guard for saying the argument cannot be null, right? We have a helper method that checks for sure and it'll throw an exception. Some people like writing unit tests for that case, some don't. Um sometimes in depending on the team and all of that could be you know, developer dependent. Sometimes it just really does generate useless unit test. Um that's something that we're trying to fix as well. Um but yeah, hopefully that answered your question. >> Uh what is the How do you guys use the back and forth between like the work item process of creation of work items and things that come out of this. So for example uh in in our team like there's other humans who like write work items and things like that right like specs, designs. And then some things come out of this also. So is there a way to during the planning phase just like automatically generate the plans from some of the work items and are Uh and also the other way around like from these things say you don't want to you don't want to do all these things right now. You just want to like merge it in right now and do these things later. So just create work items for later from the results of this. So back and forth integration. >> Anything concrete? No. Uh not that I can think of. Uh the PMs here who work at Microsoft, please let me know if I'm incorrect. Um I was just was funny enough I was thinking about this this morning in Ramona's and Leah's talk for some reason where um I was thinking about one of the things I do a lot more now than before is constantly prototyping, right? But prototyping now is easy and you can spin up something that half works pretty quick, but then actually getting from the 80 to 100% is still very difficult in in certain areas. And so I feel like I'm get I'm getting a lot of these prototypes and ideas that I've been building, but like you said, there might not be a work item. I've I've now had all this planned. I've I've you know evaluated different solutions for it, but I'm not ready to actually dive deep into it, have discussions with the team. But how do I save that context? And how do I save all of this? Um great question. It's good feedback to have. >> So we do have integration with the the MCP servers with ADO or GitHub depending on where your repos are. You can have Copilot create those issues with all of the context in the plan that you had created. And so that's there for you to go and work from in the future. I also if we have the meetings and all that stuff is in place before, I use Work IQ um MCP server as well as ADO or GitHub to gather all the contacts from all the meeting transcripts and everything that we've done to talk about to help create the plans from the conversations that we had so I don't have to remember everything that we talked about. Work IQ brings in all of that context from those recorded Teams meetings that we had and and helps to create those plans and then it can create issues from those if we don't already have them and all of that. It's the the power of these MCP servers are pretty impressive. >> Yeah. Oh. >> So, yeah, if you have M365 Copilot, um there's a Work IQ um is an MCP server that connects to all of your Microsoft intelligence. So, your your exchange, your um uh your your Teams, all of all of that is is whatever you make available is is available for it to to search through and gather. >> I do want to note that the I've been looking at it this morning, the Azure DevOps MCP server is not available for on-premise. >> Good feedback. We definitely Yeah, need to relay that. Um Yes. Uh thank you, team, for being here. Um that's something that, you know, with so many tools and and so many new things, it's hard to like keep everything in the wraps with everything happening and changing so quickly. Um but yes, one of the things that I will be trying out through these little tools is that we do have the ADO MCP server there and so you can do things such as search work items, create work items, right? Um and I would assume that get the uh the Copilot chat can grab the context from the conversations and put that in the work item as well if you'd like to. Okay. So, we've done planning, we've done validation. We're ready for code review phase. Now, as I mentioned earlier, we're spending a lot of time reviewing code. And one of the things that has been discussed in previous sessions as well has been this concept now that there's two parts of the review. And there's that local review before you actually push to GitHub or Azure DevOps and you get your team involved. Right, so that's a local review before you actually commit and push everything. And there's that more like remote review or the code review that happens with your team on site as well. So, one of the things that you can leverage Visual Studio to do this is through a few ways. You can in the Copilot chat, we have the Git agent capability here. And you can already see on the right-hand side that it has the ability to review the current changes. And so, if I go ahead and kick that off, you'll see that it not only will leave comments in the chat about what can be improved or not, but it'll actually spin up spin up kind of like an editor integration where the comments will be in the code itself that you wrote with Copilot. And so, it'll give you suggestions on what could have been improved before you actually go ahead and push that to the hosting provider. Now, I do want to call out that this functionality also exists within the Git Changes window. So, in the Git Changes window, you'll see this button right over here that you can review your changes with Copilot. So, if you're not in the chat, you don't just only have it capability in the chat, but you can do this in Git Changes as well. And you'll see that they kind of interact together once it finishes reviewing. Uh with a show of hands, do people know about the Git agent? Oh, wow. I'm not I don't know if I'm seeing a single one. >> Why did you use the name Git agent instead of QA agent? >> Or yeah, it almost feels more like a code review agent than a Git agent. >> Good question. Um because um one of the things that Lea demoed earlier today is like merge conflicts, right? And so, this Git agent will slowly start getting more and more integrated with a lot of those version control capabilities as well. Um and in a way version control is very tied to to the current code that you have in your work directory. And so, being able to review the current code that you've been working on, uh Git has a lot of capabilities and understanding of things that might be stashed, unstashed, right? A a plethora of things. Um and so, what you can see here is that Copilot has left comments within the IDE. Um there's things that can definitely be improved with cancellation tokens, uh guards, things like that. And so, if you wanted to, you could go ahead and also generate a suggestion from Copilot, or you can just review that within yourself. Um we're running a little bit of out of time. Uh thank you for all for being very engaging. So, there's one thing that sometimes takes a little more time that I want to demonstrate, but I won't fully uh get Copilot to do just yet. Uh I do want to show the um agent preview, right? Which was mentioned a little bit earlier. And that was about um utilizing the GitHub Copilot uh CLI SDK. It's a mouthful. Um and one of the things that I I do in the CLI, but also do in VS a lot, is being able to order the commits properly. Like breaking things down into easy to easy to tell and parse commits. Because as we spoke earlier, there's a lot of code being generated nowadays, and Copilot loves to generate code. And so, one of the important things is breaking that down into a meaningful story. And to understanding the what, the how, and the why. And so, one of the prompts that I like to give Copilot is, "Hey, can you break this down into several commits?" Something that makes sense so that not only is my job easier to understand and parse that history, but um so that my teammates can understand, "Hey, if they're reviewing a larger pull request, and it feels as of recently in pull requests are getting larger and larger, Being able to review commit by commit will be a little easier. And so I'll share a little prompt that I've just created for today. Which is, "Hey, with the current changes in my Git directory, can you break this down, right, into a way that makes sense?" And then um one of the things that I would like to see improved, honestly, maybe within the Git agent, is maybe making this like uh experience a little uh better because uh with the Copilot CLI SDK, I see that it'll do a lot of commands that I feel like are unnecessary on the Git side. Um but it'll still do it properly based on on what you tell it. And so one of the things that I'll show, once that's complete, uh that one can do, is that if you go and I'm switching over to another repository really quick, um if you go over, let's say, to your Git history, imagine that you had those commits ready to get pushed and you forgot to review them. Or imagine that you're trying to review a commit that maybe created a bug and you think might have been the culprit of something that occurred. One of the things that you can do within this uh repository window and within the history view is that you can also review that commit. And so I just right-clicked on the commit itself. I review the commit. And then you'll see that we're reviewing changes. This is kind of like the same architecture, the same system that's happening with your local changes, right? But now it's happening for the commits themselves. And so if you wanted that functionality there to try to understand commits a little better, you can do that as part of your workflow. Um again, this is all about that local review um flow that we have. Now yeah, you can review commits that have already been pushed. Uh it seems like Copilot didn't generate any comments here. Uh but typically it'll generate comments with suggestions or things that could be improved or even just explaining a lot of the code. So, that's the local review flow. So, within the IDE, we've also added some capabilities to review pull requests within the IDE. So, imagine you've gone ahead and created a pull request, which we do have the functionality for, so I'll show that really quick. Um if you go to Azure DevOps and you go to new pull request, um if I were to have committed these changes, you'll see that um you can enter the title, you could generate it a a Copilot AI description if you want to hear. Um I haven't committed anything, so there's no diff. Uh but, that's also available there. And then, when you automatically create a pull request, this works on both Azure DevOps and GitHub, you'll be taken to the review experience within the IDE. So, let me switch over to my TypeTrip repo. And as we mentioned and we worked on earlier, you have the list of pull requests. Right now, we have the active PRs there that you could see. Uh you can open a pull request here. Now, I do want to uh say that this view might look a little different for you. We're currently experimenting with that capability of making reviews easier. Uh as we know, there's more pull requests nowadays, there's more code being generated, and because we're spending so much time actually reviewing code, we're trying to see if there's ways we can make that better with the integration of AI. So, this view might look a little different for you, but the functionality is already there. You can approve, you can complete, you can merge things, you can understand the status, the comments. Um you can navigate files, all within the IDE. So, let me go ahead and I've already popped out a pull request, so I'll show you how to do that. Um over here, you have a few commands. You can open this pull request in the browser if you would like. Um or you can put it into a larger screen. Um and so, from here, you can look at your changes. Uh you have the multi-file summary diff capabilities. And then or or if you just want a regular diff, you can do that as well. Uh, but one of the things that we're experimenting with uh, is not available to the public yet, but we're dogfooding internally is the ability to generate groups. What does this mean? Well, it means that once you press that, uh, Copilot will try to understand like the files, the diffs, the hunks that are related, right? Um, imagine that things weren't broken down into several commits. Imagine that everything was just one large commit, 70 files modified, and you're like, "How do I even begin to review this?" Uh, definitely happens quite a bit nowadays. And so, you'll be see you'll see in the left-hand side that Copilot try to broke it down into groups that it thinks are related. And so, then you can see, you know, if a change might be of of high risk, of low risk, and it'll give you a bit of a description on what those changes are currently doing. Again, currently internal, but something that we're experimenting with to try to understand um, if we can make developers' life easier within the IDE to review certain things. Okay, we've talked about a lot today. Uh, we talked about the current workflow that a lot of the engineers in Visual Studio are having, which are planning and implementation with Copilot Chat, the validation with the debugger, the profiler agent, and then the code review, right? The local code review functionalities to understand what your code is doing, if it can be improved, and then the ability to review pull request all from within the IDE. Now, if you needed a recap of everything we talked about, I know it's a little small cuz I needed to fit all in one side, but these are a bit of the things that we've discussed um, in in terms of like the workflow that the engineers have had today. Now, there's There's few things that I want to point out. This workflow doesn't have to be linear, right? You don't have to plan and then validate and then do a code review. You can hop hop into any of these features in an independent fashion, in a dynamic way, because you don't have to follow this 100% since every task might be a little different. And then one of the things that I also want to point out is that if I learned anything through interviewing a handful of engineers in Visual Studio that worked on a handful of different things is that human knowledge is still very key. Uh there, you know, these systems can be very complex. The architectures can be very complex in themselves. And so making sure that discussions are still being had, right? With designers, with PMs, with engineers to understand the constraints of the system, right? To gain knowledge and expertise on the things that we need to build, we still see as a very important part of the workflow. Because at the end of the day, we don't just want to spend all day just talking to Copilot, not talking to a single human being, and then shipping something, because that might not be of quality. And so we still need to put our customers first into what we're building, and we want to make sure that again we're delivering reliable, maintainable, secure, quality, compliant, accessible, so many things go into building enterprise software. Um anyways, we have about 7 minutes if folks have any questions. Thank you for being and interacting today. See the little one right over there? >> Yeah. Um do you have any data on like how much you think AI has sped up the Visual Studio team, your local team, yourself? Any data like that would be helpful. >> As a software engineer myself, I do not uh know or have any metrics to have under can understand whether it's been me uh more productive. So, I couldn't tell you. I don't have that data. Um what I can tell you though is that there are certain parts of my workflow that are definitely more productive. And I'll give you some examples. Like I said, prototyping. Before, you know, being here 3 and 1/2 years, prototyping me would typically take me a week or two. All right, understanding the system, understanding what I need to do, uh just spinning up something that you know, sort of works. Um that's just data that I had and calculated manually myself. It's one of the conversations that sometimes we have with our managers. It's like, how long do you think there's a prototype? How long will it take you to actually get it into production? Um now the prototyping I think it might depend on engineer, but for me, prototyping can take me about a full day or two. Uh because Copilot will generate a lot of that code. Again, that's a prototype, right? It go it got from zero to 80 very quickly, but that 80 to 20 is still very important. And it's not just that 80 to 20 about the code and the complexity. It's like did the prototype I built actually help customers? Right? Uh does it have good impact? Uh does it maintain the architectures and and respect to the ideologies that we have within our repositories? Those are then conversations that at least someone who's been here 3 and 1/2 years I still need to have with senior engineers, with principal engineers who have a lot more experience. Um I still see those as very crucial. Um and so, but I think again, it might depend on on what you're working on, how fast something might need to be delivered, things like that. Um so, unfortunately, I can't give you a concrete answer at the moment. Any other questions, thoughts, comments? What's the ratio between the coding and the reviewing. Um At this stage right now, and I I and I say this because we recently had some some new hires coming in, right? Uh you know, not long ago I was actually like the the latest new hire within certain features that I work on. Uh I'm spending a lot of more time reviewing code. Uh the exact ratio I couldn't tell you. I would say probably like a 60/40 70/30 where a large majority is reviewing. And not only just reviewing other people's code, but also reviewing Copilot's code. Um I would say now I spend more time actually sitting down front cuz I think it's still very important to to understand what you're trying to build and the code that Copilot wrote. Um so I still spend a lot of time just sitting down and what I'll typically do is I'll try to break down the code that Copilot wrote. So that could be into commits. Uh that could be into different files. And then I'll just go through the diff. I'll say what what's happening before, what's happening after. Is this being overcomplicated? Is there a better solution? Are there better suggestions? Um And so I feel like I'm reviewing the code that I've also collaborated with with AI um more than like actually handwriting a lot of code. Um I still especially if something's a lot more complex, I I still like to use uh paper and pencil a lot for like when I'm in meetings and stuff. And so when something's very complex and I'm working on it with Copilot, I call me old school, but I sometimes like to type it out it myself because maybe that'll help me understand a little bit of, hey, what what was Copilot actually trying to do? Why did it do it this way? Uh those are things that, again, still figuring out myself if that makes sense. Yeah. Any other thoughts, comments, concerns? Cool. Thank you for being here today. Uh hopefully you were able to gain something and I'll stay around for a little bit if you want to have a chat about anything else related to Visual Studio. Thank you all.