<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Christof Gunt</title>
    <description>The latest articles on DEV Community by Christof Gunt (@gunterk).</description>
    <link>https://dev.to/gunterk</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4083721%2F7487b986-4c83-46bd-9d7d-b5a8a08bca10.png</url>
      <title>DEV Community: Christof Gunt</title>
      <link>https://dev.to/gunterk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gunterk"/>
    <language>en</language>
    <item>
      <title>The Microsoft 365 License Audit That Happens After Renewal Is Already Late</title>
      <dc:creator>Christof Gunt</dc:creator>
      <pubDate>Wed, 19 Aug 2026 13:06:46 +0000</pubDate>
      <link>https://dev.to/gunterk/the-microsoft-365-license-audit-that-happens-after-renewal-is-already-late-4k1b</link>
      <guid>https://dev.to/gunterk/the-microsoft-365-license-audit-that-happens-after-renewal-is-already-late-4k1b</guid>
      <description>&lt;p&gt;Microsoft 365 administrators are good at finding licensing problems.&lt;/p&gt;

&lt;p&gt;They can identify inactive accounts, unassigned seats, conflicting service plans and users with overlapping assignments. The problem is that many organizations perform this work immediately after receiving a renewal invoice.&lt;/p&gt;

&lt;p&gt;At that point, the technical finding may be correct and the financial opportunity may already be locked into another term.&lt;/p&gt;

&lt;p&gt;Under Microsoft’s new commerce model, subscription timing is part of license architecture. A useful audit must connect tenant data with renewal data before anyone changes a group or removes a license.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three datasets you need
&lt;/h2&gt;

&lt;p&gt;Do not begin with one enormous report. Start with three small datasets that answer different questions.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Tenant inventory
&lt;/h3&gt;

&lt;p&gt;This shows which SKUs exist and how many units are enabled and consumed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Connect-MgGraph&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Scopes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Organization.Read.All"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"User.Read.All"&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nv"&gt;$skus&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Get-MgSubscribedSku&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-All&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Select-Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nx"&gt;SkuId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;SkuPartNumber&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;ConsumedUnits&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;@{&lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'EnabledUnits'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;Expression&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="bp"&gt;$_&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;PrepaidUnits&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Enabled&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nv"&gt;$skus&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Export-Csv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\TenantSkuInventory.csv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-NoTypeInformation&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Assignment inventory
&lt;/h3&gt;

