Skip to main content

How my team should access Azure DevOps

I think that the functionality offered by Azure DevOps and how easily it can be configured and used change the way how we build our cloud environments and our solutions. 
The number of projects and companies that are starting to use is higher and higher each day. This is an excellent thing because Azure DevOps allows us to redefine how we build and deploy our solutions and environments. 

Azure DevOps and Visual Studio Benefits
The licensing model for users that can access Azure DevOps seems simple but created a lot of confusion, especially when large organizations start to spin-up projects inside Azure DevOps very fast. It is interesting that during the adoption of Azure DevOps, the number of Visual Studio license requests by the teams grow 3 or 4 times more than the previous year. 
One of the causes could be the Visual Studio benefits package, from which Azure DevOps is part of. The benefit package of a Visual Studio license includes access to one or multiple services that are under Azure DevOps offer (e.g., Azure Boards, Repos, Test Plans and so on), as you can see below.
Initially, you might say that this is a great thing until you review the monthly cost per user of a Visual Studio subscription and the number of users that requested a Visual Studio Subscription. 

The impact 
Let's assume that you are working on an Azure project. You have a team of 12 people, from which 4 of them are developers.
It means that the forecast of the VS subscription is 4 per each month. Once you start to use Azure DevOps, the trend is that each person from the team to request access to VS to be able to access Azure DevOps project. 
You jump from 4 to 12 monthly subscriptions. The standard price is $45 for Visual Studio Professional and $250 for Visual Studio Enterprise. If you multiple this with 100 teams, then the monthly impact is high. 
As we can see, the impact of using Azure DevOps inside the organization is almost half a million dollars per year in Visual Studio subscriptions. 

Wait...
At this moment in time, you might ask yourself if this is the only way how you can get access to Azure DevOps. The response is NO.
Visual Studio subscriptions provide as benefit the access to Azure DevOps besides other benefits. Additional to this, you can buy multiple types of user licenses for the user to access Azure DevOps. 

Why this happens?
Initially, the access was provided based on the Visual Studio subscription. People tend to request access to a service in the same way as the others from the team. Because of this, everybody started to use the Visual Studio subscription to get access to Azure DevOps.  
Because the costs are not visible directly at the project level, there will be a latency until this kind of decision is notified. 

Rework
First of all, we need to understand how users can get access to Azure DevOps. 
(1) Basic Plan user license costs $6/month and provides access to Pipelines, Board, Repos, Artifacts and the ability to run some load tests. 
(2) Basic + Test Plan user license enables the user to run and manage the test plans and it is more expensive ($52/month)
(3) Visual Studio subscription that includes the Basic Plan of Azure DevOps
Additional to this:
(4) First 5 users on an Azure DevOps project have the Basic Plan for free
(5) Stakeholders have free access with some limitations on what they can do inside Azure DevOps. They have the ability to access the board, search for items and view them

Now, that we saw what is the user access model of Azure DevOps, and assuming that there are no needs for test plans, we can do the recalculation of cost per team
(1) Dev 1 - Visual Studio Subscription ($45)
(2) Dev 2 - Visual Studio Subscription ($45)
(3) Dev 3 - Visual Studio Subscription ($45)
(4) Dev 4 - Visual Studio Subscription ($45)
(5) BA - Azure DevOps Basic Plan (1 FREE license)
(6) UX - Azure DevOps Basic Plan (2 FREE license)
(7) UX - Azure DevOps Basic Plan (3 FREE license)
(8) DevOps - Azure DevOps Basic Plan (4 FREE license) | use Visual Studio Code
(8) QA - Azure DevOps Basic Plan (5 FREE license)
(9) QA - Azure DevOps Basic Plan ($6)
(10) PM - Azure DevOps Basic Plan ($6)
(11) Scrum Master - Azure DevOps Basic Plan ($6)
(12) Legacy Support - Azure DevOps Basic Plan ($6)

The total cost per month using the right Azure DevOps user plan is $204/month. The price is more than 50% less than it was initially. There is no magic behind it, just using the right license type.
The monthly cost of users that are accessing Azure DevOps using the User Plans goes inside the monthly fee of Azure Subscription attached to your project. In comparison, the cost of Visual Studio Subscriptions goes in another bucket and are billed differently. 

Tips and Tricks
  • You pay the monthly user access to Azure DevOps even for users that don't access it you provided them a license
  • You can give access to users from other organizations, but the cost of the license will be charged from your subscription. There is no mechanism to move the cost the another organization
  • The monthly Azure credits of a VS subscription cannot be used to buy Azure DevOps credit for user access
  • Azure DevOps is billed all the time thought Azure Subscription, which is mandatory to created before creating an Azure DevOps project. 

Comments

Popular posts from this blog

Windows Docker Containers can make WIN32 API calls, use COM and ASP.NET WebForms

After the last post , I received two interesting questions related to Docker and Windows. People were interested if we do Win32 API calls from a Docker container and if there is support for COM. WIN32 Support To test calls to WIN32 API, let’s try to populate SYSTEM_INFO class. [StructLayout(LayoutKind.Sequential)] public struct SYSTEM_INFO { public uint dwOemId; public uint dwPageSize; public uint lpMinimumApplicationAddress; public uint lpMaximumApplicationAddress; public uint dwActiveProcessorMask; public uint dwNumberOfProcessors; public uint dwProcessorType; public uint dwAllocationGranularity; public uint dwProcessorLevel; public uint dwProcessorRevision; } ... [DllImport("kernel32")] static extern void GetSystemInfo(ref SYSTEM_INFO pSI); ... SYSTEM_INFO pSI = new SYSTEM_INFO(

Azure AD and AWS Cognito side-by-side

In the last few weeks, I was involved in multiple opportunities on Microsoft Azure and Amazon, where we had to analyse AWS Cognito, Azure AD and other solutions that are available on the market. I decided to consolidate in one post all features and differences that I identified for both of them that we should need to take into account. Take into account that Azure AD is an identity and access management services well integrated with Microsoft stack. In comparison, AWS Cognito is just a user sign-up, sign-in and access control and nothing more. The focus is not on the main features, is more on small things that can make a difference when you want to decide where we want to store and manage our users.  This information might be useful in the future when we need to decide where we want to keep and manage our users.  Feature Azure AD (B2C, B2C) AWS Cognito Access token lifetime Default 1h – the value is configurable 1h – cannot be modified

ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded

Today blog post will be started with the following error when running DB tests on the CI machine: threw exception: System.InvalidOperationException: The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' registered in the application config file for the ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded. Make sure that the assembly-qualified name is used and that the assembly is available to the running application. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information. at System.Data.Entity.Infrastructure.DependencyResolution.ProviderServicesFactory.GetInstance(String providerTypeName, String providerInvariantName) This error happened only on the Continuous Integration machine. On the devs machines, everything has fine. The classic problem – on my machine it’s working. The CI has the following configuration: TeamCity .NET 4.51 EF 6.0.2 VS2013 It see