Craig Wright
HomeAboutProjectsHome labMusingsContact
© 2026 Craig Wright
← Musings

27 August 2026

Operational Reporting

A small local tool that turns Microsoft 365 licence data into a number you can take into a renewal meeting.

Operational Reporting

A budget question, not a reporting one

In the charity sector, a licence nobody uses is money that could have gone to the mission.

Every organisation on Microsoft 365 eventually faces the same question: of everyone with a licence, who actually uses the premium features being paid for, and what would right-sizing save? Most answer it by hand, in spreadsheets, once a year before renewal. Operational Reporting is my answer to doing it properly.

From a script to something bigger

The first version was simple. Pull the usage and licensing reports from Microsoft Graph, keep the raw extracts, build a tidy view in a local SQLite database, and put a small dashboard on top. That answers the original question.

The more interesting questions need more than one source. Licence data tells you what someone has. It doesn't tell you their role, their team, or whether they've left. So it grew a plugin-based way to bring other sources in, such as role data from an HR system, all merged into one row per person. That's what makes the rest possible.

A number that changes the conversation

A report listing who has which licence changes nobody's mind. So each person gets scored instead: which premium features they're entitled to, which they actually use, an efficiency score, and an estimated monthly cost of the gap. Everyone lands in a plain category: optimised, underused, a candidate for removal, or inactive.

The hard part wasn't the maths. It was deciding what "using" a feature really means, carefully enough to stand behind the number in a renewal meeting, rather than carefully enough to fill a dashboard.

Where it stands

It runs on a Mac or a Windows laptop as a Blazor app that only listens on the machine it's running on. There's nothing to deploy and nothing exposed to a network, which is the right answer for anything holding people and licence data: nothing leaves the machine it runs on.

Like everything else here, it was built with Claude Code, in under a week. Not long ago, a tool like this would have needed a business case. Now you can just go and find out whether it's useful.