 Hi, and welcome to another episode of Visual Studio Toolbox. Today, we're here to talk about Sprint 124 of Visual Studio Team Services, and to do that, I have my guest, Alex. Alex, why don't you introduce yourself? Thanks, Dmitry. My name is Alex Nichols. I'm a PM on the VSTS team, and I focus on the management of our releases, both for VSTS and also for TFS. We've got the Hosted Service and the on-prem product. With our 42 feature teams out there, I really help to scale by focusing on things like release notes, and also our customer feedback channels. Yeah. You're an important part of the Jigsaw puzzle, right? You're making sure that this train is moving forward and actually reaching customers, and I often work to focus in your role behind the scenes, and man, you have a lot of work on you. Typically, it's not an easy job. It's not like you're like, oh, we're just pushing features. You're actually going to organize this big motion of stuff to happen. So, kudos to what you do here. So, it's awesome to talk about VSTS Sprints today. I think one of the things that folks might not even realize about the fact that we have TFS in the Cloud, it's something we keep talking about, but I find lots of customers don't realize that our team foundation server, it's up there, we're hosting it, we're running it, we're releasing to it all the time. Maybe you can talk a little bit about what does VSTS mean for Cloud customers and how they get features. Right. Yeah. We often refer to it internally as one product with two names, because like you said, we're deploying TFS internally and hosting it for customers. So, when we released to the service, we were actually deploying every day and sometimes even more frequently than that. But every three weeks, which is our Sprint cadence, we bundle up the features and that's what we call our Sprintly update. Right. Those are when features get released to customers. Yeah. I think you guys found three weeks was kind of the ideal time. Yeah. It wasn't like a naturally, you didn't pick three weeks right away. Right. Three weeks became a thing and now every three weeks, customers get the benefit of features. But at the same time, we have this whole protocol around safety for customers right trying not to impact them with new capabilities because even with your best testing internally, you could push a feature out to the Cloud, something can go wrong. It's not something they're choosing, so we have to take that on ourselves to do right. So, I think you guys have a protocol. What's the protocol for that? Yeah. So, we have the concept of ring deployment. So, there's rings zero through ring four, and every day we're deploying to those rings and there's some delay between. So, we make sure that a ring deployment went well. All right. Looks good. Some big time and then it goes to the next ring. So, we have that, we have those stop gaps in place. Okay. Awesome. So, another thing to mention is that everything we pushed to the Cloud winds up on premises eventually, everything that makes sense, right, so to speak, right. Certain things are Cloud only, but TFS gets updates. So, that's a bundling of features we've already shipped and tested in the Cloud, right. So, that's kind of the, it starts with VSTS and it moves to TFS. But back in the original release, I mean it was the one way. You know, we took TFS, we put it in the Cloud and now it's kind of going backwards is it's cool to think about. The thing that we have to talk about today specifically is we wanted to bring attention to the Sprint 124 release. So, maybe you can show people the release notes and how we communicate what's changed to customers. Right. So, in Sprint 124 update, our headliner is the updated experience for search. But we've also got a number of features across code and work build a release to really round it out. So, this is pretty typical where we've got features across the product. Yeah. And sometimes this release notes can be very large, sometimes it can be smaller, whatever made it into that Sprint as a quality check and a gate that you guys have internally, gets out to customers. And it's worth saying that we publish these release notes when we start the first ring, right. So, the moment at least one customer could be impacted we put it up as a public thing. Right. But people should know, like they might go to release notes, they might see a feature, go into their VSTS instance and it's not there. And that's because of the ring thing you talked about. Right. Yeah. We want to go on the side of having those early customers be prepared with what's coming at them. So, yeah, we want to target getting this content out. Cool. And also we have sometimes non-fully production features that go out to customers, right, things that we haven't previewed. We feel comfortable enough that either customers can opt into them or sometimes just we make them available if we feel they're good enough. But everything's in release notes. There's nothing that people have to worry that they're going to get a feature. I mean we do our best, right, in the sense this is the complete list of everything that's shipped to customers. Right. And over the rings it gets out there to them. Yeah. Okay. Awesome. All right. So, we have a bunch of features to talk about today specifically and we wanted to start with search. So, why don't you tell people what search is? Because it's great to see something shipped for search, but maybe you never even used search or realize that it's there for you in the product. Right. Yeah. Search is pretty powerful. And for VSTS it's searching both for code and for work items. And we were talking about preview features before. This latest feature that we've released is really just an updated experience. But it brings a lot of benefits that we've seen and talking to the PM for this one. There's been a ton of feedback on the old experience that really helped shape this one. So, for search, this is really about going in and maybe you're in code and you're browsing through and you want to do something like look for a class even. We have some context menu that you can jump in from the code page and jump straight into search and see where else that class might be used. Or it's definition or it's references. So, it's more than just search. It actually gives you some context around, I mean it doesn't work for every single possible language, but we keep expanding that list and it works for certain languages that we understand internally. So, we can give you much more context around the files you're finding in the class. That's right. So, I want to jump in to talk to show some of what I'm talking about here. Yeah. And with code, I'm bringing up the code view here. And I click the search box and you'll notice first we get a whole bunch of filters and there's even more than what's shown here. But you can really get it to finding exactly what you're looking for. So, I might find something that let's look for JSON files. Yeah. So, that's like the hints, right? So, you're giving hints of things you can type. Once you memorize them, you don't even look at the list. You can just be extension JSON hit enter. Right. You get your list and this is giving you the real links to real files you got your source code on the right. You get your history, compare. It's really the full experience you get if you've manually found that file. That's right. That's right. Yeah. So, this is an example where I'm searching for code and you'll notice with this latest experience that the functionality is more or less the same as what we had before. But with this, we're really bringing consistency and streamlining it across the product here with a consistent filter set here that we'll see. Where we can search within a repo, one or more within one or more branches now, specify a path or a new thing called code type that we're showing there. You can switch on what sort you want to use for the results or switch the view. So, these are controls here that we've really streamlined to help bring the focus to the results and help you find what you're looking for faster. Yeah. I mean, it's great when you get six results and sometimes we know we might get 100,000 results. I mean, search is search, it's whatever how narrow you want it to be and the more narrow you can get sometimes on the repo or on the branch or even just sorting sometimes can save you. So, definitely worth pointing out, hey, there's changes over there and it seems that you can go very specific if you need it to find. Right. So, I'm looking for maybe a specific file here. I'd even do this myself as I'm looking for maybe to route some work items that to the right team that may be not be routed to the right place. I might look for this manifest JSON file and I see it in code here, but I can also switch over to work items and see, are there any work items that are also referencing this? Here I found another one. So, I can see both of those and just with the flip of a panel here. Yeah. That's very powerful. I mean, that's one of the advantages of ESTS when you have your code and your work items in the same place. We don't force you to, you don't have to. You can just use us as a dumb Git repo or you can use some other Git repo and use us just for work items. When you have it here, it's that level of integration. That's right. Yeah. It's pretty awesome. I think one of the demos that I still love to do is going all the way out to the builds. They make showing everything is linked to the work item. You can see how the full life cycle. But that's for a different episode. Yeah. All right. Awesome. Cool. So, people can basically get to this experience. That's one of the things that I like to show. How would you get here? If you just landed on the dashboard, how would you get into this view that you just demoed for folks? Is it through the code tab or? Right. If we go, well it's persistent across the entire product. We've got this search control up here on the right and you can specify the context that you like to do. You want to search for code, you want to search for work items. You'll notice though that if you're on the code tab, we assume that you're searching for code. So, we'll default the context there. If you're on work, we'll assume you're searching for work items. Okay. Awesome. Yeah. All right. All right. For the next feature that we wanted to talk about was the wikis. Awesome. So, the wikis is something that I'm quite familiar with it. I use it a lot. In fact, I'm using it right now to do some planning work. It's a great way to store some additional metadata along with your projects, right? So, you might have code, you might have work, but you often need that level of just documentation or references or some kind of plan that's more just like generic and to be outlined and beautiful thing with our wiki is we've got this great interface in there to create the wiki. It's easy. You don't have to create files and edit the files. You just say, I want to go on the wiki, I want to add a page, I want to link the pages together, I want to structure them, and then it's marked down or HTML or some combination of, and I'm usually combining the two, especially for tables and stuff. It makes it easier, but it's very clean and now we have the side-based editors and we're shipping all sorts of new features, so maybe you can talk through some of the capabilities there. Right. Yeah, wiki keeps getting better and better, and we like having this concept of your wiki pages and that content inside of your engineering system right next to your code and your work. Particularly with this one, a handful of improvements here. So, I'll jump in and first one is just make it easy to save and keep editing. So, I've got a page here, I'm open, I'll go into edit mode and I'll say, another line here and I can just do a control S to save it. Yeah. Very simply. Right? Small change but mixed productivity is so much better. Because I may want to keep editing. In this case, I want to say, we've also added the ability to, as in elsewhere in the product, link directly to a work item. So, I'll go just pound three, that's a work item ID and it'll give me some suggestions, and I'll go link in that work item. You can see the preview right over there live that it's showing that bug number three. Yeah. That feature I really like and the fact that it shows you the other things. So, if you start typing in a number, it gives you narrow, narrow search of the work item ID. Sometimes it's easier just to click on the one you found. If you know the ID, which often you do, if you're a real developer working on this, it's really easy to add it and it lets you build something that just contextual to that wiki page. Again, this goes to like your work item shouldn't be the place you dump everything. I've been guilty of that in the past as a developer. You open that work item, you're like, oh my God, there's like a wiki inside the text box. But this lets you create the context page for whatever scenario you have. And then if you open up navigation, if you're going to click on that right towards those pages, it is something that you can structure. So, right here we only have one page, but if you added more, what I love is you can actually drag them so they're like, there's a hierarchy, home can have a bunch off of it, then something else can have a bunch off, they can have expanders, just makes it easy and you never have to change the actual edit files. This is all open for the web editor, so that's kind of cool. Right, and the other beautiful thing is it's just a repo behind the scenes. So, you can do all of that advanced stuff too, if you really want to. Yeah, we try not to hide anything from you. Yeah, and associated with that, another feature that the team did release here is if you really go into wiki and you want to make that the content on your home page of your project, you can even switch that out. So, a lot of projects have the readme, we've added that option to have the wiki home page right there on your project home page. Cool, so when you land on that home page for your project, it's up to you what's there for your team and if the wiki page is what's the most relevant from the home page, you can do that. That's right. Cool, and you've got the other widgets over there on the right, so it kind of plays a role within the page, but it doesn't take it over completely. You can slide your widgets, I guess, is what I'm trying to say. Right. Cool. All right, so that's an awesome feature. Any other capabilities there? I think we have another video people can go watch, right? So, Donovan Brown did a toolbox video with Sandeep on it, which they went deeper on the wiki. I know there's more to come, the story keeps evolving, but folks should definitely check out the video and I'll link in the show notes for folks to take a look. All right, so the next feature here that we have as part of the three that we're demoing is something to integrate with Azure Key Vault. So, for those folks that don't know, Azure Key Vault's a part of Azure, one of the capabilities of Azure, and this is designed to create a really secure and safe place for customers to store secrets. And the secret list, I mean, I have it here, just so I wouldn't forget are just some really good examples of authentication keys, storage account keys, data encryption, PSX files, passwords, anything that shouldn't be in the code, right? Because you want your code to have code and you're built to execute at some point to build that code and to only then pull in the secrets from some secure location, right? You don't want the code to ever have, you know, like all the stories that keep coming out. Oh, if you search, you know, code for this thing, you'll find it in open source projects. I mean, it's an ongoing battle of like secrets need to be separate. And every developer made this mistake at some point. Azure Key Vault, the central service lets you do that. And as part of VSTS, we're constantly looking for ways not only to integrate customers into our ecosystem or extensions, but just integrate better with our own products. And that's one of the value ads we hope we add. So, Azure Key Vault being part of Microsoft, we've added even more support for VSTS. So, what do we do in this race? Yeah, that's right. So, in this particular release, we're bringing the Azure Key Vault integration into the build definition. So, it's been a release for a bit, right? Very much more connected up into Azure, but now we're bringing that into build in case you need it there, right? So, I'll just hop over to there. And where you really get started under build and release, it's in the library screen. So, in here, we have the ability to define a variable group. So, we start that and these are variables that we wanna be able to use across multiple definitions. So, that reuse is important. And things like secrets fall into that category. So, we've got this ability here to switch, to say, okay, I've got a new variable group for my secrets here, and I'm gonna link that to Azure Key Vault. This is where you can connect up to the Azure subscription that you've integrated with for your account, and then also specify the particular name of the Key Vault that you're gonna hook up to. Yeah, it's very cool. It just makes it very reusable within the product. And again, we're constantly looking for feedback. If folks find that this is not sufficient in some way, let us know. We wanna hear and we can make it even better for you. Right, so if I jump in and look at what would a build definition look like, I can jump into one here and see the variables. And I can see the variable groups that are linked here. I've got one and I've specified a secret in my Key Vault called secret one. And it's masked there. But I'll show how you can use this in your build definition here. I've just got a simple PowerShell script task or I've linked in that secret one in here and I wanna output it, right? So I ran a build earlier and you'll notice in the steps of the build there was a downloaded secret. So it went out to Key Vault, grabbed this from the secret store and grabbed and tried to output this secret. So I've got a secret here and you'll see that the PowerShell script ran and it's got that masked secret in there. So you could use it, this is just a demonstration of where you can grab it in, but you can use it in one of them. When your key tasks, like what you were saying, if you wanna connect up to a store your files or your published artifacts or something into a secret place or a secure place, you can do that with this. Awesome. All right, well, we've got a lot of great features being released and these videos, whenever we'll talk about any source print releases, they'll be as big as necessary. Sometimes they'll be much longer and in this case, we think this does justice to it. Now, again, all the release notes are up there from all the previous releases. Many times people say, oh, I didn't know this was there. We can usually point to some release notes that talked about it. We, of course, have documentation, release notes are not the only place, but there used to be a time in Microsoft, you had to dig through blockbills to find out what we shipped for our products. Yes, GuiltiesCharge, we used to do that, but we've gotten anything much better. The release notes here are awesome. We have release notes for VS Code, we have Visual Studio Release Notes, TFS, and VSTS, Visual Studio Services, so everything's up there on our site and we hope folks get benefit from it, so I think we'll wrap it up. All right, thanks for having me. All right, thank you very much for watching Visual Studio Toolbox and we hope you come back for the next episode. Thank you for your time. Thank you.