Skip to content

Dynamics 365 User Adoption Isn't Failing on Features. It's Failing on Clicks

Stalled Dynamics 365 rollouts rarely lack features. They lose to a UX tax of clicks and detours. Here is how to find it, fix it, and why fixes now take days.

Alex Pechenizkiy 9 min read
Dynamics 365 User Adoption Isn't Failing on Features. It's Failing on Clicks

When a Dynamics 365 rollout stalls, the diagnosis arrives on schedule: the users need more training, or the system is missing a feature, so let’s scope phase two. Both diagnoses are usually wrong, and both miss what actually kills Dynamics 365 user adoption. Not always wrong. If users genuinely don’t understand the sales process, train them. If the capability truly doesn’t exist, build it. But most of the time the system already does everything the users need. The real problem is that every routine task costs too much.

Too many clicks. Too much tab-switching. Too many fields that don’t matter standing between the user and the three that do. Call it the UX tax. Users rarely refuse a system outright. They route around it. The spreadsheet open next to the browser, the “I’ll update it later” that never happens, the question shouted across the desk instead of a record lookup. That routing is the adoption failure. Everything else is a symptom.

Treat adoption as a cost-per-task problem, not a training problem, and the fix list changes completely.

How to spot the UX tax draining Dynamics 365 user adoption

You don’t need telemetry, a survey, or a change-management workshop. You need ten minutes and a chair next to a real user. Four symptoms give it away:

  1. Count the click path for the top three daily tasks. Not the demo path. The real path, including the scroll, the tab switch, and the search for the right view.
  2. Look for the spreadsheet. If there’s an Excel window open next to the model-driven app, that spreadsheet is a bug report nobody filed.
  3. Listen for “I’ll update it later.” Later means the data arrives stale, batched, and half-remembered. Your pipeline reports are already fiction.
  4. Watch who asks a colleague instead of checking the record. When asking a human is faster than reading the system, the system has lost.

Here is a worked example, explicitly illustrative. Count your own tenant, because configuration and release wave change the path. A service rep wants to know who changed the priority on a case and when. In a default-configured environment that means: open the record, find Related, click Audit History, scan a summary grid, open the change row. Several interactions before the answer appears, and that assumes auditing is enabled at the environment, table, and column level, and that the rep’s security role includes the audit privilege. In practice one of those assumptions regularly fails, and the answer becomes “ask an admin.”

The threshold is brutally simple: if a daily task costs more clicks than opening Excel, Excel wins. Every time.

The usual offenders on model-driven forms and views

The villains here are not exotic. They are defaults, and defaults are generic by design. Your users are not.

Forms carrying every field anyone ever requested. A main form accretes fields the way a garage accretes boxes. Two years in, the three fields a rep actually edits on every call sit below the fold, behind a tab, under a section someone added for a project that ended long ago. Microsoft’s form designer gives you everything needed to fix this for free. Few teams ever go back and do it.

Context buried under Related. Audit history, connected records, the reason a value looks wrong - all of it lives two or more clicks away from where the user actually works. The platform treats context as a destination. Users treat it as a cost.

Views that answer the admin’s question. “All Active Accounts” answers a governance question. The user’s question is “what needs my attention today.” A view that doesn’t answer that question is a view the user replaces with a mental model, a sticky note, or a spreadsheet.

Admin-only detours. Checking Dynamics 365 audit history properly, or untangling which of several Dataverse security roles grants a permission, means leaving the record entirely and often means being an admin at all. Per Microsoft’s own documentation, auditing requires enablement at three levels plus a specific privilege, and security role inspection is an admin-center activity with no self-service equivalent for the people actually affected.

Some of these you fix with configuration. Some need a model-driven app custom UI element where configuration can’t reach.

Either way, the takeaway is the same: every “go look it up somewhere else” moment is adoption leaking out of the system.

What a targeted fix looks like

There is a right order here, and I’ll take the position plainly: climb this ladder from the bottom, and only climb as high as the problem forces you.

  1. 1

    Form redesign first

    Free, config only, zero code. Put the three fields that matter above the fold. Delete or collapse the archaeology. Often an afternoon of config work rather than a project, and it is the highest-impact move few teams ever make.

  2. 2

    Inline context second

    Personal and system views that answer the user's question, embedded grids, and quick-view forms that pull connected context onto the main form instead of behind Related.

  3. 3

    Purpose-built control last

    A PCF control or custom page only where configuration genuinely cannot close the gap. Model-driven app custom UI is a scalpel, not a default.

A config-only example of rung one: a case form where the rep’s call workflow needs status, priority, next action, and customer sentiment. Move those four into a single visible section at the top, collapse everything else, and the per-call editing cost drops without a line of code. Illustrative, obviously. Count your own form.

Rungs one and two are free, and they remove the detours users feel most often. The two detours configuration cannot reach are audit history and permissions, and for those the fix is a purpose-built control. The spec matters more than the code, so here is what a good one looks like for each.

