Dynamics 365 Health Check and Technical Audit
A fixed-price, independent assessment of your Dynamics 365 Customer Engagement, Power Platform, Business Central or Finance and Operations implementation, including the second opinion buyers ask for when they no longer trust their current partner. We audit, hand you a prioritized remediation roadmap, and can do the cleanup and governance work afterwards if you want the fix rather than only the diagnosis. No sales pitch at the end.
Our Dynamics 365 Health Check is a fixed-scope, fixed-price assessment and technical audit of an existing Dynamics 365 Customer Engagement, Power Platform, Business Central or Finance and Operations implementation, and the independent second opinion buyers ask for when they no longer trust the partner who built it. Already live? We can audit your existing project. You get a solution and customization inventory, a map of the plug-ins, flows, extensions and integrations, data-quality findings, a security review, a prioritized remediation backlog and a salvage-or-rebuild recommendation, each finding backed by evidence. On Business Central and Finance and Operations it adds upgrade readiness and a stabilisation plan. There is no sales pitch at the end.
Behind those deliverables we audit technical health, customization quality, data integrity, security posture, and alignment with business processes to identify risks, waste, and improvement opportunities, and the prioritized action plan covers optimization, cleanup, and roadmap steps. Where you want the cleanup executed rather than only documented, we also run Power Apps audit and cleanup as a delivery engagement: orphaned apps and unused flows retired safely, security roles and Dataverse sprawl consolidated, licenses rightsized, the Center of Excellence Starter Kit deployed properly, and a governance framework of written policies, an approval workflow, and an environment strategy implemented so the sprawl does not return. It is ideal before a major upgrade or a Dynamics 365 Sales remediation, post-implementation, or when performance is declining. Solzet is a Microsoft Dynamics 365 and Power Platform consultancy headquartered in Yerevan, Armenia, running health checks across Dynamics 365 Sales, Customer Service, Field Service, the Power Platform, Business Central and Finance and Operations for clients and partners across Europe, including Germany, and the US, either directly or on a white-label basis for other Microsoft partners.
A health check is an assessment, not a sales pitch. The point is an independent, evidence-based read on the state of your Dynamics 365, Power Platform or ERP system, whether or not any further work follows. We did not build your system, the fixed price does not change with what we find, and the walkthrough at the end delivers findings rather than a proposal. You get a clear diagnosis and a prioritized action plan you can hand to any partner or run internally. Where we find something sound, we say so; where we find risk or waste, we show the evidence and what it would take to put it right.
When should you run a Dynamics 365 health check?
Before a major upgrade or wave release
You are about to move to a new release, consolidate environments, or take on a significant change, and you want to know what will break, what is deprecated, and what to clean up first so the upgrade is not carrying old problems forward.
Post-implementation, once the dust has settled
The project went live and the team has been using it for a while. Before you scale it further you want an independent check that the build is secure, performant, and configured the way it should be, rather than assuming the go live left it in good shape.
System performance is declining
Forms load slowly, saves lag, flows time out, or reports crawl, and it is getting worse as data and usage grow. You want to know whether the cause is data volume, customization, integration design, or configuration before it turns into an outage.
You inherited a system nobody can fully explain
A previous team or partner built it, documentation is thin, and you are not sure what customizations exist or which are safe to touch. A health check maps what is actually there so you can own it with confidence.
Security or licensing feels unclear
You are not sure whether security roles grant more than they should, whether users are on the right licenses, or whether the environment carries risk you cannot see. An audit surfaces the exposure and the waste in one pass.
You are choosing whether to optimize or rebuild
Something is not working and you need an honest read on whether the current design can be tuned and extended or whether part of it should be reworked, before you commit budget in either direction.
What does the Dynamics 365 technical audit cover?
Six dimensions across your Dynamics 365 Customer Engagement or Power Platform environment, and the same six on Business Central and Finance and Operations with the ERP checks in the next section. We agree the exact scope and the apps and environments included before we start, so the fixed price is clear.
Configuration and customization
The Dataverse data model, forms and views, business rules, business process flows, model driven and canvas apps, plug-ins, custom APIs, JavaScript, and PowerApps Component Framework controls. We review how the system is built against how it is meant to be used, and flag customizations that are unsupported, redundant, or fragile.
Security and access
Security roles, teams, business units, field-level security, and sharing. We check whether access matches what people actually need, surface roles that grant more than they should, and highlight the gaps and over-permissions that create risk or audit findings.
Performance and scalability
Form and view load times, slow saves, plug-in and flow execution, query and rollup design, and how the system behaves as data and users grow. We identify the customizations, integrations, and data patterns that are dragging performance down and will get worse at scale.
Data quality and hygiene
Duplicates, incomplete and stale records, inconsistent picklists and reference data, orphaned rows, and storage that is quietly filling with data nobody uses. We assess the state of the data and what cleanup would return the most value.
Business-process alignment
Whether the system still fits how the business actually works, or whether people are routing around it into spreadsheets and email. We compare the configured processes against the real ones and show where the platform and the business have drifted apart.
Integrations, environments, and ALM
Integrations and connectors, environment strategy, solution layering, and how changes are built and released. We check whether the way the system is managed lets you make a change safely, or whether every deployment is a risk.
What does an ERP audit check on Business Central and Finance and Operations?
Already live on Business Central or Finance and Operations? Solzet can audit your existing project and give you a stabilisation plan. The six dimensions above still apply; these are the ERP specifics we read on top of them, and they feed the same evidence-backed backlog.
Business Central
For a Business Central implementation, online or on-premises, the audit reads the extensions, the data and the integrations around the standard product, and checks how ready the system is for the next update.
Extensions and AL code
Every per-tenant and third-party extension, its publisher and version, and the AL code inside the ones you own: event subscribers instead of modified objects, permission sets, error handling, and code nobody can trace to a requirement. AL is written in Visual Studio Code, so we also check that the source and the build route are in your hands.
Upgrade readiness
What blocks the next Business Central update or the move online: customizations carried over from Dynamics NAV, dependencies on obsolete objects, and the on-premises version position. Business Central on-premises version 25 or later migrates directly to online, while versions 15 to 24 upgrade to 25 first.
Data
Customers, vendors and items duplicated or half filled, posting groups and dimensions that no longer match the chart of accounts, open entries that should have been closed, and migrated balances reconciled against the source system.
Integrations
The APIs and web services in use, the Dataverse connection and its synchronization direction where Business Central talks to Dynamics 365 Sales, virtual tables, and the job queue entries that fail quietly at night.
Finance and Operations
For Dynamics 365 Finance, Supply Chain Management and the rest of the finance and operations apps, the audit reads the X++ layer, the integration with Customer Engagement, the lifecycle set-up and the performance of the processes that matter at month end.
X++ customizations
The models and extensions built in X++, how much of the standard product they replace rather than extend, code quality and test coverage, and the Visual Studio and source control route from a developer machine to production.
Dual-write and virtual entities
Where Finance and Operations meets Dynamics 365 Customer Engagement: the dual-write table maps and their initial sync, conflicts and errors in the near-real-time sync through Dataverse, and whether virtual entities would serve a read-only need better than copied data.
Lifecycle and environments
The environment set-up, how Microsoft updates are tested before they reach production, and whether the project is managed in Lifecycle Services or the Power Platform admin center, where new cloud implementation projects have been created since 16 February 2026.
Performance
Batch jobs that collide, slow forms and reports traced to custom code or missing indexes, integration volumes at peak, and the month end and master planning runs that the business has learned to wait for.
Independent AL code review: what a Business Central extension code audit checks
An independent AL code audit reads the extensions you own the way a reviewer would before accepting them: upgradeability (event subscribers against modified or copied base objects), performance (FlowFields, SetLoadFields, locking), permission sets, telemetry, test coverage, AppSourceCop and CodeCop findings, dependency hygiene and the upgrade path. You can order it on its own as a Business Central extension code review, or as part of the wider audit above. The deliverable is a findings report with each finding prioritised and tied to the code, plus a stabilisation plan.
Upgradeability
Whether your logic hooks into the standard product through event subscribers and table or page extensions, or lives in modified or copied base objects that break on every update. We list dependencies on objects and procedures marked obsolete, the pending removals behind them, and the code that will stop compiling at the next major release.
Performance
Reads that fetch whole records where SetLoadFields would load a few fields, FlowFields calculated with CalcFields inside loops, filters on fields without a key, and long transactions that lock ledger and posting tables while users wait. We trace each finding to the code path and the process that triggers it.
Permissions
Whether every extension ships permission sets that cover its own objects, whether users run on SUPER because nobody built the right sets, and whether indirect permissions are used where a codeunit posts on the user's behalf.
Telemetry
Whether the extension is connected to Application Insights, whether it emits its own custom telemetry for the operations that matter, and whether anyone reads the long-running query, lock timeout and failed job queue signals that Business Central already sends.
Tests
Which processes are covered by test codeunits, whether those tests run in the build pipeline, and which risky code paths, usually posting and integrations, have no automated test at all.
Analyzer findings
A clean compile with CodeCop, UICop and either AppSourceCop for marketplace apps or PerTenantExtensionCop for per-tenant extensions. Warnings that were suppressed in the ruleset are reviewed one by one rather than accepted.
Dependency and version hygiene
The app.json of every extension: declared dependencies, the platform and application versions targeted, object ID ranges and affixes, version numbering, and whether the source in the repository matches what is actually installed in production.
Upgrade path
What has to change before the next Business Central release, before the move from on-premises to online, or before a third-party app your code depends on is updated, set out in the order the work has to happen.
Worked example: triaging a backlog of old NAV customisations
A common starting point: a company moved from Dynamics NAV to Business Central, its customisations were converted rather than redesigned, and every update now needs a developer. The review triages that backlog in five steps.
- Inventory: export every customized object from the old Dynamics NAV database and every extension now installed, and match each to the requirement it was built for. Objects nobody can tie to a requirement are flagged rather than carried forward.
- Classify against standard: for each customization, check whether current Business Central already does the job. Typical candidates are approval workflows, document layouts, dimensions and bank import routines that NAV once needed custom code for.
- Retire, rebuild or keep: retire what standard now covers, rebuild as event-based AL extensions what is still needed, and keep for now only what is stable and blocks nothing. Each line in the backlog gets one of the three decisions.
- Prioritise by risk: posting logic, integrations and anything that blocks the next update come first; reports and screen changes come last.
- Plan the stabilisation: the result is a findings report with priorities and a stabilisation plan you can execute with your own team, with Solzet, or with any other supplier.
The fixes themselves are AL work, covered on our Business Central AL extension development page. If the system is still on NAV, the NAV to Business Central migration checklist covers the move itself. If the trigger is an auditor raising control findings in the finance system, start with the system-side plan for audit findings.
The implementation side of each is on our Dynamics 365 Business Central and Dynamics 365 Finance and Operations pages, and where the ERP has to stay in step with a CRM, the Customer Engagement side is on our Dynamics 365 consulting page. Every other Solzet service is listed on the services page.
Can you give an independent assessment and second opinion on our system?
A large share of the health checks we are asked for start the same way: someone has stopped believing the answers they are getting about their own system. The partner who built it says performance is normal for the data volume, the customizations are all necessary, and the next phase will fix the rest. Maybe that is true. You cannot tell, because the only people who can read the system are the people whose work is being questioned, and every finding they might report is also an admission against themselves.
That is the situation this service is built for. Solzet acts as the independent assessment firm: a second opinion on a Dynamics 365 Customer Engagement or Power Platform environment from a team with no involvement in how it got that way. We are not auditing our own work, we are not positioning for a rebuild, and we are not going to hand you a diagnosis whose only possible treatment is us.
You do not need to have fallen out with anyone to want this. Boards ask for it before signing the next phase, new IT leaders ask for it in their first quarter, and plenty of internal teams ask for it to confirm in writing what they already suspect. It is equally often used to settle an argument in the incumbent's favour.
What independence actually means here
We did not build it, so we have nothing to defend
Asking the team who built a system to assess that system puts them in an impossible position, because every finding is also an admission. We were not in the room for any of the decisions, so we have no design to justify, no estimate to protect, and no reason to describe a shortcut as a deliberate choice. That is the whole reason a second opinion is worth paying for.
The fee does not move with what we find
The assessment is a fixed price agreed before we start, and it does not change if we find one problem or forty. Nothing about the report earns us more work by being alarming, and nothing about it earns us less by being reassuring. An audit whose price or follow-on depends on the severity of its own findings is not an audit.
We say plainly when your partner is right
Some of the assessments we run end with a build that is broadly sound and a delivery team doing reasonable work under bad constraints, and we write that down as clearly as we write a critical finding. If the real problem is scope, budget, or an internal decision rather than the partner, you should hear that from someone with no stake in the answer.
Every finding carries its evidence
We do not ask you to take a judgement on trust. Each finding names the solution component, the security role, the query, the flow run, the trace entry, or the record count it rests on, so your own administrator or your current partner can reproduce it. That is what makes the report survive a difficult conversation rather than turning into one opinion against another.
The report is yours, and it is written for someone else to use
You own the report and the action plan outright and you can send them to your incumbent, to a rival partner, to your board, or to an internal team, without asking us. We deliberately write them to be actionable by a team that is not us: named components, named risks, and named remediation steps rather than the vague findings that only make sense if you also buy the follow-on programme.
There is no pitch at the end
The walkthrough at the end of the assessment covers the findings, the evidence, and the priorities, and then it stops. We do not close it with a proposal, and we do not follow it with a sales sequence. If you want us to quote for any of the remediation you have to ask, and plenty of clients never do, which is the arrangement we intend.
The evidence behind each verdict
An impartial opinion is only worth having if you can check it. The scope above says what we look at; this says what we read for each of the five assessment dimensions and what conclusion comes out of it, so you can see where every judgement in the report came from and hand the same evidence to anyone else.
Technical health
Evidence we read: Environment and solution inventory, platform and release position against what is deprecated, form and view load timings taken from the browser, plug-in and flow execution times from the trace log and run history, failed run rates on the integrations, and capacity consumption per environment.
The verdict it produces: Whether the system is stable and fast enough for what you are about to ask of it, and which specific measured cost is responsible where it is not.
Customization quality
Evidence we read: The solution layers and where unmanaged layers sit over managed ones, plug-in and custom API code, form JavaScript, PowerApps Component Framework and canvas components, and the deployment path a change actually travels from a developer to production.
The verdict it produces: Whether the build is supportable by another team, which customizations reimplement something the platform already does, and which ones are the reason every change breaks something else.
Data integrity
Evidence we read: Duplicate and near-duplicate rates in the tables the business depends on, completeness of the columns that decisions are made from, stale and orphaned records, reference data and picklist consistency, integration reconciliation against the source, and audit and retention settings.
The verdict it produces: Whether the numbers coming out of the system can be relied on, and where the data is quietly wrong rather than visibly missing, which is the failure mode that damages trust fastest.
Security posture
Evidence we read: Security roles, teams, business units, field-level security, sharing, and access team usage, read against who actually needs what; service accounts and connections bound to named individuals; DLP policy coverage; and administrative access to the tenant and the environments.
The verdict it produces: Where access is broader than the business intends, where a single person is a point of failure or a point of exposure, and what would show up in an audit or an incident before you get to it first.
Business process alignment
Evidence we read: The configured processes and business process flows compared against how the work is really done, the spreadsheets and mailboxes people have moved back to, adoption and usage by team, and the change requests that keep arriving in different words for the same underlying gap.
The verdict it produces: Whether the system supports the business it was bought for, or whether the technical findings are downstream of a design that never matched the process.
The prioritized remediation roadmap
Findings on their own are just a longer list of things to worry about. The five dimensions converge into one sequenced remediation roadmap, because a report that rates thirty items critical has not actually prioritized anything. Each item carries a severity, a rough effort in days, the dimension it came from, the business consequence of leaving it alone, and a suggested owner, and the items are then ordered into what to fix now, what to fix next, and what to plan for.
The ordering is deliberate rather than alphabetical. Anything that is a live security or data integrity exposure comes first. Then the technical health items that are actively costing users time every day. Then the customization quality work that has to happen before anything else can be changed safely, because there is no point scheduling six improvements into a build where every release breaks something. Process alignment items come last in sequence and often first in importance, since they usually need a business decision rather than an engineer.
The roadmap also states plainly what we would not do. Where an item is genuinely not worth fixing, or where the honest recommendation is to leave a working thing alone, we say so and give the reason. That is easier to write when nobody is quoting for the result.
Fixed price, fixed scope, and no obligation after it
The assessment is quoted as a fixed price against an agreed list of environments and apps, with a fixed end date, before any work begins. It runs on read access, changes nothing, and does not interrupt your users or your current partner's delivery. You are buying a deliverable with a known cost, not opening a time and materials engagement that grows in proportion to what it discovers.
When it is done, you have the report, the evidence, and the roadmap, and there is no next step you are committed to. Take it to your incumbent and ask them to work through it. Run it with your internal team. Put it out to another partner. The assessment is the product, and it is priced to stand on its own.
When the second opinion says the project is failing, not underperforming
A health check assumes there is a working system worth improving. Occasionally the assessment finds something else: a build that cannot be made safe to change, an implementation that has stalled rather than slowed, or a relationship where the honest recommendation is to move the work somewhere else. That is a different problem with a different shape, and we keep it on separate pages rather than blurring the two.
If you want to understand what recovery involves before you commit to anything, our guide to rescuing a failed or stalled Dynamics 365 implementation walks through the root cause families, how the diagnosis is done, and how delivery is put back on track. Where you have already reached the decision and need someone to assume control of the environment, our Dynamics 365 project rescue and takeover service covers the emergency takeover, the stabilization plan, and the fixed scope reset that follows it.
Running the assessment first is the point. It means a decision that large gets made on evidence rather than on frustration, and if the finding is that the current build is recoverable and the current partner should keep it, that is a perfectly good outcome and we will write it down for you.
What must any Dynamics 365 assessment hand you before anyone fixes anything?
This checklist is vendor neutral. It is what a time-boxed assessment of an inherited Dynamics 365 organization should produce whoever runs it, us included, and it is the standard to hold a provider to before you pay for remediation or a rebuild. Each item says what the deliverable has to contain and the test you can apply when it arrives.
The six deliverables are not a product with a name. They are the minimum evidence a remediation plan has to rest on, and an assessment that cannot produce them has not read the environment.
1. Solution and customization inventory
What it must contain: Every solution in each environment in scope, managed or unmanaged, with its publisher, version and layering; the custom tables, columns, forms, views, business rules, business process flows, web resources and PCF controls; and the unmanaged changes made directly in production.
Accept it when: The counts reconcile with what your own administrator sees in the environment, and every customization can be traced to a solution or is flagged as untraceable.
2. Plug-in and flow map
What it must contain: Every plug-in assembly and registered step with its table, message, stage and synchronous or asynchronous mode; every Power Automate flow and classic workflow with its trigger, owner and the connection it runs under; custom APIs and integrations; and which of them fire on the same record events.
Accept it when: You can answer "what runs when a user saves an opportunity" from the map alone, and every component tied to a named person or a departed employee is listed.
3. Data-quality findings
What it must contain: Duplicates, completeness of the columns decisions are made from, stale and orphaned records, owners and statuses that contradict the process, reference data consistency, and reconciliation of migrated or integrated data against its source.
Accept it when: Each finding names the table, the rule used to measure it and the result as read on a stated date, so it can be measured again after remediation.
4. Security review
What it must contain: Security roles and their privilege depths on sensitive tables, business units, owner, access and Microsoft Entra group teams, hierarchy settings, column security, direct sharing, broad administrative access, and application users and service accounts.
Accept it when: A register of who can see and export what that a non-administrator can read, with every access broader than the business intends listed by name.
5. Prioritized remediation backlog
What it must contain: One ordered list rather than one per dimension: each item with severity, an effort range, the business consequence of leaving it, dependencies on other items and a suggested owner, plus the items deliberately left alone and why.
Accept it when: Another supplier, or your own team, could price and start the first items from the backlog without going back to the assessor.
6. Salvage or rebuild recommendation
What it must contain: A verdict per area, such as the data model, the custom code, the integrations and each app, on whether to keep and fix, rework, or rebuild, with the evidence behind it and the conditions that would change it.
Accept it when: The recommendation is argued from the findings above rather than from instinct, and a mixed answer (keep most, rebuild one area) is allowed for rather than forced into all or nothing.
Acceptance criteria to put in the contract
- The six deliverables above are named in the statement of work as written artifacts, due by a fixed date, in an editable format you keep, not only as a presentation.
- Every finding cites the component, environment and date it rests on, so your administrator or another partner can reproduce it.
- The assessment runs on read access only, changes nothing in the environment, and the access is removed on a stated date at the end.
- The fee is fixed before work starts and is not linked to the findings, to the size of any remediation, or to awarding the follow-on work.
- You own the report outright and may share it with your incumbent, another partner, your auditors or your board.
- A walkthrough with your team is included, with a defined period afterwards for clarification questions about any finding.
- Scope is listed by environment, app and legal entity, and anything left out, such as a specific integration or a sandbox, is written down by name.
Red flags in a proposal that skips discovery
- A fixed remediation or rebuild price before anyone has had read access to the environment.
- Discovery made only of workshops and interviews, with no reading of the solutions, code, run history or data.
- No named deliverables at the end of discovery, only a findings presentation that leads into the next phase.
- An assessment that is free or discounted only if you also sign the remediation, so the assessor gains from a larger finding.
- A recommendation to rebuild, re-license or adopt an accelerator the supplier sells without a salvage analysis behind it.
- Unnamed or junior assessors, or a request for administrator write access to run what should be a read-only assessment.
- Silence on data quality and security, with discovery framed only as a list of functional gaps.
How to read the sixth deliverable as a decision, including how to cost both routes on the same basis, is in our guide to whether to salvage or rebuild a half-finished Dynamics 365 implementation. Where the assessment shows the project has stalled rather than slowed, our guide to Dynamics 365 rescue services for a failed or stalled implementation covers how delivery is put back on track.
What does a Dynamics 365 Sales remediation look like after an assessment?
An illustrative example, not a client case. It is a generic picture of an inherited Sales environment, with no client, figures or results attached, to show how the six deliverables turn into an ordered piece of remediation work.
The situation
A Dynamics 365 Sales environment inherited from a previous partner. Reps keep the real pipeline in spreadsheets, the forecast does not match what sales leadership hears in pipeline meetings, saving an opportunity is slow, and nobody is sure which customizations are safe to touch.
What the assessment hands over
An inventory showing unmanaged changes edited straight into production on top of a managed solution; a plug-in and flow map showing a synchronous plug-in and two flows all firing on opportunity save; data-quality findings on duplicate accounts and opportunities left open after deals were lost; a security review showing every rep with Organization-level read on accounts; and a business process flow whose mandatory stages do not match how the team actually sells.
How the backlog is ordered
Security first, by moving reps to owner-based access with hierarchy security for managers. Then the opportunity save path: the synchronous plug-in moved to asynchronous logic or rewritten from source, and the overlapping flows consolidated. Then duplicate accounts merged and open opportunities closed against agreed rules, before the forecast is reconfigured. Then the unmanaged layer moved into a solution with a deployment route. The business process flow is redesigned last, with sales leadership, because it needs a decision about the process rather than an engineer.
The salvage or rebuild verdict
A typical verdict for a picture like this is mixed: keep the data model and most of the configuration, rebuild the plug-in from source if the source exists, and rework the process layer. If the plug-in source cannot be found, that one component moves to rebuild, and the recommendation says so.
Dynamics 365 Sales Health Check vor der Sanierung: Was sollte ein Partner für Unternehmen in Deutschland liefern?
Ein unabhängiges Assessment einer übernommenen Dynamics-365-Umgebung sollte, egal von welchem Anbieter, sechs Ergebnisse liefern: ein Inventar aller Lösungen und Anpassungen, eine Übersicht der Plug-ins und Power-Automate-Flows, Befunde zur Datenqualität, eine Prüfung des Sicherheitsmodells, ein priorisiertes Sanierungs-Backlog und eine begründete Empfehlung, welche Teile weiterentwickelt und welche neu aufgebaut werden sollten.
Diese Ergebnisse gehören als Abnahmekriterien in den Vertrag: schriftlich, mit einem nachvollziehbaren Nachweis zu jedem Befund, nur mit Lesezugriff, zu einem festen Preis und Termin und so geschrieben, dass jeder andere Partner damit weiterarbeiten kann. Ein Angebot, das ohne Analyse der Umgebung bereits einen Festpreis für Sanierung oder Neuaufbau nennt, ist ein Warnsignal.
Solzet führt solche Assessments für Dynamics 365 Sales, Customer Service, Field Service, Business Central, Finance and Operations und die Power Platform remote aus Jerewan, Armenien, für Unternehmen in Deutschland und der DACH-Region durch, direkt oder als White-Label-Partner eines Microsoft Partners. Projektsprache ist Englisch, die Arbeitszeiten überschneiden sich täglich mit dem mitteleuropäischen Arbeitstag, und die Zusammenarbeit erfolgt auf Basis eines DSGVO-konformen Auftragsverarbeitungsvertrags.
Can an independent assessment give us an evidence pack to exit or renegotiate with our Dynamics 365 partner?
Yes. An independent assessment is not a sales discovery. It delivers a written technical findings report covering solution layering, customization supportability, data integrity, the security model, integration health, and performance, with every finding rated by business risk and by effort to remediate, and a remediation sequence you can hand to any supplier. It is time-boxed to an agreed scope and end date, performed by senior consultants who read the environment directly, and the report is yours to keep and act on elsewhere. When you are weighing whether to terminate or renegotiate, we structure that same work as an evidence pack.
The situation is usually a CFO or IT director who has stopped accepting the explanation for why the system is late, slow, or unreliable, and who needs facts that will survive a difficult conversation with the partner, the board, and possibly a lawyer. The practical steps of leaving, such as securing admin accounts, exports, and the subscription relationship, are covered in our guide to switching Dynamics 365 partner safely. This section is about the evidence you take into that decision.
What the evidence pack contains
Findings tied to artifacts
Every finding names the thing it rests on: the solution and layer, the plug-in assembly and step, the form script, the flow and its run history, the security role, the query, or the record count, with the environment and the date it was read. Where the platform keeps a record of when something changed, such as solution import history or audit history where auditing was enabled, we cite it. Anyone with the same access can reproduce the finding, including the partner it concerns.
A severity and effort rating on each finding
Each finding is rated by business risk and by the effort to remediate, and classified as a defect, a design choice that could reasonably be argued either way, or a gap in what was asked for. That separation matters in a renegotiation, because a list that treats a questionable design decision as a defect is the first thing the other side will pull apart.
Contracted versus delivered
You provide the statement of work, the requirements, the change requests, and any acceptance or sign-off records. We map each contracted deliverable to what actually exists in the environment and mark it delivered and working, delivered with defects, partially delivered, not found, or present but not traceable to any agreed scope. Where the documents are ambiguous about what was agreed, we mark the item ambiguous rather than choosing a reading for you.
The supportability and handover position
Whether another supplier could take the system on: managed or unmanaged solutions, whether source code for plug-ins, PCF controls, and integrations is in your hands, the state of documentation, and which connections, service accounts, or components depend on accounts or assets the partner controls. This tells you how much bargaining power and how much risk sits on each side of the table.
A remediation sequence any supplier can price
The ordered remediation roadmap with effort ranges, written so the incumbent can price putting it right under the existing contract and another partner can price the same work independently. Two quotes against one neutral scope is usually a better negotiating position than a list of complaints.
What is sound, stated as clearly as what is not
Parts of the build that are well made are recorded as such. A pack that only lists failures reads as advocacy, and advocacy is easy to dismiss. A balanced record is harder to argue with and more useful to whoever supports the system next.
What the audit will not do
- It is not a legal opinion. We do not interpret the legal effect of your contract, advise on termination rights, breach, liability, or remedies, or tell you whether you have a claim. The pack is written so your legal adviser can use the technical facts; the legal conclusions are theirs.
- It is not an expert report prepared for litigation or arbitration. If proceedings are likely, your lawyer should decide how any technical expert is instructed before the work starts.
- It does not quantify financial loss or damages. It rates remediation effort, which is a technical estimate, not a valuation of what the failure cost you.
- It does not negotiate on your behalf or contact your partner unless you ask. If you share the findings with the incumbent, we will answer their technical questions about how a finding can be reproduced.
- It does not attribute fault to individuals. Findings describe the system and the process, never named people.
- It does not come with a replacement pitch. If you decide to leave, choosing who takes over is a separate decision and the fixed fee for the assessment does not change with it.
If the evidence supports leaving and you need someone to assume control of the environment, our Dynamics 365 project rescue and takeover service covers the takeover and stabilization. That is a separate decision with a separate scope, and the pack is written so that any supplier, not only Solzet, can work from it.
How does this assessment compare with a large systems integrator's assessment offer?
Large systems integrators and global Microsoft partners also sell Dynamics 365 assessments, and their offers vary, so the fair comparison is the set of questions to ask of any assessment rather than a claim about a particular firm. The short version: ours is narrower and deeper, covering Dynamics 365 Customer Engagement, Power Platform, Business Central and Finance and Operations, and a larger firm is the better choice in the cases listed in the last row.
| Question to ask | Why it matters | Solzet's answer |
|---|---|---|
| What exactly is in scope? | Large firms often offer assessments across a whole business applications estate, including ERP, data platforms, and organizational change. Wider is not better if your problem sits in one CE environment. | Dynamics 365 Customer Engagement, Power Platform, Business Central and Finance and Operations, against an agreed list of environments and apps: solution layering and extensions, customization supportability, data integrity, security model, integration health, and performance. |
| Who reads the environment? | An assessment led by a sales discovery team or a junior analyst produces interview notes rather than technical findings. | Senior consultants who read the solution, the code, the logs, and the data directly, not only the people describing them. |
| Is it time-boxed, and does the price move? | An assessment that is really the first phase of a programme tends to grow with what it finds. | A fixed price and a fixed end date agreed before work begins, on read access, with no change to the fee whatever the findings. |
| Is the assessor independent of the outcome? | A firm positioned to win the rebuild, or one that shares a commercial relationship with your incumbent, has a stake in the verdict. | We did not build the system, there is no proposal at the end, and the report is written to be executed by any supplier. |
| Who owns the output? | Some assessments are delivered as a presentation that only makes sense alongside the follow-on offer. | A written findings report and remediation sequence that are yours to keep, share with your incumbent, a rival partner, or your board, and act on elsewhere. |
| When is the larger firm the better choice? | Honest fit matters more than winning the assessment. | When you need a multi-workstream programme review across many countries, or when procurement requires a supplier already on an enterprise panel. Business Central, Finance and Operations and the integration between CRM and ERP are part of this assessment, so an ERP in the estate is a reason to include it in the scope. |
How do you diagnose and fix a slow Field Service schedule board?
The schedule board is the most common single performance complaint we are called about, and it is worth a worked example because the usual advice stops at "show fewer records". A board that takes twenty seconds to load, freezes when a dispatcher drags a booking, or times out entirely is almost never one problem. It is a heavy tab configuration sitting on top of synchronous custom code, sitting on top of a booking table nobody has archived. Fixing it in that order is what makes it fast and keeps it fast.
This is the diagnostic we run inside the performance dimension of the health check, in the order that finds the cause fastest. Each step is something your own administrator can run on read access, and most teams find the answer in the first four.
The diagnostic checklist
Time it in the browser before you change anything
Open the board with the browser developer tools on the network tab and reload. You are looking for which call is slow and how slow: the resource retrieval, the booking retrieval, the requirement panel query, or the render that happens after the last response lands. Write the numbers down. If the network calls return in under a second and the page still takes fifteen, the problem is client-side rendering and no amount of server tuning will touch it. Then open a brand new board tab with default settings and time that too. A default tab that is fast tells you the platform is fine and the dispatcher tab is misconfigured, which is the most common outcome and the cheapest to fix.
Count the resources the tab is actually loading
The board renders a row for every bookable resource returned by the tab filter, whether or not that resource has a single booking in the window. Open the tab settings and look at the resource filter: the territory, the resource type, the characteristics, and whether the tab is quietly returning equipment, facilities, pooled resources, crews, and people who left last year alongside the technicians the dispatcher schedules. Dispatch boards that feel unusable are routinely loading several hundred resources so that one person can look at forty. Scope each tab to one dispatcher's real world, keep it in the tens rather than the hundreds, and give each territory or team its own tab instead of building one board that serves everybody badly.
Narrow the date range and the view granularity
The payload is roughly resources multiplied by time slots multiplied by bookings, so the view type on the tab is a multiplier on everything else. An hourly view across a month is the single most expensive combination the board can be asked for, and it is usually a default nobody chose deliberately. Check what the tab opens on, check how many days it spans, and check what the dispatcher genuinely works from, which is very often today and tomorrow. Moving a heavy tab from a monthly hourly view to a daily view is frequently the difference between unusable and instant, and it costs nothing but a settings change.
Check the requirement panel query at the bottom of the board
The unscheduled requirement panel runs its own view query on every board load and refresh, and it is easy to leave pointed at an unfiltered view returning every open requirement in the system. Look at which view the panel uses, how many rows that view returns, what it sorts on, and whether the sort and filter columns are indexed. Replace it with a view scoped to the territory and the statuses that dispatcher works, sorted on an indexed column. Readers who have already narrowed the date range and seen no improvement are usually paying for this query rather than for the board itself.
Audit every plugin and workflow that fires on booking operations
Synchronous plugin steps and real-time workflows registered on the Bookable Resource Booking table run on every create, update, and drag and drop, and steps registered on RetrieveMultiple run on every single board refresh. List the registered steps in the Plugin Registration Tool against the booking, bookable resource, and resource requirement tables, then turn on the Dataverse plugin trace log and read the per-step execution times against a real board refresh. A synchronous step that calls an external service, loops over related records, or runs an unfiltered query is not a background cost here: it is a direct multiplier on every action the dispatcher takes. This is the step that most published advice skips, and it is where the seconds usually are.
Look at what the booking and resource cell templates are pulling in
Booking tooltips, hover cards, and resource cell templates are configurable, and every extra column or related record they display becomes work the board does per card rather than per page. Review the booking template, the resource cell template, and any custom web resources, JavaScript, or embedded controls attached to the board. A tooltip that resolves the account, the primary contact, and the work order product on hover is pleasant to look at and expensive to render across two thousand bookings.
Check the auto-refresh interval and the map
A board tab set to refresh automatically every thirty seconds against a heavy configuration never finishes one load before the next begins, and the dispatcher experiences that as permanent slowness rather than as a refresh. Widen the interval or turn it off on heavy tabs. Then check whether the map is on: plotting every booking and resource location adds geocoding and render work on top of the same data, and dispatchers who never use the map should not be paying for it.
Measure the data volume and the indexes underneath it
Count the booking rows inside the visible window and the total rows on the booking table, including everything closed years ago that nobody has archived. Then check that any custom column used in a board filter, a tab filter, or the requirement panel view has an index behind it. Filtering a multi-million row booking table on an unindexed custom column is a table scan running on every refresh, and it degrades quietly as the table grows, which is exactly why the board was fine last year and is not now.
Rule out the client, the network, and the environment
Reproduce the same tab on a different machine, a different network, and a clean browser profile before concluding the system is at fault. Corporate VPN routing, browser extensions, and underpowered dispatcher hardware all produce a board that is slow for one team and fine for everyone else. At the same time, check whether the environment is hitting service protection limits or capacity pressure from other workloads, because a board is simply the most visible victim of a tenant that is being throttled.
Advanced remediation, from configuration to engineering
The first three of these are configuration and data work you can run yourself. The last three are engineering, and they are the honest answer when the diagnostic shows the board has been asked for something the standard product cannot deliver at your scale.
Split one heavy board into scoped tabs
Most boards are slow because they are trying to be a single view of the whole operation. One tab per territory, team, or shift, each with its own resource filter and its own default view type, gives every dispatcher a board that loads only their world. It is the highest-return change available and it is pure configuration, which is why it comes first.
Move logic off the synchronous path
Where the trace shows synchronous plugins or real-time workflows on booking operations, the fix is to re-engineer them rather than accept them. Anything that does not have to complete before the record is saved moves to an asynchronous step or a queued job, external calls come off the transaction entirely, and per-record loops are rewritten as set-based queries. Real-time workflows on high-volume booking tables are usually better replaced with a properly written plugin than tuned in place.
Archive the booking history and index what you filter on
Closed bookings from previous years do not need to sit in the table the board queries. Archiving or moving them to long-term retention, combined with indexes on the custom columns your filters and views actually sort and search on, restores headroom that no amount of board configuration can. This is the change that stops the problem returning in eighteen months.
Virtualize the dispatch view
When a dispatcher genuinely needs a wide view across many resources, the answer is to stop rendering what is not on screen. A virtualized dispatch surface renders only the rows and time columns currently visible and pages the rest in as the user scrolls, so the cost of the view stops scaling with the size of the operation. The standard board has real limits here, and once you have proven the network calls are fast and the render is not, virtualization is the remaining lever.
Build a purpose-built PCF dispatch control
Where the standard board cannot be configured into something a dispatch team will use, we build the view they need as a PowerApps Component Framework control in TypeScript and React: server-side paging against the platform Web API, virtualized rendering, debounced refresh, and only the columns that team works from. On a Field Service rollout for a European manufacturer we built exactly this, a custom PCF Gantt view of technician schedules for the dispatch board, alongside the standard product rather than instead of it.
Reduce how much the board is asked to do
If dispatchers are scrolling across hundreds of resources by hand to place work, the board is carrying a job that Resource Scheduling Optimization and the schedule assistant should be doing. Getting the underlying scheduling data into a state the engine can use, meaning accurate characteristics, requirements, territories, and geocoded locations, often removes the need for the enormous manual view that was slow in the first place.
When configuration changes are not enough
There is a point in this diagnostic where the answer stops being a setting. If the trace shows synchronous plugins on booking operations, a data model that forces the board to retrieve far more than it should, or a dispatch process the standard board was never designed to support, no amount of tab configuration will fix it. That is a build problem, and it needs someone who can safely change the build.
This is the work Solzet does. Where the schedule board is slow because a previous implementation left unfinished or badly written customizations behind, our Dynamics 365 project rescue and takeover service takes ownership of the environment, stabilizes it, and corrects the scheduling configuration and the code underneath it. Where the board is sound but the dispatch team needs something the product does not offer, our Dynamics 365 Customer Engagement consulting team builds it, including the custom PCF controls that replace a view the standard board cannot render at your scale.
For what that looks like in practice, our Field Service digitization case study for a European manufacturer covers a fifty technician dispatch operation where custom PCF Gantt controls sit alongside Resource Scheduling Optimization on the dispatch board, with the scheduling time and utilization numbers that came out of it.
What does the Power Platform governance and licensing audit check?
Power Platform sprawl is a specific problem and it gets its own module inside the health check. If makers have been building apps and flows for a couple of years and nobody has kept a register, you now have a tenant where nobody can say with confidence what exists, who owns it, what it costs, or what would break if it stopped. This is a checklist-driven audit that answers those four questions with evidence, and then tells you what to retire, what to reassign, and what to license correctly.
It runs on read access through the Power Platform admin center and tenant analytics. We change nothing and we turn nothing off. Every item comes back with the evidence attached, because the recommendation to retire an app is only useful if the business owner can see why.
Unused and abandoned apps and flows
A full inventory of every canvas app, model-driven app, and cloud flow in the tenant, with the owner, the last launch or last run date, and the number of real users behind it. We separate what is in daily production use from what was built once for a demo, what has been failing quietly for months, and what has a single user who left. Each item comes back marked keep, reassign, or retire.
Premium connector and license compliance
Which apps and flows use premium connectors, custom connectors, HTTP actions, or Dataverse from outside a Dynamics 365 app, and whether the people running them hold the Power Apps or Power Automate Premium or Per App licenses that usage requires. This is where non-compliance hides, and it is far cheaper to find it yourself than at a Microsoft true-up or renewal.
Orphaned and duplicate Dataverse environments
Every environment in the tenant, its type, its owner, its capacity consumption, and whether anything in it is still live. Trial, sandbox, and personal productivity environments accumulate quietly, hold copies of production data, and consume database and file capacity you are paying for. We flag which can be retired, which need converting, and which need an owner.
Hidden ownership and key-person risk
Production automation owned by one named individual, connections bound to a personal account rather than a service principal, flows still owned by leavers, and apps with no documented business owner. These do not show up as errors until the person is gone or the password changes, and then a process stops with nobody able to fix it.
DLP policy and connector governance
The data loss prevention policies in force across each environment, whether the business and non-business connector classification matches how the platform is actually used, and how open the default environment is. We show where a maker can currently move company data into a personal or consumer service without anyone approving it.
Capacity, storage, and license waste
Dataverse database, file, and log capacity by environment, add-on capacity being bought to cover cleanup nobody has done, and the split between Per App and Per User licensing against actual usage. The output is the specific, recoverable waste, named with numbers rather than described in general terms.
The fixed-scope deliverable
The governance and licensing audit is scoped and priced upfront, per tenant, with an agreed number of environments. You know the price and the timeline before we start and it does not move. What you get back is a governance register listing every app, flow, and environment in scope with its owner, its last real use, its licensing position, and a recommended action of keep, reassign, or retire.
Alongside it comes a remediation plan sequenced by what it recovers and what it costs, a named list of the compliance exposures to close before your next renewal, and a proposed set of guardrails: the environment strategy, the DLP policies, and the ownership rules that stop the sprawl returning within a year. It is written to be run by your own team or any Microsoft partner, not just by us.
From audit findings to a Center of Excellence
An audit tells you the state of the platform today. Guardrails are what keep it that way. The register and the proposed guardrails from this audit are the natural starting point for a Center of Excellence, because you are no longer guessing at policy in the abstract: you are writing rules against a real inventory and real findings.
If you want to take that step, our guide to building a Power Apps Center of Excellence with a nearshore team walks through governance, ALM, reusable frameworks, and knowledge transfer, and how a senior team from Yerevan plugs into yours to stand it up. For the build and support work that follows, see our Power Platform consulting service. There is no obligation to take either: the audit and its action plan stand on their own.
How do you audit and triage a portfolio of citizen-developed Power Apps when some are already implicated in data leaks?
If you are the single platform owner facing apps and flows of wildly varying quality, some already linked to a data leak and compliance asking questions, do not start with a rebuild. Score every asset quickly on four factors: what data it touches, how widely it is shared, whether it writes to a system of record, and whether anyone still owns it. Then triage. Contain the highest-risk few immediately, formally adopt the genuinely business-critical ones into a supported solution and deployment route, and retire the rest with notice. Preserve the evidence before you change anything, and give compliance a written update on a fixed cadence while the work is in progress.
The governance audit above produces the register. This is the method for deciding what to do first with it when you do not have the time or budget to fix everything at once, and it works the same way for fifteen canvas apps as for several hundred apps and flows with no source control or testing. It runs on the Power Platform admin center, the Microsoft Purview audit log, and the CoE Starter Kit, so the scoring and containment need no new purchase.
The four-factor risk score
Score each app and flow from 0 to 3 on each factor and add them up. The total orders the work. One override sits above it: anything already implicated in a leak, shared with guests or external parties, or holding bulk personal data under a leaver's account goes to the top whatever its score. The bands below are a starting rubric; adjust the wording to your own data classification before you apply it.
| Factor | Score 0 to 3 | Where the evidence comes from |
|---|---|---|
| What data does it touch? | 0: nothing beyond the maker's own productivity data. 1: internal, non-sensitive business data. 2: customer or employee records. 3: personal data in bulk, special category, financial, or anything a regulator names. | The connectors and data sources in the CoE Starter Kit inventory or the app details in the admin center, plus a look at what the screens actually show and export. |
| How widely is it shared? | 0: the maker only. 1: a handful of named colleagues. 2: a department or a security group. 3: the whole organization, guests, or anyone outside the tenant. | The sharing list per app and flow, group membership counts, and whether any guest accounts or external connectors are involved. |
| Does it write to a system of record? | 0: reads only, or writes to its own list. 1: writes to a team store nobody else relies on. 2: writes to shared business data such as Dataverse tables, SharePoint libraries, or SQL used by other processes. 3: writes to or deletes from Dynamics 365, finance, HR, or another system the business treats as the truth. | The connectors and actions used, with particular attention to update, delete, and HTTP actions, and the connection identity each one runs under. |
| Does anyone still own it? | 0: an active owner who can explain it and a named business owner. 1: an active owner but no business owner. 2: an owner who has moved role or no longer uses it. 3: an owner who has left, or no owner anyone can name. | The owner field against the directory, recent launches and runs, and the answer when you ask the business area who depends on it. |
Contain, adopt, or retire
- Contain: the highest scores and every override, now. Remove wide and external sharing, disable flows writing to systems of record under personal connections, and apply DLP to the environment. Reversible, and done before any redesign.
- Adopt: whatever would stop a real business process if it were switched off. It gets a business and technical owner, a managed environment, a solution, a service identity, and the same deployment route as everything else the platform team supports.
- Retire with notice: everything neither critical nor owned. A dated notice, a named contact, a route to claim it into adoption, then unshare, disable, keep the package for a quarantine period, and delete.
The triage, step by step
Preserve the evidence before you change anything
For any app or flow already implicated in a data leak or a complaint, capture its state first: export the app or solution package, record the current sharing list, the connections and the identity each one runs under, the owner, and the environment, and export the relevant activity from the Microsoft Purview audit log for the period in question. Flow run history and audit log retention are both limited and depend on your licensing, so check current Microsoft documentation and export now rather than later. Unshare and disable rather than delete, because a deleted app cannot be examined.
Pull one inventory row per app and flow
From the Power Platform admin center, and from the CoE Starter Kit where it is installed, list every canvas app, model-driven app, and cloud flow with its environment, owner, sharing, connectors, and last launch or run. It does not need to be complete on day one; it needs every asset that is shared beyond its maker. For fifteen apps this is an afternoon in a spreadsheet, and for several hundred apps and flows the CoE Starter Kit is what makes it practical.
Score each asset on the four risk factors
Give each row a 0 to 3 score for data touched, sharing breadth, writes to systems of record, and ownership, using the rubric on this page, and add them up. Then apply the override: anything already implicated in a leak, shared with guests or external parties, or holding bulk personal data under a leaver's account goes to the top of the list whatever its total. Record the evidence behind each score in the same row, because compliance will ask how the order was decided.
Read business criticality separately from risk
Ask each business area one question per asset: what stops, and for whom, if this is switched off tomorrow? The answer sorts assets into business critical, useful, and not needed. Risk tells you how fast to act; criticality tells you what the action is. A high-risk app that runs payroll is contained and adopted, not deleted, and a low-risk app nobody needs is simply retired.
Contain the highest-risk few immediately
Take the top of the scored list, usually a small handful, and reduce the exposure without waiting for a redesign: remove sharing with large groups, guests, and the whole organization; disable flows that write to systems of record under personal connections; apply a DLP policy to the environment that blocks the connector combination involved; and where your tenant supports app quarantine through the admin tooling, use it. Tell the owners and the affected users what has been paused and why. Containment is reversible by design.
Formally adopt the genuinely business-critical apps into ALM
Assets that are critical get a named business owner and technical owner, move out of the default or personal environment into a managed environment as a solution, have their connections moved to a service principal or a service account, and follow the same deployment route as everything else the platform team supports. This is where a portfolio of hundreds of flows with no source control starts to get a foundation, one adopted asset at a time, rather than through a big-bang rebuild. Rebuild only what cannot be made supportable in place.
Retire the rest with notice
Everything left, the useful but unowned and the not needed, gets a retirement notice to its owner and users with a date, a named person to contact, and a route to claim it into adoption if someone depends on it. At the date, unshare and disable, keep the exported package for an agreed quarantine period, and only then delete. Retiring without notice is how the one app that closes month end disappears and trust in the whole exercise goes with it.
Report progress to compliance on a fixed cadence
Give compliance a short written update on a set rhythm rather than when asked: what the inventory covers so far, how assets were scored, what has been contained and when, what evidence has been preserved and where, what is being adopted or retired and by which date, and what is still unknown. Say plainly what you do not yet know. Whether an incident needs to be notified to a regulator is a decision for your data protection officer or legal adviser, so hand them the facts early rather than waiting for the triage to finish.
Triage is a one-off; keeping the portfolio in that state is a capability. Once the adopted set is known, our guide to building a Power Apps Center of Excellence with a nearshore team covers the governance, ALM, and maker enablement that stop the next portfolio forming, and our guide to Power Platform ALM with PAC CLI and pipelines covers the deployment route adopted apps move onto. Solzet runs the scoring and triage as a fixed-scope module of this health check, and can take on the adoption and rebuild work afterwards if you want it.
A department built apps on a trial plan and a Power Platform bill is coming: how do we stop it?
This is the urgent version of the sprawl the audit above looks for: a department running live apps for a large audience on trial or unlicensed footing, and a conversion date approaching. Contain it in order. Establish exactly who uses what under which licence, restrict further access before the trials convert, identify which apps genuinely need premium capability and which can move to standard connectors and SharePoint, and consolidate what stays onto licensed environments and properly licensed identities. Then take the evidence into the licensing conversation, and put on the environment controls and approval gate that stop it happening again.
We do not quote licence prices or trial durations here, because Microsoft changes both. Check every licensing decision against current Microsoft licensing documentation and your licensing partner.
Establish exactly who uses what, under which licence
Build one list before anyone negotiates or deletes anything. From the Power Platform admin center, take every environment with its type, so trial, developer, default, sandbox, and production environments are visible, and the apps and flows inside each. From the Center of Excellence Starter Kit inventory, where it is installed, take each app and flow with its owner, the people it is shared with, recent launches or runs, and the connectors it uses, including premium and custom connectors and Dataverse. From the Microsoft 365 admin center, take the licences and trial subscriptions in the tenant and who holds them. The result is one row per app: environment, owner, real users, connectors, and the licence each user is actually relying on.
Find out what each trial turns into, and when
Trial means several different things in this platform: a self-service trial an individual signed up for, a trial subscription in the Microsoft 365 admin center, or a trial environment. Each ends differently. Some convert to paid subscriptions if recurring billing is on, some simply expire and stop the app working for users without a licence, and trial environments can be disabled and then deleted with the data in them. Read the end date, the recurring billing status, and the stated behaviour for each one in your tenant, and check current Microsoft licensing documentation rather than relying on a duration someone remembers. Where nobody has decided yet, turn off recurring billing so the decision stays yours.
Restrict further sharing and sign-ups before the trials convert
Stop the exposure growing while the decisions are made, without cutting off the people already working in the apps. Pause new sharing of the affected apps to additional users and groups, and where the environment is a Managed Environment, use its sharing limits to stop apps being shared with whole security groups or beyond a set number of people. Review the tenant settings that control self-service sign-up for trials and self-service purchase, so another department cannot start the same cycle next week. Tell the department what is paused and why, and give them a date for the decision.
Sort the apps that genuinely need premium from those that do not
Go through the list app by app. An app needs premium capability when it depends on Dataverse for relational data, row level security, or auditing, on premium or custom connectors such as SQL Server or HTTP, on a model-driven app, or on flows that call premium actions or desktop automation. Many department apps do not: a request form, a tracker, or an approval that can run on SharePoint lists, Outlook, Teams, and Approvals with standard connectors under the Power Platform use rights that come with many Microsoft 365 plans. Be honest about the trade-offs of moving, since SharePoint lists have delegation and volume limits and a weaker security model, so sensitive or high volume data should not be forced onto them to avoid a licence. Check which rights your own Microsoft 365 plans include against current documentation.
Evaluate the licensing options for the premium set with current Microsoft documentation
For the apps that stay premium, compare the options against real usage rather than headcount: per user premium licences for people who use many apps, per app options for people who use one or two, pay-as-you-go billing through an Azure subscription linked to specific environments for occasional or unpredictable use, and process or unattended licensing where a flow runs as a service rather than as a person. Microsoft revises these offers and their terms, so work from current Microsoft licensing documentation and your licensing partner, not from an old quote. Take the inventory into that conversation. Knowing exactly which users need which capability is what turns an approaching bill into a negotiation.
Consolidate onto licensed environments and properly licensed identities
Move the apps that are staying out of trial and default environments into production environments with an owner, as solutions, or convert a trial environment to production where it already holds the right build and data. Rebuild the apps that are moving to standard connectors, and retire the ones nobody needs. Run production flows under a service principal or a properly licensed service account rather than a person on a trial. Routing many users through one shared account does not reduce the licences required, because Microsoft multiplexing rules still count the people behind it, so do not use it as a workaround.
Put controls on environment creation and connectors
Restrict who can create trial, sandbox, and production environments to administrators in the Power Platform admin center tenant settings, and route makers to personal developer environments instead. Apply DLP policies that keep premium and custom connectors out of the default environment and out of any environment that is not licensed for them. Where Managed Environments fit your licensing, use their sharing limits and usage insights so wide sharing is visible and bounded. Menu names move between releases, so confirm the exact settings in current Microsoft documentation.
Add an approval gate before any app reaches a large audience
The recurring cause is an app that grew from five users to several hundred without anyone looking at its licensing. Make sharing beyond a handful of colleagues, or promotion into production, a request with an approver: the app owner, the licence position of the intended users, the connectors and data it uses, and who supports it. Built as a Power Platform request app linked to the register, it is quicker than going around it, which is the only way a gate like this survives.
Flows are often the larger part of the exposure, particularly where premium connectors or desktop automation crept into a department process. Re-platforming those onto standard connectors, or onto the right process licensing where they genuinely need premium, is the work of our Power Automate cloud flow and desktop RPA consulting. The longer cleanup and the governance framework that follow are described in the next section, and where the honest answer is that a department app has outgrown the platform and the licensing no longer fits, we also build custom CRM and business applications without Microsoft licensing.
Do you also deliver the Power Platform health audit and governance remediation?
Teams looking for Power Apps audit and cleanup services are usually asking for two things at once. They want somebody independent to tell them what is actually in the tenant, and they want that somebody to then clean it up and make sure it does not come back. The section above is the first half: the register, the evidence, and the findings. This is the second half, which is the cleanup itself and the governance framework that goes on afterwards. Solzet does both, and you can buy either one without the other.
It matters that the same people do the audit and the remediation, because most of what makes a cleanup difficult is not deciding what to delete. It is knowing that the flow with two users a month is the one finance closes the books with, that the app nobody has opened since March is embedded in a Teams channel, and that the security role somebody wants removed is the only thing granting a department read access to its own records. That context comes out of the audit, and it is the reason a cleanup done by the team that ran the assessment is safer and faster than one handed to a stranger with a spreadsheet.
All of it runs the same way as the assessment: fixed scope agreed upfront, nothing removed without an owner confirming it, and every step reversible until you say otherwise.
What the cleanup actually covers
Six areas, written as the remediation rather than as the finding, because knowing you have four hundred apps is not the hard part. Each one is scoped against your own register, so the effort is quoted from real counts rather than from an average.
Orphaned and abandoned Power Apps
Apps with no owner, no active users, or an owner who left the company. Cleanup is a procedure rather than a delete key: we confirm the app has no live consumers from usage telemetry, trace anything embedded in Teams, SharePoint, or a model-driven app that still points at it, notify the business area, export a package so the build is recoverable, remove the app from circulation, and only then delete it after an agreed quarantine period. Apps that turn out to be genuinely in use get a named owner and a supported home instead of a retirement.
Unused, duplicated, and quietly failing flows
Cloud flows fall into four groups and each gets a different action. Flows that have not run in months are turned off before they are deleted, so anything that fires annually surfaces rather than disappearing. Flows failing silently get triaged into fix, retire, or rebuild, because a flow that has failed every night for six months is a broken process somebody has already worked around manually. Near-duplicate flows built by different makers for the same job are consolidated into one owned version. And flows running on a personal connection get rewired onto a service principal or a shared connection reference so they stop depending on one person's account.
Security roles and the access model
Cleanup here means rebuilding rather than trimming. Tenants that have grown organically accumulate cloned roles with one column changed, direct record shares that nobody can explain, and users holding four overlapping roles because each new requirement added one. We rebuild the model from a minimum set of composable roles mapped to real job functions, replace individual sharing with team ownership, remove the standing administrative access that has been sitting on ordinary accounts, and prove the result against a matrix of who should be able to do what before anything is switched over.
Dataverse sprawl across environments, tables, and columns
Personal productivity and trial environments holding copies of production data get consolidated or retired, with the data extracted first where anyone still needs it. Inside the environments that remain, we deal with the tables three teams built for the same concept, the columns nobody has written to since the year they were created, and the unmanaged layers sitting over managed solutions that make every future release unpredictable. The result is fewer environments, one place per concept, and a solution structure that can actually be deployed.
License optimization
The cleanup usually pays for itself here. We rightsize Per App against Per User assignments to how people actually use the platform, remove premium dependencies where a standard connector or a Dataverse-native approach does the same job, reclaim licenses attached to retired apps and departed users, and release add-on capacity that was bought to cover a cleanup nobody ran. Where usage genuinely requires premium licensing that is not in place, we say so plainly and put it right, because finding your own non-compliance is far cheaper than having it found for you at renewal.
CoE Starter Kit deployment and the inventory behind it
The Microsoft Center of Excellence Starter Kit is the right tooling for keeping the register true after the audit, and it is regularly installed badly: dropped into the default environment, running on a maker's personal connections, with the inventory flows failing quietly within weeks. We deploy it into a dedicated environment on service principal connections, get the inventory, compliance, and cleanup components actually running, configure the audit and archive processes against your own retention rules, and hand over the dashboards your admins will use. It is a toolkit rather than a governance programme, so we set it up as the instrumentation for the policies below rather than as a substitute for them.
The deliverable: an actionable cleanup plan, in order
The output of this work is a sequenced plan rather than a list of everything that is wrong, and each step carries its owner, its effort, its risk rating, and how to undo it. The order below is the one we use, and it is deliberate: the safe, reversible work goes first and recovers most of the value, and the guardrails go on last, once there is a clean estate for them to hold.
Freeze the drift and confirm the register
Before anything is removed, we agree a short freeze on new production apps and flows outside the process, and walk the register from the audit past the business owners. Owners correct it, and they always correct something: the app that looks abandoned but runs one critical monthly task, the flow with two users who happen to be the finance team. Cleanup that skips this step is how a company deletes something important and stops trusting the whole exercise.
Wave one, the reversible retirements
Everything with no users, no runs, and no owner claim. Packages exported, items disabled rather than deleted, quarantine period agreed, nothing irreversible. This wave is deliberately first because it is the largest count, the lowest risk, and it clears the noise so the remaining decisions are about real assets. It also proves the process is safe before anyone is asked to trust it with something that matters.
Wave two, ownership and licensing corrections
Everything that is staying gets a named business owner and a technical owner, personal connections move onto service principals or shared connection references, and license assignments are corrected against actual usage. Nothing is deleted in this wave. It is the one that removes the key-person risk and recovers the recurring cost, which is usually where the return on the whole engagement sits.
Wave three, consolidation and rebuild
The work that needs engineering rather than administration: duplicate apps merged into one owned version, the security role model rebuilt and cut over, tables and environments consolidated, unmanaged layers resolved, and the handful of business-critical apps built by someone who has since left rebuilt properly so they can be supported. Each item is scoped, estimated, and scheduled separately, because this is real delivery work and pretending otherwise is how cleanup programmes stall.
Wave four, the guardrails go on
Only once the estate is clean do the policies, the environment strategy, and the approval workflow described below get switched on. Applying guardrails to a tenant that has not been cleaned means enforcing rules against hundreds of items that already break them, which produces noise nobody acts on and a policy everyone learns to route around.
Re-run the inventory and hand it over
We re-run the inventory against the starting register so the recovered licenses, retired items, closed compliance gaps, and reassigned ownership are shown as measured numbers rather than claims. Your team gets the running CoE tooling, the written policies, and the review cadence, and the plan states clearly what is left, what we chose not to touch, and why.
The governance framework we implement
A cleanup with no governance behind it buys you about eighteen months. This is the framework we put in place so the estate stays in the state we left it, delivered as working artifacts rather than as a policy document: the environments exist, the policies are switched on, the approval workflow runs as an app, and your team knows how to operate it.
An environment strategy people can follow
Named environments with a stated purpose, an owner, a lifespan, and a rule for who can create what where: production environments per business capability, development and test environments that mirror them, a properly governed space for personal productivity building, and a decision about the default environment, which in most tenants is the single largest source of the sprawl. The strategy includes provisioning and decommissioning as routine operations rather than as favours from an administrator.
Written policies rather than folklore
Data loss prevention policies per environment tier with a connector classification that reflects how your business actually works, naming and solution standards, data residency and retention rules, and a plain statement of what a maker may build alone, what needs review, and what is off limits. Each policy is one page, is owned by a named person, and says what happens when it is breached. Policy that exists only in the heads of two administrators is not policy.
A request and approval workflow that is faster than going around it
We build the intake as a Power Platform application, because a governance process that runs on email is a governance process people bypass. A maker requests an environment, a premium connector, a promotion to production, or a data source through a form; the request routes to the right business and technical approver with the information they need to decide; approval provisions the thing automatically and records it in the register with its owner attached. The design target is that the approved route is quicker than the unapproved one, which is the only version of this that survives contact with a busy business.
Ownership, review, and expiry rules
Every app, flow, environment, and connection carries a named business owner and a technical owner. Production automation runs on service principals rather than individual accounts. Ownership transfers are part of the leaver process rather than discovered afterwards. Assets that go unused for an agreed period enter a review and then an archive path automatically, so the estate cleans itself continuously instead of needing another audit in two years.
A supported promotion path from a personal build to production
Solution-based application lifecycle management with pipelines from development through test to production, source control for the things that warrant it, and a clear line where an app crosses from something a maker owns into something the platform team supports. Most citizen development goes wrong at exactly that boundary, so we define what an app has to have before it crosses: an owner, a data model that holds, error handling, and a supportable build.
The people and the cadence that run it afterwards
Governance is an operating rhythm rather than a document set. We define the review cadence, the small group that approves and prioritizes, the monthly reporting from the CoE tooling, and the maker enablement that gives people a safe way to build what they need. Then we train your team on it and step back. If it only works while we are in the room, it does not work.
Why this is consulting work rather than something you install
Search for Power Apps audit and cleanup and a good deal of what comes back is a marketplace listing: a governance product you install into your tenant, on a per user subscription, that will show you dashboards of the sprawl. Those tools are not useless and we are happy to work alongside one you already own. But they answer a question you can already answer with the admin center and the Center of Excellence Starter Kit, which Microsoft gives you at no cost, and they stop exactly where the difficult part starts. No product decides that the app with two users is the one the month end depends on. No product calls the business owner, agrees the retirement, rebuilds the security role model, or rewires forty flows off a departed employee's account. Buying another app to install into a tenant that already has too many apps is not a cleanup.
The other thing a marketplace cannot give you is independence. We did not build your apps, we do not sell a platform product, and we are not defending anyone's previous decisions, so the register comes back saying what it says. The fee is fixed before we start and does not move with what we find, which means nothing about the size of the cleanup earns us more, and the plan is written to be run by your own team or any other Microsoft partner if that is what you prefer.
For the build and support capacity behind the remediation, meaning the developers who rebuild the apps, rewire the flows, and stand up the approval workflow, see our Power Platform and Power Apps developers. Where you want the ongoing capability rather than a one-off cleanup, our guide to building a Power Apps Center of Excellence with a nearshore team covers how a senior team from Yerevan runs it alongside yours. And where the estate is not merely untidy but the delivery behind it has stalled or been abandoned, that is a different engagement, covered by our Dynamics 365 project rescue and takeover service.
An auditor has flagged Power Platform environment sprawl: how do we regain control before the deadline without blocking the business?
When dozens of teams build in Dataverse on their own patterns and an auditor has flagged uncontrolled sprawl, work in a fixed order. Inventory first: what exists, who owns it, and what touches regulated data. Then containment: analyze what your DLP policies would break before you enforce them, so you learn the damage on paper rather than in production. Then structure: an environment strategy by purpose, naming and ownership standards, a maker onboarding path, and a review cadence. And be explicit about the political failure mode: governance imposed without an approved build route drives makers underground, onto personal accounts and unsanctioned tools, and makes the audit finding worse.
The sections above describe the audit, the cleanup waves, and the framework we implement, and under normal conditions the guardrails go on after the cleanup. An audit date changes the order in one respect: the controls over regulated data cannot wait for the long tail to be tidied. The path below is the shape we plan against. The exact timing depends on the size of the estate and how quickly owners make decisions, so it is agreed with you at the start rather than promised in advance.
A 90-day path to a defensible position
Days 1 to 15: inventory what exists, who owns it, and what touches regulated data
The governance register described above, run first and fast: every environment, app, flow, connection, and custom connector, with its owner and last real use. Under an audit date we add one column before anything else, which is whether the asset reads or writes regulated data, such as personal, financial, or health data, and through which connectors. That column decides the order of everything that follows, because the auditor will ask about regulated data first.
Days 16 to 35: contain the exposure without breaking the business
Impact analysis for the target DLP policies against the connector usage in the inventory, fixes or exceptions agreed with the owners of what would break, then enforcement on the environments that hold regulated data and on the default environment. Production flows on personal connections that touch regulated data move to service principals now rather than in a later wave. Nothing unrelated is retired yet.
Days 36 to 60: put the structure in place and open the approved build route
The environment strategy by purpose, naming and ownership standards applied to what remains, the request and approval route live, and a maker onboarding path published. The approved route has to exist before makers are told what they can no longer do, otherwise the containment work simply moves the building somewhere the inventory cannot see.
Days 61 to 90: run the controls once and assemble the evidence
At least one full review cycle run as written, with its output kept: the refreshed inventory, the exceptions register with owners and expiry dates, DLP policies in force and the environments they cover, capacity attributed per environment, and a dated plan for the cleanup waves still to come. An auditor rarely expects a finished cleanup. They expect to see that the organization knows what it has, controls the regulated part of it, and operates a process that will close the rest.
Learning what a DLP policy would break before you enforce it
Power Platform DLP policies have no official monitoring or audit-only mode. A policy is enforced as soon as it applies: flows that combine connectors it separates are suspended, and apps can no longer use the blocked combination. Switching a strict policy on across a sprawling tenant a few weeks before an audit is how a finance process stops on the last day of the month. The equivalent of monitoring has to be built from the evidence you already have.
- Compare the proposed business, non-business, and blocked connector groups against the connector usage per app and flow in the CoE Starter Kit inventory, and list every asset the policy would affect, with its owner.
- Use the DLP editor in the CoE Starter Kit, or the impact information in the Power Platform admin center where your tenant has it, to confirm the list rather than relying on it alone.
- Apply the policy to a test environment, or to a small set of environments, before widening its scope, and check what actually stopped.
- For each affected asset, agree a fix, a move to a more suitable environment, or a documented exception with an owner and an expiry date. The exceptions register is audit evidence in its own right.
- Announce the enforcement date to the owners on the list, then enforce, starting with the regulated data environments and the default environment.
Environment strategy by purpose
The governance framework above calls for named environments with a stated purpose. These are the purposes we usually start from, and the rules that attach to each, so a maker can tell where a build belongs without asking an administrator. Where Managed Environments fit your licensing, their sharing limits, usage insights, and maker welcome content help enforce the same rules.
| Environment | Purpose | Rules | Ownership and lifespan |
|---|---|---|---|
| Default environment | Personal productivity only, such as a flow that files your own email attachments | The strictest DLP policy, no regulated data, and nothing a team depends on | Renamed so its purpose is obvious; anything shared widely or business critical is moved out |
| Personal developer environments | Individual makers learning and prototyping | Restrictive DLP, no production data, short lifespan | Makers can be routed here instead of the default environment where your licensing supports it |
| Team development and test | A department or project building something others will use | Business DLP tier, test data only, solutions from the first day | Owned by the team lead, with a named technical owner and a review date |
| Production per business capability | Apps and flows the business depends on | Deployment only through solutions and pipelines, no direct making | Business and technical owner, service principal connections, monitored |
| Regulated data production | Anything holding personal, financial, or other regulated data | The tightest business DLP tier, access through a security group, restricted sharing | Named data owner, evidence of access review kept for the auditor |
| Trial and temporary | Proofs of concept and vendor evaluations | No production data, expiry date set at creation | Deleted or converted on the expiry date, never left to accumulate |
Moving builds from the default environment into production environments only holds if they arrive as solutions and are deployed the same way every time. The mechanics, from manual ZIP exports to the Power Platform CLI and pipelines, are in our guide to proper Power Platform ALM with PAC CLI and pipelines.
Capacity attribution per environment, for finance
Sprawl shows up on the invoice before it shows up in an audit. Dataverse database, file, and log capacity is pooled across the tenant, so nobody sees their own share, and add-on capacity gets bought to cover environments nobody owns. The Power Platform admin center reports consumption per environment, which is enough to fix that.
- Every environment in the register carries a business owner and a cost center, and has no exemption because it is small.
- Database, file, and log consumption is recorded per environment every month and reported to finance by owner, next to the actions that would reduce it.
- The usual recoverable items are named explicitly: copies of production data in sandboxes and trials, audit and plug-in trace logs past their retention need, and attachments that belong in cheaper storage.
- Where true chargeback is wanted, pay-as-you-go billing policies can link chosen environments to an Azure subscription. That changes how those environments are licensed and billed, so it is a deliberate commercial decision rather than a reporting setting.
Naming, ownership, maker onboarding, and review cadence
Naming and ownership standards
One pattern for environments that encodes the business area, the purpose, and the stage, such as finance, invoicing, and production, applied to every existing environment rather than only new ones. Solutions and publishers named for the business capability, not for the maker. Every asset carries a business owner and a technical owner, and the leaver process transfers both before the account is disabled.
A maker onboarding path
A published route from first app to production: short onboarding content and the rules on one page, a personal developer environment to learn in, a request for a team environment when others will use the build, and clear criteria for promotion to production, meaning an owner, a solution, error handling, and a support arrangement. Makers who follow it get premium connectors and environments faster than makers who do not.
A review cadence that produces evidence
A weekly look at new environments, apps, and connectors surfaced by the inventory; a monthly review of exceptions, capacity by owner, and assets with no recent use; and a periodic owner confirmation for anything touching regulated data. Each review leaves a dated record, because the auditor will ask for the output of the process, not a description of it. The ongoing capability behind this is covered in our guide to building a Power Apps Center of Excellence with a nearshore team.
Handling the makers who lose freedoms
This is where governance programmes fail, and it is rarely a technical failure. The makers who built the sprawl were usually solving real problems faster than IT could, and some of what they built runs the business. If the first thing they hear is that their connectors are blocked and their environments are being deleted, the building does not stop. It moves to personal accounts, spreadsheets with macros, and unsanctioned software, which is invisible to the inventory and a worse finding at the next audit than the sprawl was.
- Open the approved build route before removing anything, and make it faster than going around it.
- Explain each restriction by the risk it addresses and the audit finding behind it, not as a policy decision from above.
- Treat the most capable makers as allies: invite them to review the rules, and give the builds the business depends on a supported home rather than a retirement notice.
- Give every blocked asset a named path: fix, move, or a time-limited exception, with a person to talk to.
- Get a business sponsor, not only IT, to announce the change, so it reads as how the company builds now rather than as IT taking something away.
How does the health check work?
A fixed-scope, evidence-based assessment that ends in a prioritized action plan. It runs on read access and changes nothing in your system.
Agree a fixed scope and get read access
We agree upfront which environments and apps are in scope, what the assessment will and will not cover, and the fixed price and timeline for it. You give us the read access we need, and the health check runs without disrupting your users or changing anything in the system.
Audit the environment against each dimension
We work through configuration and customization, security and access, performance and scalability, data quality, business-process alignment, and integrations and ALM. We examine the real solution rather than the story around it, and we record evidence for every finding so nothing rests on opinion alone.
Rate and prioritize the findings
Each finding is rated by impact and effort and tied to a business outcome, so a critical security gap and a low-value cleanup item are not treated the same. You can see which issues threaten stability or compliance now and which are opportunities to reduce cost and friction over time.
Deliver a prioritized action plan
The deliverable is a written report and a prioritized action plan covering optimization, cleanup, and roadmap steps: what to fix now, what to improve next, and what to plan for. It is specific enough to hand to any partner or run with your own team, and it stands on its own whether or not Solzet does the follow-on work.
Walk you through it and agree next steps
We review the findings and the action plan with your team so the priorities and the evidence are clear, answer questions, and, if you want it, scope the remediation and optimization work. There is no obligation to have us do the follow-on; the assessment is the product.
What do you get back from the health check?
The health check is a concrete deliverable, not a vague conversation. You end with a written report and a plan you can act on with any team or partner.
A written assessment report
A clear account of the state of your Dynamics 365 or Power Platform environment across every dimension in scope, with evidence for each finding rather than a list of assertions.
A prioritized action plan
Findings rated by impact and effort and grouped into optimization, cleanup, and roadmap, so you know what to fix now, what to improve next, and what to plan for, each tied to a business outcome.
Risk, waste, and opportunity, named
The security gaps and stability risks that need attention, the licensing and storage waste you can recover, and the improvement opportunities that would make the system faster and easier to use.
A plan you can act on with anyone
The report is specific and vendor-neutral enough to hand to your internal team or any Microsoft partner. If you would like Solzet to deliver the remediation, we can scope it, but the assessment stands on its own.
What do buyers ask about a Dynamics 365 health check?
What is a Dynamics 365 health check?
A Dynamics 365 health check is a fixed-scope assessment of a Dynamics 365 Customer Engagement, Power Platform, Business Central or Finance and Operations implementation. Solzet audits configuration, security, performance, data quality, and alignment with business processes to identify risks, waste, and improvement opportunities. The deliverable is a written report and a prioritized action plan covering optimization, cleanup, and roadmap steps. It is an independent, evidence-based read on the state of your system, useful before a major upgrade, after a go live, or when performance is declining.
Can you audit our existing Business Central or Finance and Operations implementation?
Yes. Solzet implements Dynamics 365 Business Central and Finance and Operations, alongside Customer Engagement and Power Platform, and we can audit your existing project whoever built it. The assessment covers the extensions and custom code, the data, the integrations, security, performance and upgrade readiness, and ends in a prioritized remediation backlog and a stabilisation plan you own. Where you want the fixes delivered too, we can scope them, but the audit stands on its own.
What does a Business Central audit check?
Four things beyond the standard health check dimensions. The extensions and the AL code inside the ones you own, including whether the source and build route are in your hands. Upgrade readiness: customizations carried over from Dynamics NAV, dependencies on obsolete objects, and the on-premises version position, since Business Central on-premises version 25 or later migrates directly to online and older versions upgrade to 25 first. Data: duplicated master data, posting groups and dimensions that no longer match the chart of accounts, and migrated balances reconciled against the source. And integrations: APIs, the Dataverse connection to Dynamics 365 Sales, virtual tables, and failing job queue entries.
Do you offer an independent AL code audit of Business Central extensions?
Yes. Solzet runs an independent AL code review of the Business Central extensions you own, on its own or as part of the wider audit. It checks upgradeability (event subscribers against modified or copied base objects and obsolete dependencies), performance (SetLoadFields, FlowFields and CalcFields, locking and long transactions), permission sets, telemetry to Application Insights, test codeunits, CodeCop, UICop, AppSourceCop or PerTenantExtensionCop findings, dependency and version hygiene, and the upgrade path. You receive a findings report with priorities and a stabilisation plan.
What do we need to provide for a Business Central extension code review?
Read access to the source repository of every extension you own, the app files installed in production so we can confirm they match the source, read access to a sandbox or a copy of production, and Application Insights access if telemetry is connected. A short call with whoever maintains the code helps us read the exceptions, but the review does not depend on the original developer being available.
What does a Dynamics 365 Finance and Operations health check cover?
The X++ customizations and how much of the standard product they replace rather than extend, with code quality and the route to production. Dual-write and virtual entities where Finance and Operations meets Customer Engagement, including sync errors and conflicts through Dataverse. The lifecycle set-up: environments, how Microsoft updates are tested, and whether the project lives in Lifecycle Services or the Power Platform admin center. And performance: colliding batch jobs, slow forms and reports traced to custom code, integration volumes at peak, and month end runs. The output is the same evidence-backed backlog and stabilisation plan as every other health check.
Do you provide an independent assessment if we no longer trust our current Dynamics 365 partner?
Yes. That is one of the most common reasons clients call us. Solzet acts as an independent assessment firm and gives you a second opinion on a Dynamics 365 Customer Engagement or Power Platform environment we had no part in building. Independence here is concrete rather than a claim: we did not make any of the design decisions, so we have nothing to defend; the price is fixed before we start and does not move with what we find; every finding names the solution component, security role, query, flow run, trace entry, or record count it rests on so anyone can reproduce it; and the report is yours to send to your incumbent, another partner, your board, or your own team. Where the build turns out to be broadly sound and the real constraint is scope, budget, or an internal decision rather than the partner, we write that down just as clearly.
Can an independent assessment give us evidence to terminate or renegotiate with our Dynamics 365 partner?
Yes, with clear limits. For this use the assessment produces an evidence pack: each finding tied to the artifact it rests on, such as a solution layer, plug-in step, flow run, security role, query, or record count; a rating by business risk and remediation effort that separates defects from arguable design choices; a contracted versus delivered map built from the statement of work, change requests, and sign-off records you provide; the supportability and handover position; and a remediation sequence the incumbent or any other supplier can price. It also records what is sound, because a balanced pack is harder to dismiss. It is a technical assessment, not a legal opinion, and your legal adviser draws the contractual conclusions.
Does the assessment give a legal opinion on our partner contract?
No. We do not interpret the legal effect of the contract or advise on termination rights, breach, liability, remedies, or damages, and the report is not an expert report prepared for litigation or arbitration. Where the contract documents are ambiguous about what was agreed, we mark the item ambiguous rather than choosing a reading. The pack gives your lawyer reproducible technical facts to work with; if proceedings are likely, they should decide how any technical expert is instructed before work starts.
How does your independent assessment compare with a large systems integrator assessment offer?
It is narrower and deeper. Large systems integrators and global Microsoft partners often assess a whole business applications estate, including organizational change. Solzet assesses the Dynamics 365 and Power Platform environments you name, Customer Engagement, Business Central and Finance and Operations included, with senior consultants reading the solution, code, logs, and data directly, at a fixed price and fixed end date, with no rebuild proposal and a report you own and can act on with any supplier. A larger firm is the better choice when you need a multi-country programme review or a supplier already on an enterprise panel.
Is there a sales pitch at the end of the health check?
There is none. The closing walkthrough covers the findings, the evidence, and the priorities, and then it stops. There is no proposal attached to it and no follow-up sales sequence. If you want us to quote for any of the remediation you have to ask, and many clients never do. The assessment is quoted as a fixed price against an agreed list of environments and apps, with a fixed end date, so nothing about the severity of the report changes what it costs you or earns us. An audit whose price or follow-on work depends on how alarming its own findings are is not an audit.
What does the independent assessment method actually look at?
Five dimensions, each with named evidence and a stated verdict. Technical health reads the environment and solution inventory, the release position against what is deprecated, form and view load timings, plug-in and flow execution times from the trace log and run history, integration failure rates, and capacity consumption. Customization quality reads the solution layers, plug-in and custom API code, form JavaScript, PCF and canvas components, and the path a change travels to production. Data integrity reads duplicate rates, completeness of the columns decisions depend on, stale and orphaned records, reference data consistency, and integration reconciliation against the source. Security posture reads roles, teams, business units, field-level security, sharing, service accounts bound to individuals, DLP coverage, and administrative access. Business process alignment compares the configured processes against how the work is really done, including the spreadsheets and mailboxes people have moved back to. The five converge into a single prioritized remediation roadmap.
What is in the prioritized remediation roadmap?
One sequenced plan rather than a longer list of worries. Each item carries a severity, a rough effort in days, the dimension it came from, the business consequence of leaving it alone, and a suggested owner. The ordering is deliberate: live security and data integrity exposures first, then the technical health items costing users time every day, then the customization quality work that has to happen before anything else can be changed safely, then the process alignment items that usually need a business decision rather than an engineer. The roadmap also states what we would not do and why, because leaving a working thing alone is easier to recommend when nobody is quoting for the result.
What should any Dynamics 365 assessment hand over before remediation starts?
Six things, whoever runs it. A solution and customization inventory that reconciles with what your administrator sees. A plug-in and flow map showing what fires on each record event and which components run under a named person. Data-quality findings that name the table, the rule and the result, so they can be measured again. A security review written as a register of who can see and export what. One prioritized remediation backlog with severity, effort range, dependencies and an owner per item. And a salvage or rebuild recommendation per area, argued from the evidence. If an assessment ends without all six, the remediation that follows is being planned on opinion.
What acceptance criteria should we put in a Dynamics 365 assessment contract?
Name the six deliverables as written artifacts due by a fixed date, in an editable format you keep. Require every finding to cite the component, environment and date it rests on. Limit the work to read access, with access removed on a stated date. Fix the fee before work starts and keep it independent of the findings and of any follow-on award. State that you own the report and may share it with any partner, your auditors or your board. Include a walkthrough and a clarification period, and list the environments and apps in scope and anything excluded.
What are the red flags in a Dynamics 365 remediation proposal that skips discovery?
A fixed remediation or rebuild price before anyone has read the environment. Discovery made only of workshops, with no reading of solutions, code, run history or data. No named deliverables at the end of discovery. An assessment that is free only if you also sign the remediation. A rebuild or re-licensing recommendation with no salvage analysis behind it. Unnamed or junior assessors, or a request for administrator write access to do read-only work. And silence on data quality and security. Any one of these means the proposal is pricing a guess.
What if the assessment finds the project is failing rather than underperforming?
A health check assumes there is a working system worth improving. Occasionally the evidence shows something else: a build that cannot be made safe to change, an implementation that has stalled rather than slowed, or a situation where the honest recommendation is to move the work elsewhere. We keep that on separate pages rather than blurring the two. Our guide to rescuing a failed or stalled Dynamics 365 implementation covers the root cause families and how delivery is put back on track, and our Dynamics 365 project rescue and takeover service covers the emergency takeover, stabilization, and the fixed scope reset that follows. Running the assessment first is the point, because a decision that large should rest on evidence rather than on frustration.
What does the health check audit cover?
Six areas by default: configuration and customization, including the Dataverse data model, forms, business rules, apps, plug-ins, and PCF controls; security and access across roles, teams, and field-level security; performance and scalability; data quality and hygiene; business-process alignment; and integrations, environment strategy, and application lifecycle management. We agree the exact scope and the apps and environments included before we start, so you know precisely what the fixed price covers.
Do you audit Power Platform governance and licensing sprawl?
Yes. The Power Platform governance and licensing audit is a named, fixed-scope module of the health check, priced per tenant against an agreed number of environments. It is checklist driven and covers unused and abandoned apps and flows, premium connector usage against the Premium and Per App licenses people actually hold, orphaned and duplicate Dataverse environments and the capacity they consume, hidden ownership and key-person risk such as production flows owned by a leaver or bound to a personal account, DLP policy and connector governance, and recoverable storage and license waste. You get a governance register listing every app, flow, and environment with its owner, its last real use, its licensing position, and a recommended action of keep, reassign, or retire.
How do we audit and triage a portfolio of citizen-developed Power Apps of wildly varying quality?
Score first, then triage. Inventory every app and flow shared beyond its maker from the Power Platform admin center or the CoE Starter Kit. Score each on four factors from 0 to 3: what data it touches, how widely it is shared, whether it writes to a system of record, and whether anyone still owns it, and put anything already implicated in a leak or shared externally at the top regardless of score. Read business criticality separately by asking what stops if it is switched off. Then contain the highest-risk few immediately, formally adopt the business-critical ones into a supported solution and deployment route, and retire the rest with notice and an agreed quarantine period.
Which citizen-developed apps should we contain, adopt, or retire?
Risk decides the speed and criticality decides the action. Contain the handful with the highest risk scores or a leak override straight away by removing wide and external sharing, disabling flows that write to systems of record under personal connections, and applying DLP to the environment. Adopt the assets whose loss would stop a real business process: give them a business and technical owner, move them into a managed environment as a solution, and put their connections on a service identity. Retire everything that is neither critical nor owned, with a dated notice, a contact, and a route to claim it, and keep the exported package until the quarantine period ends.
What evidence should we preserve when a Power App has been involved in a data leak?
Capture it before anyone fixes anything. Export the app or solution package, record the sharing list, the connections and the identities they run under, the owner and the environment, and export the relevant activity from the Microsoft Purview audit log for the period in question. Flow run history and audit log retention are limited and depend on licensing, so check current Microsoft documentation and export early. Unshare and disable the app rather than deleting it, and keep a dated record of every containment action taken, because the timeline is part of what compliance and any investigator will ask for.
What should we tell compliance while the Power Apps triage is still in progress?
Send short written updates on a fixed cadence: what the inventory covers so far, the scoring method and the evidence behind the order, what has been contained and when, what evidence has been preserved and where it is stored, what is being adopted or retired and by which date, and what is still unknown. Do not speculate about the extent of an exposure you have not yet confirmed. Whether an incident must be notified to a regulator is a decision for your data protection officer or legal adviser, so give them the facts as soon as you have them rather than after the triage finishes.
We have hundreds of flows and apps with no source control and no testing. Do we have to rebuild the foundation first?
Usually not. Rebuilding everything before you know what matters spends effort on assets you will retire. Score and triage the portfolio first, contain the risky few, retire what nobody needs, and then build the foundation around the business-critical set: managed environments, solutions, source control, a service identity for connections, and a repeatable deployment route. Each adopted asset joins that route one at a time, and only the ones that cannot be made supportable in place are rebuilt. The deployment mechanics are in our guide to Power Platform ALM with PAC CLI and pipelines, and the ongoing capability in our guide to a Power Apps Center of Excellence with a nearshore team.
Can a single platform owner triage citizen-developed apps with no budget?
The scoring and containment can be done without buying anything. The Power Platform admin center, the Microsoft Purview audit log where your existing licensing includes it, and the Microsoft CoE Starter Kit are enough to inventory, score, and contain a portfolio, and for a small portfolio a spreadsheet is enough. Where it stops being a one-person job is adoption: moving critical apps into solutions, re-pointing connections, rebuilding the ones that cannot be supported, and setting up a deployment route takes engineering time. That is the part worth costing and taking to budget holders, with the scored list as the evidence.
A department built apps on a trial plan and an unexpected Power Platform bill is coming. How do we stop it?
Contain it in order. First, establish who uses which app under which licence, from the Power Platform admin center, the Microsoft 365 admin center, and the CoE Starter Kit inventory. Second, read what each trial turns into and when, and turn off recurring billing where no decision has been made; trial terms change, so check current Microsoft licensing documentation rather than assuming a duration. Third, pause further sharing and self-service sign-ups without cutting off current users. Fourth, separate apps that genuinely need premium capability from those that can move to standard connectors and SharePoint. Fifth, evaluate per user, per app, and pay-as-you-go options for the premium set with your licensing partner. Then consolidate onto licensed environments and identities, restrict environment creation, and add an approval gate before any app reaches a large audience.
Which Power Apps genuinely need premium licences, and which can move to standard connectors and SharePoint?
An app needs premium capability when it relies on Dataverse for relational data, row level security, or auditing, on premium or custom connectors such as SQL Server or HTTP, on a model-driven app, or on flows with premium actions or desktop automation. Simple forms, trackers, and approvals often run on SharePoint lists, Outlook, Teams, and Approvals with standard connectors under the Power Platform use rights included with many Microsoft 365 plans. Moving has trade-offs: SharePoint lists have delegation and volume limits and a weaker security model, so sensitive or high volume data should stay on a properly licensed platform. Confirm what your own plans include in current Microsoft documentation.
How do we stop departments creating trial environments and sharing apps to hundreds of users without approval?
Use the controls the platform already has. In the Power Platform admin center tenant settings, restrict creation of trial, sandbox, and production environments to administrators and route makers to personal developer environments. Review the tenant settings for self-service trial sign-up and self-service purchase. Apply DLP policies that keep premium and custom connectors out of the default environment. Where Managed Environments fit your licensing, set sharing limits so apps cannot be shared with whole security groups or beyond a set number of people. Then make sharing beyond a handful of colleagues a request with an approver who checks the licence position, the data, and who supports the app.
Do you provide Power Apps audit and cleanup services?
Yes, and we do the cleanup as well as the audit. The audit produces the register: every canvas app, model-driven app, cloud flow, environment, and connection, with its owner, its last real use, its licensing position, and a recommended action. The cleanup engagement then executes it, covering orphaned and abandoned apps, unused, duplicated, and quietly failing flows, a rebuilt security role model, Dataverse sprawl across environments, tables, and columns, license optimization against actual usage, and a properly deployed Center of Excellence Starter Kit. The deliverable is an actionable cleanup plan with prioritized remediation steps, each carrying an owner, an effort estimate, a risk rating, and a way to undo it. The sequence runs freeze and confirm, reversible retirements, ownership and licensing corrections, consolidation and rebuild, guardrails, then a re-run of the inventory so the recovered licenses and retired items are measured rather than claimed. You can buy the audit on its own and run the cleanup with your own team.
Can you implement the governance framework, not just recommend one?
Yes. The governance framework implementation is delivered as working artifacts rather than a policy document. It covers an environment strategy with named environments, owners, lifespans, and a decision about the default environment; written policies for data loss prevention and connector classification, naming and solution standards, data residency and retention, and what a maker may build alone; a request and approval workflow built as a Power Platform application so a maker can request an environment, a premium connector, or a promotion to production and have approval provision it automatically and record it with an owner; ownership, review, and expiry rules including service principal connections and ownership transfer in the leaver process; a solution-based promotion path with pipelines from development to production; and the review cadence, reporting, and maker enablement that keep it running after we step back. The guardrails go on after the cleanup, not before, because enforcing policy against an estate that already breaks it produces noise nobody acts on.
Do you deploy and configure the CoE Starter Kit?
Yes, and we fix the common installation problems while we are there. The Microsoft Center of Excellence Starter Kit is the right tooling for keeping the register true after a cleanup, and it is regularly installed into the default environment, running on a maker personal connection, with the inventory flows failing quietly within weeks of go live. We deploy it into a dedicated environment on service principal connections, get the inventory, compliance, and cleanup components actually running, configure the audit and archive processes against your own retention rules, and hand over the dashboards your administrators will use day to day. It is instrumentation rather than a governance programme, so we set it up to enforce and report on your policies rather than in place of having any.
Should we buy a governance app from the marketplace instead of hiring a consultant?
A governance product will show you dashboards of the sprawl, and if you already own one we are happy to work alongside it. It answers a question you can largely answer already with the Power Platform admin center and the CoE Starter Kit, which Microsoft provides at no additional cost, and it stops where the difficult part begins. No product decides that the app with two users is the one your month end depends on, calls the business owner to agree a retirement, rebuilds a security role model, or rewires forty flows off a departed employee account. Installing another app into a tenant that already has too many apps is not a cleanup. The other thing a marketplace listing cannot offer is independence: we did not build your apps, we do not sell a platform product, the fixed fee does not move with the size of the cleanup we find, and the plan is written so your own team or any other Microsoft partner can execute it.
Why is our Dynamics 365 Field Service schedule board so slow?
Almost always a stack of causes rather than one. Work through them in this order. First, time the board in the browser network tab to separate slow server calls from slow rendering. Second, count the resources the tab actually returns, because the board draws a row for every bookable resource the filter allows, including equipment, crews, and leavers nobody removed. Third, narrow the view type and date range, since the payload is resources multiplied by time slots multiplied by bookings and an hourly view across a month is the most expensive request the board can make. Fourth, check the unscheduled requirement panel, which runs its own view query on every refresh and is often left pointing at an unfiltered view. Fifth, list the synchronous plugin steps and real-time workflows registered on the Bookable Resource Booking table, including any on RetrieveMultiple, and read their execution times in the plugin trace log. After that, look at booking and resource cell templates, the auto-refresh interval, the map, booking table volume and indexing, and finally the client machine and network.
What can we do if configuration changes do not make the schedule board fast enough?
Then the problem is in the build rather than the settings, and the remedies are engineering ones. Move synchronous plugins and real-time workflows on booking operations to asynchronous or set-based logic so they stop running on every drag and refresh. Archive closed bookings out of the table the board queries and index the custom columns your filters and views sort on. Virtualize the dispatch view so only the rows and time columns on screen are rendered, which stops the cost scaling with the size of the operation. Where the standard board still cannot give a dispatch team the view they need, we build a purpose-built PowerApps Component Framework control in TypeScript and React with server-side paging, virtualized rendering, and only the columns that team works from. Solzet delivers this through our Dynamics 365 Customer Engagement consulting service, or through our project rescue and takeover service when the customizations causing the problem were left behind by a previous implementation.
An auditor has flagged Power Platform environment sprawl. How do we reach a defensible position before the deadline?
Sequence it over roughly 90 days, adjusted to the size of the estate. First, inventory every environment, app, flow, and connection with its owner, and mark what touches regulated data. Second, contain: analyze what the target DLP policies would break, agree fixes or exceptions, then enforce on the regulated data environments and the default environment, and move regulated production flows off personal connections. Third, put the structure in: an environment strategy by purpose, naming and ownership standards, an approved build route, and a maker onboarding path. Fourth, run one full review cycle and keep the evidence, including an exceptions register and a dated plan for the remaining cleanup. Auditors rarely expect a finished cleanup; they expect control over the regulated part and a process that is demonstrably running. The approved build route must exist before freedoms are removed, or makers move to personal accounts and unsanctioned tools and the finding gets worse.
Does Power Platform DLP have a monitoring or audit-only mode?
No. A DLP policy is enforced as soon as it applies, and flows that break it are suspended while apps can no longer use the blocked connector combination. The honest equivalent of monitoring is impact analysis before enforcement: compare the connector usage per app and flow from the CoE Starter Kit inventory with the proposed policy, use the DLP editor in the CoE Starter Kit or the impact information in the admin center where available, apply the policy first to a test environment or a small set of environments, fix or grant a documented exception for what would break, announce the date, and only then widen the scope.
How do we show finance which Power Platform environments consume Dataverse capacity?
Dataverse database, file, and log capacity is pooled at tenant level, but the Power Platform admin center reports consumption per environment. Give every environment a business owner and a cost center in the register, record its consumption each month, and report capacity by owner alongside the actions that reduce it, such as retiring copies of production data in sandboxes and trials, deleting old logs, and archiving attachments. Where you want true chargeback, pay-as-you-go billing policies can link specific environments to an Azure subscription, which changes how those environments are licensed, so it is a decision to make deliberately rather than a reporting fix.
How is this different from setting up a Center of Excellence?
The audit tells you what is actually in your tenant today and what to do about it. A Center of Excellence is the ongoing capability that keeps it that way, with an environment strategy, DLP policies, solution-based ALM, reusable components, and enablement for your makers. The two fit together: the audit produces the inventory and the proposed guardrails, so any CoE you build afterwards is written against real findings rather than in the abstract. Our guide to building a Power Apps Center of Excellence covers that next step, and our Power Platform consulting service covers the build and support work that follows. Neither is an obligation, since the audit and its action plan stand on their own.
When is the right time to run one?
The common triggers are before a major upgrade or wave release, so you clean up before you carry problems forward; post-implementation, to confirm the go live left the system secure and performant before you scale it; and whenever performance is declining and you need to know why. It is also the right move when you have inherited a system nobody can fully explain, when security or licensing feels unclear, or when you are deciding whether to optimize the current design or rework part of it.
Does the health check cover Dynamics 365 Sales?
Yes. We run health checks across the Dynamics 365 Customer Engagement apps, including Dynamics 365 Sales, as well as Customer Service, Field Service, and the wider Power Platform. For a Sales environment that means the lead and opportunity process, business process flows, forecasting and rollups, security roles, data quality in the sales pipeline, and the customizations and integrations around them, assessed against how your sales team actually works.
What do we get at the end?
A written assessment report and a prioritized action plan. The report describes the state of the environment across each dimension in scope, with evidence for every finding. The action plan rates findings by impact and effort and groups them into optimization, cleanup, and roadmap, so you know what to fix now, what to improve next, and what to plan for. It is specific and vendor-neutral enough to hand to your internal team or any Microsoft partner, whether or not Solzet does the follow-on work.
Do you deliver health checks in Germany and the rest of Europe?
Yes. Solzet is a Microsoft Dynamics 365 and Power Platform consultancy based in Yerevan, Armenia, delivering to clients and partners across Europe, including Germany, and the US, for Customer Engagement, Business Central and Finance and Operations alike. A health check is a read-access assessment, so we run it remotely as a matter of course. We also work on a B2B and white-label basis for other Microsoft partners who want an independent audit of a client environment without introducing a new face.
Related: Services | Dynamics 365 Business Central | Dynamics 365 Finance and Operations | Project Takeover | Dynamics 365 Consulting | Power Platform Consulting
Want an honest read on your Dynamics 365 system?
Solzet runs fixed-price health checks of Dynamics 365 Customer Engagement, Power Platform, Business Central and Finance and Operations implementations, ending in a prioritized remediation roadmap and stabilisation plan you own outright. We did not build your system and we are not pitching for the follow-on work. Tell us what is in scope and we will give you an independent, evidence-based second opinion, directly or on a white-label basis for your team. We recommend the right solution: Dynamics 365 (Customer Engagement, Business Central or Finance and Operations), Power Platform, or a custom-built CRM. One team for CRM, ERP and the integration between them.