&lt;p&gt;This shows who holds licenses and whether the account is enabled.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$users&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Get-MgUser&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-All&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Property&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nx"&gt;DisplayName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;UserPrincipalName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;AccountEnabled&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;AssignedLicenses&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nv"&gt;$assignments&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;foreach&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$users&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="kr"&gt;foreach&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$license&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AssignedLicenses&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;PSCustomObject&lt;/span&gt;&lt;span class="p"&gt;]@{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nx"&gt;DisplayName&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DisplayName&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nx"&gt;UserPrincipalName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;UserPrincipalName&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nx"&gt;AccountEnabled&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AccountEnabled&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nx"&gt;SkuId&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$license&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SkuId&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nv"&gt;$assignments&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Export-Csv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\UserLicenseAssignments.csv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-NoTypeInformation&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Commercial calendar
&lt;/h3&gt;

&lt;p&gt;This is the dataset most technical audits omit.&lt;/p&gt;

&lt;p&gt;For every subscription, record:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;renewal date;&lt;/li&gt;
&lt;li&gt;commitment term;&lt;/li&gt;
&lt;li&gt;billing frequency;&lt;/li&gt;
&lt;li&gt;current quantity;&lt;/li&gt;
&lt;li&gt;auto-renew status;&lt;/li&gt;
&lt;li&gt;scheduled change, if any;&lt;/li&gt;
&lt;li&gt;provider or purchasing channel.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Microsoft Graph directory data alone does not give you the complete commercial picture. The calendar may need information from Partner Center, the Microsoft 365 admin center, your provider or procurement records.&lt;/p&gt;

&lt;p&gt;That is fine. The goal is not to force everything through one API. The goal is to make the decision before the deadline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why renewal timing changes the result
&lt;/h2&gt;

&lt;p&gt;Suppose the audit finds 80 seats that the organization no longer needs.&lt;/p&gt;

&lt;p&gt;Technically, administrators can remove assignments. Commercially, the organization may still be committed to the purchased quantity until the next eligible reduction point.&lt;/p&gt;

&lt;p&gt;Microsoft documents a seven-day cancellation window for new commerce license-based subscriptions at the beginning of a term. Quantity reductions are similarly limited outside the applicable window and can be scheduled for renewal.&lt;/p&gt;

&lt;p&gt;This creates three distinct dates:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The date the unnecessary assignment is discovered.&lt;/li&gt;
&lt;li&gt;The date access can safely be changed.&lt;/li&gt;
&lt;li&gt;The date the purchased quantity can be reduced.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Those dates are not automatically the same.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build a renewal queue
&lt;/h2&gt;

&lt;p&gt;Once you have the commercial calendar, create a queue ordered by the next actionable date.&lt;/p&gt;

&lt;p&gt;Each entry should contain the subscription name, renewal date, current quantity, proposed quantity and review status. For example, a Microsoft 365 E3 subscription could remain under role validation, an F3 reduction could require manager confirmation, and a Power BI Pro reduction could already have complete usage evidence.&lt;/p&gt;

&lt;p&gt;The useful part is the operating model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;start the review well before renewal;&lt;/li&gt;
&lt;li&gt;freeze the proposed quantity after business validation;&lt;/li&gt;
&lt;li&gt;schedule the commercial change;&lt;/li&gt;
&lt;li&gt;coordinate technical assignments separately;&lt;/li&gt;
&lt;li&gt;verify both billing and user access afterward.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Do not use last sign-in as a delete button
&lt;/h2&gt;

&lt;p&gt;Sign-in activity is evidence, not a decision.&lt;/p&gt;

&lt;p&gt;An account with no recent interactive sign-in might belong to a person on leave, an integration, a shared operational process or a workload with different activity signals. Before removing access, combine directory data with HR status, application ownership and manager confirmation.&lt;/p&gt;

&lt;p&gt;The audit should classify findings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;safe to remove;&lt;/li&gt;
&lt;li&gt;safe to downgrade;&lt;/li&gt;
&lt;li&gt;requires business confirmation;&lt;/li&gt;
&lt;li&gt;technical dependency present;&lt;/li&gt;
&lt;li&gt;commercially committed until renewal;&lt;/li&gt;
&lt;li&gt;exception approved.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is slower than deleting every inactive account. It is also much less likely to cause an outage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep assignment changes separate from purchasing changes
&lt;/h2&gt;

&lt;p&gt;This distinction prevents many avoidable mistakes.&lt;/p&gt;

&lt;p&gt;Removing a user from a licensing group changes their entitlement. It does not automatically reduce the number of seats purchased from Microsoft or a CSP.&lt;/p&gt;

&lt;p&gt;Reducing a subscription quantity changes commercial capacity. It does not automatically redesign your Entra ID groups or validate that remaining users have the right service plans.&lt;/p&gt;

&lt;p&gt;Treat them as two linked workstreams. The technical workstream covers users, groups and service plans. The commercial workstream covers quantities, terms and renewal instructions. Once both are complete, validate user access, licensing errors, the invoice and the audit record.&lt;/p&gt;

&lt;p&gt;One owner can coordinate the process, but the steps should remain explicit.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical review sequence
&lt;/h2&gt;

&lt;p&gt;For teams building this process for the first time, use the following order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Export subscriptions and assignments.&lt;/li&gt;
&lt;li&gt;Add renewal and commitment data.&lt;/li&gt;
&lt;li&gt;Identify unassigned capacity and inactive accounts.&lt;/li&gt;
&lt;li&gt;Map active users to real service requirements.&lt;/li&gt;
&lt;li&gt;Check group-based and direct assignment paths.&lt;/li&gt;
&lt;li&gt;Validate dependencies and exceptions.&lt;/li&gt;
&lt;li&gt;Approve target quantities.&lt;/li&gt;
&lt;li&gt;Schedule commercial changes.&lt;/li&gt;
&lt;li&gt;Apply technical changes in a controlled window.&lt;/li&gt;
&lt;li&gt;Verify access, licensing errors and the next invoice.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This &lt;a href="https://www.axeti.com/blog/microsoft-365-price-increase-2026-renewal-checklist" rel="noopener noreferrer"&gt;Microsoft 365 renewal checklist&lt;/a&gt; provides a compact version that procurement, finance and IT can use together.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real output
&lt;/h2&gt;

&lt;p&gt;The output of a license audit should not be a spreadsheet showing that 80 seats look unnecessary.&lt;/p&gt;

&lt;p&gt;It should be an approved statement saying:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;which seats will change;&lt;/li&gt;
&lt;li&gt;why the change is safe;&lt;/li&gt;
&lt;li&gt;who owns the decision;&lt;/li&gt;
&lt;li&gt;when access will change;&lt;/li&gt;
&lt;li&gt;when the financial reduction becomes effective;&lt;/li&gt;
&lt;li&gt;how the result will be verified.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the difference between discovering waste and actually removing it.&lt;/p&gt;

</description>
      <category>microsoft365</category>
      <category>powershell</category>
      <category>cloud</category>
      <category>finops</category>
    </item>
    <item>
      <title>The Microsoft 365 License You Buy Is Not the Cost You Pay</title>
      <dc:creator>Christof Gunt</dc:creator>
      <pubDate>Tue, 18 Aug 2026 17:51:38 +0000</pubDate>
      <link>https://dev.to/gunterk/the-microsoft-365-license-you-buy-is-not-the-cost-you-pay-3nnd</link>
      <guid>https://dev.to/gunterk/the-microsoft-365-license-you-buy-is-not-the-cost-you-pay-3nnd</guid>
      <description>&lt;p&gt;Microsoft 365 licensing often looks simple: choose a plan, multiply the price by the number of users, and approve the invoice.&lt;br&gt;
In practice, that number rarely represents the real cost.&lt;br&gt;
The biggest waste usually does not come from one expensive license. It comes from hundreds of small decisions accumulating inside the tenant.&lt;/p&gt;

&lt;p&gt;The default-license problem&lt;br&gt;
A new employee joins, so someone assigns the standard company package.&lt;/p&gt;

&lt;p&gt;That is reasonable. The problem starts when the same package becomes the default for everyone:&lt;/p&gt;

&lt;p&gt;Office-based employees&lt;br&gt;
Frontline workers&lt;br&gt;
Contractors&lt;br&gt;
Shared-device users&lt;br&gt;
Employees who only need email&lt;/p&gt;

&lt;p&gt;Users who require one specific security feature&lt;br&gt;
They do not necessarily need the same services. Yet many organizations keep most users on E3 or E5 because reviewing individual requirements takes time.&lt;/p&gt;

&lt;p&gt;The difference may look insignificant for one account. Across hundreds or thousands of users, it becomes a serious annual cost.&lt;br&gt;
Licenses survive longer than users&lt;/p&gt;

&lt;p&gt;Offboarding is another common source of waste.&lt;br&gt;
Disabling an account does not automatically mean that every paid subscription associated with it has been removed or reduced. Licenses may remain assigned to inactive users, test accounts, former contractors or accounts retained for administrative reasons.&lt;br&gt;
Nobody intentionally approves this expense. It simply becomes part of the next renewal.&lt;/p&gt;

&lt;p&gt;A useful review should therefore compare:&lt;br&gt;
Active employees&lt;br&gt;
Enabled accounts&lt;br&gt;
Recently active users&lt;br&gt;
Assigned licenses&lt;br&gt;
Actual service requirements&lt;/p&gt;

&lt;p&gt;These numbers are often surprisingly different.&lt;br&gt;
Add-ons make comparisons difficult.&lt;br&gt;
Two Microsoft 365 offers may use the same base product name and still have very different total costs.&lt;/p&gt;

&lt;p&gt;Teams Phone, Copilot, security products, compliance features and other add-ons can significantly change the annual cost per user. Billing frequency, commitment period, currency and partner conditions matter as well.&lt;/p&gt;

&lt;p&gt;This is why comparing only the headline price is rarely enough.&lt;br&gt;
Before comparing two offers, normalize them:&lt;br&gt;
Use the exact same SKU.&lt;/p&gt;

&lt;p&gt;Confirm whether Teams is included.&lt;br&gt;
Compare the same commitment and billing period.&lt;br&gt;
Include every required add-on.&lt;br&gt;
Use one currency.&lt;/p&gt;

&lt;p&gt;Calculate the complete annual cost.&lt;br&gt;
Otherwise, the cheaper-looking offer may simply contain less.&lt;br&gt;
Start with roles, not product names&lt;br&gt;
The cleanest licensing model begins with a small number of real user profiles.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Knowledge workers&lt;br&gt;
Security-sensitive employees&lt;br&gt;
Frontline workers&lt;br&gt;
Email-only users&lt;br&gt;
Contractors&lt;br&gt;
Shared-device users&lt;/p&gt;

&lt;p&gt;Define what each group actually needs before choosing the corresponding license.&lt;/p&gt;

&lt;p&gt;This is usually more effective than reviewing users one by one, and more accurate than assigning one package to the entire organization.&lt;/p&gt;

&lt;p&gt;Review before the renewal window&lt;br&gt;
The worst time to discover licensing waste is after an annual commitment has renewed.&lt;/p&gt;

&lt;p&gt;A practical review should start early enough to identify inactive accounts, unnecessary add-ons and users assigned to an unsuitable plan. Procurement can then compare equivalent offers using the corrected configuration rather than last year’s invoice.&lt;br&gt;
For a more detailed breakdown of the factors that influence Microsoft licensing prices, this article provides a useful overview:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.axeti.com/blog/what-determines-microsoft-license-pricing" rel="noopener noreferrer"&gt;What Determines Microsoft License Pricing?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The main lesson is straightforward: Microsoft 365 cost management is not primarily about finding one cheaper SKU. It is about maintaining a license structure that still reflects how people actually work.&lt;/p&gt;

&lt;p&gt;That structure changes continuously. The licensing model should change with it.&lt;/p&gt;

</description>
      <category>management</category>
      <category>microsoft</category>
      <category>saas</category>
    </item>
  </channel>
</rss>