Inline audit history. Put the audit trail where the question happens: a quick peek at the most recent change, a deep dive into the full trail on demand, and a status indicator on the field itself. The Related, Audit History, scroll, open-the-row trek becomes a glance at the spot where the user already is. The Dynamics 365 audit history data was always there. The platform just filed it two clicks away from the question.

A permissions lens. A read-only investigation surface for Dataverse security roles: a user’s effective access, the source of every permission, and reverse lookup for “who can do X on table Y” - without spelunking through role matrices in the admin center. Permissions questions are where a lot of AI and automation plans quietly die too, which is why I keep arguing that Dataverse security design has to be explicit before you trust anything automated with it.

Notice what both specs have in common. Neither adds a new app to learn. A good fix removes a detour at the exact spot users feel it. If your fix requires its own training session, you’ve built a new tax, not removed one.

Why “days, not projects” is now true, and what still takes judgment

Not long ago, a custom PCF control was a project: estimate, sprint, test cycle, deploy window. AI-assisted development collapses the component-internals part of that work to days - for a targeted, well-scoped fix with the architecture already decided. That qualifier is the whole point. The speed is real, but it is only repeatable when the work starts from a written spec and a documented playbook rather than ad hoc prompting. I’ve written before about turning work items into specs an AI agent can actually build from, and that discipline is exactly what separates repeatable speed from lucky speed.

Which brings me to vibe coding Dynamics 365 controls - prompting an AI into working code without deciding the architecture first, and shipping whatever compiles. For a throwaway prototype, fine. For a control going into a production Dataverse environment, it is new debt with a faster printing press. Here’s why, and this is the core of PCF best practices:

The Power Apps component framework docs make PCF look like “write a component, ship it.” In production, the hard parts are the parts the AI never decides for you:

  • Control identity is a one-time commitment. The manifest namespace and constructor name form the control’s identity. Change them and the platform treats the result as a new control, while every existing instance still points at the old one.
  • Manifest bindings are a contract. Removing or renaming a bound property is a breaking change for every form that uses it. Additive-only evolution is the safe path, and it has to be designed for on day one.
  • Solution layering decides your dependency graph. Put the control in the wrong solution and every future upgrade inherits the mistake.
  • Versioning and managed-solution upgrade mechanics determine whether the next upgrade deploys cleanly or torches a weekend.

An AI will happily generate a control with a careless namespace, chatty bindings, and no versioning story, and it will demo beautifully. Then the next requirement wave arrives and the “two-day fix” becomes a rewrite. AI changed the cost of building. It did not change the cost of bad architecture.

The honest Dynamics 365 ROI comparison

When adoption plateaus, three options usually land on the decision maker’s desk. If you are the one being pitched options two or three as the adoption fix, this table is for you. Qualitative on purpose - any dollar figure here would be invented, and you should distrust vendors whose figures aren’t.

Dimension
Cost profile
Fix the existing UI
Low. Mostly config; code only for targeted controls
Buy more licenses / add-ons
Medium and recurring. Per-user, forever
Re-platform
High. License plus migration plus retraining
Dimension
Time to user impact
Fix the existing UI
Shortest. Days to weeks for scoped fixes
Buy more licenses / add-ons
Weeks to months, if the add-on even targets the real friction
Re-platform
Longest by far. Measured in quarters, not weeks
Dimension
Risk
Fix the existing UI
Low. Reversible, incremental, in-place
Buy more licenses / add-ons
Medium. New moving parts on top of unfixed friction
Re-platform
High. Data migration, process rebuild, adoption starts over
Dimension
Effect on adoption
Fix the existing UI
Direct. Removes the exact clicks users feel
Buy more licenses / add-ons
Indirect at best. The buried form is still buried
Re-platform
Resets it. The UX tax moves to a new address

The strong position: the cheapest adoption lever is almost always the system already deployed. Add-on licensing stacks cost on top of friction it doesn’t remove. Re-platforming is the most expensive way to rediscover that generic defaults are generic everywhere - soon enough you’ll be staring at a different vendor’s “All Active Records” view wondering why adoption stalled again. There are exceptions. If the platform genuinely lacks a core capability your business runs on, no amount of form polish saves you. That case is rarer than the pitch decks claim.

So here is the whole self-audit, and it costs nothing. This week, sit next to one user. Watch them do one routine task end to end. Count the clicks, the scrolls, the tab switches, and the moment they open something that isn’t Dynamics. Then fix the worst detour first: redesign the form, fix the view, and only then reach for a control.

Dynamics 365 user adoption is not bought with licenses or re-platforms. It is won one removed click at a time. Go count yours.

Want this for your Dynamics 365 app?

Tell me which screens or steps slow your team down. I read every message and reply personally with what I would fix first, and whether it is a maker fix, a custom page, or a PCF control.

Stay in the loop

Get new posts delivered to your inbox. No spam, unsubscribe anytime.

Related articles