This week The Register reported that the UK's Competition and Markets Authority (CMA) is seeking tougher terms around Microsoft's dominance of business software — the latest move in a long-running fight over how Microsoft 365 is bundled, priced, and licensed against rivals. The Register's own summary is cheeky — "another reason for Donald Trump to hate British regulation" — but if you run a Windows shop, you read that headline differently.
You already know what dominance looks like from the inside: Windows Server, Active Directory or Entra ID, Exchange Online, Teams, Intune, Azure Monitor if you're lucky, SCOM if you inherited it. When the CMA says "dominance," your helpdesk hears "is Outlook down?" forty-seven times in the first hour.
And here's the uncomfortable part: whatever terms regulators negotiate over the next eighteen months, none of it will restart your print spooler, reclaim the disk on your file server, or tell you whether the mail flow problem is your hybrid connector or a Microsoft region on fire. Regulators work in years. Incidents work in minutes.
So this post is about the part you control: detecting problems faster than your users do, and closing the routine ones without a human ever being paged.
Concentration Is an Operational Risk, Not Just a Legal One
When one vendor supplies the operating system, the directory, the mail platform, and the endpoint management, your failure domains stack. A bad day in a Microsoft region isn't "an Exchange problem" — it's authentication, mail, Teams, and file sync degrading simultaneously while your helpdesk absorbs all of it. The last two years haven't been reassuring: the November 2024 frontend change that took down Azure Portal and Microsoft 365 globally; the January 2025 Exchange Online delivery delays; and, on the third-party side, the July 2024 CrowdStrike incident, where one insufficiently validated content update hit the full Windows fleet and put 8.5 million machines on a blue screen. Recovery from that one was manual. Boot into safe mode, delete a file, repeat.
Two lessons there, and both are self-healing lessons:
- You can't rely on the vendor to tell you first. Status pages lag. By the time "we are investigating" appears, your users have already raised thirty tickets — and users only report about a quarter of what they hit anyway. The rest smolders until it's a fire.
- You can't let automation or content changes touch the whole fleet unvalidated. The CrowdStrike incident isn't an anomaly. It's the default outcome of any deployment model that pushes fleet-wide without a canary ring.
Tool sprawl makes all of this worse — and it's frequently a side effect of the exact lock-in regulators are probing. A typical mid-size environment we see:
- Azure Monitor or SCOM covering some servers, nothing covering the printers, switches, and the UPS in the closet
- Intune managing endpoints, but no remediation workflow for the hypervisors, the firewall, or that one flaky app server
- A separate helpdesk — ServiceNow, Jira Service Management, Freshservice, or a shared mailbox optimistically named tickets@
- Someone's browser tab watching Microsoft's status page
- Tribal knowledge: "Dave knows the ERP app pool on APP01 needs a restart when it throws a 503"
Nothing shares context. An alert doesn't create a ticket. A ticket doesn't show the server's CPU history. Patch compliance lives in a different console from the disk alerts that explain why the patch failed. The tech working the incident has five tabs open and is guessing.
What that costs, concretely:
- Time-to-know: 10–20 minutes from symptom to acknowledgment when users are the monitoring system — for the minority of issues they bother reporting.
- Time-to-fix: the same routine fixes — service restarts, disk cleanup, spooler clears — performed manually, one server at a time, at 2 AM, by whoever was asleep.
- Ticket volume: an Exchange Online outage at a 1,000-seat organization easily generates 150–400 tickets in the first hour, most of them saying the same thing.
- SLA reporting fiction: the helpdesk says average resolution was 45 minutes; monitoring says the service was down three hours. Both are "correct." Neither can be proven, because the data lives in separate systems.
- Burnout: nothing hollows out a NOC team faster than getting paged for problems a script could have closed.
Why do the gaps exist? Because these tools were bought, not designed, together. Azure Monitor assumes your estate lives in Azure (it usually doesn't). Intune manages endpoints but doesn't heal your network gear. The helpdesk was chosen on a different budget line two years before the monitoring tool. Integration, where it exists, is a webhook and a JSON mapping nobody has maintained since 2022. So detection and resolution stay separate systems, and the last mile — actually fixing the thing — stays manual.
That last mile is exactly what self-healing automation is for. And it doesn't require waiting on the CMA, Microsoft, or anyone else's timeline.
How AlertMonitor Closes the Loop
AlertMonitor's premise is simple: detection and resolution should be the same system. Monitoring, RMM, helpdesk, patching, network topology, and alerting live in one product, with automation wired between the alert and the fix.
1. Runbooks attached to alert conditions — remediation before the page. When free space on FS01 crosses 10%, AlertMonitor doesn't just notify. It executes the attached runbook — clear temp and log files older than seven days, rotate logs, re-check the condition — and only escalates to a human if the runbook fails or the threshold stays breached. Same pattern for a stopped service, a stuck print queue, a saturated IIS app pool. Across our deployments this routinely closes 30–50% of alert volume with zero human touch. The pages that do fire are the ones that deserve a human.
2. Canary validation for every rollout. Any script, agent update, or configuration push can be staged to a test ring — a handful of representative endpoints — and validated against health checks before it touches the fleet. This is the CrowdStrike lesson institutionalized: automation is good; unvalidated fleet-wide automation is how one bad Tuesday becomes a global incident. If the canary group fails, the rollout halts and you get an alert — not 8.5 million blue screens.
3. The helpdesk is not a separate system. Every alert, automated action, and remediation result becomes ticket context automatically. When a user reports "Outlook is down," the tech opening the ticket already sees the mail flow probe results, the dependency map, whether the hybrid connector host is healthy, and which automated actions have already run. "Is it us or Microsoft?" gets answered in thirty seconds with evidence instead of thirty minutes with guesses.
4. Patch management that talks to monitoring. Missing KBs, pending reboots, and failed installs surface next to the disk alerts and service errors they cause. Update rings deploy pilot-first through the same canary validation — so the update that breaks printing on Tuesday gets caught on three pilot machines, not the whole fleet.
The workflow difference, concretely. Old way: disk fills on the ERP database server → nothing notices until the app throws errors → six users call → a tech RDPs in, finds the disk, deletes logs by hand, restarts the service → 90-minute MTTR, no record of what was done, and it happens again next week. AlertMonitor way: disk hits threshold → runbook clears temp and archives logs → service re-checked → condition clears → ticket auto-created with the full timeline attached. Total human involvement: reading the summary. MTTR: four minutes.
Multiply that across the ten most common incident types in your environment and you've reclaimed entire technician-days per month — and your SLA report finally has one source of truth.
Practical Steps You Can Take Today
Step 1 — Map your concentration risk. Write down which business functions die if Microsoft does: authentication, mail, files, voice, MDM. For each one, note who or what detects the failure and how fast. Anything where detection is "a user will tell us" is priority one.
Step 2 — Build runbooks for your top 10 recurring incidents. Pull last quarter's tickets, count the repeats, script them. The classics:
Self-healing service restart — the pattern most runbooks follow (detect, remediate, verify, log):
$svc = Get-Service -Name "Spooler"
if ($svc.Status -ne "Running") {
Start-Service -Name "Spooler"
"Spooler was $($svc.Status) - restart executed $(Get-Date -Format s)" |
Out-File "C:\Logs\selfheal.log" -Append
}
Disk reclamation on the file or database server, before anyone gets paged:
$before = (Get-PSDrive C).Free
Get-ChildItem "C:\Windows\Temp", "D:\Logs" -Recurse -File -ErrorAction SilentlyContinue |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-7) } |
Remove-Item -Force -ErrorAction SilentlyContinue
"Reclaimed {0:N0} MB" -f (((Get-PSDrive C).Free - $before) / 1MB)
The print server special every MSP knows by heart:
Stop-Service -Name Spooler -Force
Remove-Item "$env:SystemRoot\System32\spool\PRINTERS\*" -Force -ErrorAction SilentlyContinue
Start-Service -Name Spooler
Same pattern on the Linux half of the estate, two lines at a time:
systemctl is-active --quiet nginx || systemctl restart nginx
find /var/log/myapp -name "*.log" -mtime +7 -delete
In AlertMonitor, each of these attaches to the matching alert condition with a threshold, an execution window, and an escalation path that only fires if the script reports failure.
Step 3 — Check patch compliance before you trust the fleet. A quick pending-reboot sweep tells you how far reality has drifted from the patch report — and pending reboots are why "installed" updates mysteriously aren't active:
$servers = "FS01", "DB01", "APP01", "RDG01"
$rebootKeys = @(
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired",
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending"
)
foreach ($s in $servers) {
$pending = Invoke-Command -ComputerName $s -ScriptBlock {
($using:rebootKeys | Where-Object { Test-Path $_ }).Count -gt 0
} -ErrorAction SilentlyContinue
[PSCustomObject]@{ Server = $s; PendingReboot = $pending }
}
Step 4 — Build canary rings for everything that deploys. Pilot group of three to five percent of endpoints, 24 hours of health checks, then the fleet. In AlertMonitor, validation attaches to the rollout itself, so a fleet push physically cannot start until the canary group passes.
Step 5 — Wire every automated action to an auditable ticket. Self-healing without an audit trail is how you lose track of what your own automation did. Each runbook execution attaches to an incident record automatically — timestamps, actions, before/after state — which is also exactly what you want when a client or an auditor asks.
Step 6 — Monitor the dependency, not the vendor. Don't watch Microsoft's status page; probe your own critical path. An SMTP check against your mail relay every 60 seconds, an auth endpoint check, a DNS resolution check. When a Microsoft region falls over, you'll know within one probe cycle, and you'll know exactly which of your services are collateral damage — with the evidence already attached to the incident.
The Bottom Line
The CMA is right that too much concentration in business software creates risk. They're thinking about pricing and competition risk; IT teams live with the availability risk every day. You can't negotiate Microsoft's licensing terms, and you can't fix their regions. You can make sure that when the stack wobbles, your detection beats your users to it, your routine fixes run themselves, and every change rolls out through a canary instead of a cannon.
That's what self-healing IT means in practice — and it doesn't need to wait for anyone's regulatory verdict.
Related Resources
AlertMonitor Self-Healing & Proactive IT AlertMonitor Platform Overview Book a Demo Self-Healing & Proactive IT Resources
Is your security operations ready?
Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.