DevOps brings together people, processes and technology, automating software delivery to provide continuous value to your users. In other words, it enables any developer to ship customer value faster, more reliably, and with better quality.
Editorial Note: If you are interested in a story of how 84,000+ Microsoft engineers moved to Visual Studio Team Services (VSTS) to create unparalleled value for their customers using DevOps, read Microsoft’s Devops story.
Azure DevOps (formerly known as VSTS) is everything you need to build your software product from beginning to end. Azure DevOps is a one stop shop that helps every developer on this planet to plan projects using Agile tools, manage code using Git, test the application, and deploy code using the best CI/CD system.
Azure DevOps comprises of 5 services that span the breadth of the development cycle. Let me delve deep into some of these services and then get to the why aspect of this change.
Azure boards helps you to track work with Kanban boards, backlogs, and custom reporting.
How we use it?
In Microsoft, the Azure DevOps team follows a 3-week sprint boundary where we ship at the end of each sprint. We have cross discipline teams of 10-12 people with clear charters and goals.
Teams use Kanban Boards to manage backlogs that ensure team autonomy while we use Plans to help us align with the leadership and the overall objectives of the product. We use queries extensively to track work and dashboards for real time reporting and tracking the work in progress.
One feature that is a personal favorite is traceability in work items. i.e. Updates to the work item as it progresses through the dev and release cycle is automated thus ensuring that the status of a work item is always available and accessible to other stakeholders. Now I can view the commit, PR, build and release of a task from the work item itself.
Looking at this task below, I know that the commit was created on 10/23 – the PR was approved the same day and this fix was integrated in the build by 10/25.
Azure Repos provides you with UNLIMITED Git repos. That means you can create a project in Azure DevOps and create as many repositories as you need and collaborate with your team members to build code with pull requests and advanced file management.
Microsoft enhanced git to scale to enterprise needs and invested in GVFS (Git Virtual File Systems) - https://gvfs.io/. GVFS helps in managing massive enterprise scale repositories. The Windows code base which is nearly 400GB in size is hosted on Azure Repos. A simple git clone command on the windows repo with git would take 12+ hours; but with GVFS it takes around 4-5 minutes.
How we use it?
In Azure DevOps, we use git in Azure Repos to maintain our code and use a combination of small commits, branch policies, PR reviews, and test with each check-in to ensure our code in master is always shippable.
We work out of a single master, that helps us to eliminate merge debt. Considering that Azure DevOps has nearly 800 engineers, merge debt can be a potentially big problem. Using the pull requests acts as forcing factor to test and review our code, helping us to detect errors in the pipeline.
We run a bunch of tests with every merge to master thereby helping us ensure that master is pristine
Datadog, a monitoring and analytics platform that integrates with more than 250 technologies, unites metrics, traces, and logs in one platform so you can get full visibility into your infrastructure and applications. With powerful dashboards, anomaly and outlier detection, and distributed tracing, Datadog helps you get a handle on the performance of your .NET applications, as well as their underlying infrastructure.
Click here to try Datadog’s full-stack monitoring for free! (No Credit Card required)
Azure pipelines allow you to build, test, and deploy with CI/CD that works with any language, platform, and cloud. You can use Azure Pipelines to connect to GitHub or any other Git provider and deploy continuously.
An interesting take on Azure Pipelines is that when it says any platform it means it. You can get cloud-hosted pipelines for Linux, macOS and Windows. It can help you to test and deploy Node.js, Python, Java, PHP, Ruby, C/C++, .NET, Android and iOS apps. To sweeten the deal, you also get unlimited minutes and 10 free parallel jobs for open source. With the latest support to push images to container registries like Docker Hub and Azure Container registry, it is a considerably powerful CI/CD solution in the market.
How we use it?
The Azure DevOps team ensures that a CI build is triggered for every check-in done into the master branch of the Azure DevOps git repository in master, which runs a bunch of unit tests.
Last I wrote on Azure DevOps in the month of march, we had 71k unit tests running with each PR. Now the new number is nearly 83,500 unit tests running in only 8 minutes. Measuring test failures is important for us and we ensure that there is a great debugging experience for test failure for developers to be productive.
While debugging failures help address immediate issues, failure trends help us identify hidden patterns e.g. test that have failing continuously. We rely on Analytics to identify these patterns.
We also practice safe deployment i.e. stage-wise deployment of our products with adequate checks and balances in place to limit the blast radius of any impact due to an issue during deployment.
Safe deployment practice adopted by Azure DevOps team to deploy Azure DevOps to its users in stages
Azure Test Plans
You can use Azure Test Plans to run manual tests for your web and desktop applications and also log defects. . You can track and assess quality throughout your testing lifecycle that help you to get end to end traceability.
How we use it?
In Azure DevOps team, every engineer is responsible for code and test. We call this as combined engineering which improves accountability and incentive for developers to write better tests and more automation. We stringently adopted a three fold mantra to ensure quality in code:
1) Developers owns code quality
2) Master is always healthy and shippable. Shift-left for testing i.e. greater emphasis for unit tests and eliminate flaky tests
3) Shift right in production i.e. Ensure quality in production by rolling out changes in a progressive and controlled manner. Also do fault injections and chaos engineering to see how the system behaves under failure condition.
Azure Artifacts helps you to create and share Maven, npm, and NuGet package feeds from public and private sources – fully integrated into CI/CD pipelines.
How we use it?
Azure Artifacts pretty much completes our offering end to end. It is now a one stop shop for managing universal packages. It is the backbone for inner sourcing in Microsoft where-in a team in Windows creates a package that is shared across teams and it becomes a source of consumption.
Why Azure DevOps?
We made this change since it was just the right thing to do for our customers. While Azure DevOps is an integrated suite to provide end to end DevOps capability for large enterprises, it is also nimble for organizations who want to use only few services e.g. you can host your code in a git repository in GitHub and use only Azure Pipelines for build and deploy.
Azure DevOps now allows you to select the services that you want to use for your organization.
Select the service that matter the most to you in Azure DevOps
Microsoft is steadfast to make Azure DevOps, the best end to end DevOps offering and would love to hear from you on how they can make it better.
Suggestions: Post your suggestions to help Microsoft improve Azure DevOps on their dev community.
Special thanks to all the reviewers: Divya Vaishnavi, Jaiprakash Sharma, Mahathi Mahabhashyam, Vinod Joshi
This article has been editorially reviewed by Suprotim Agarwal.