---
title: "Microsoft Dynamics 365 CRM Development"
canonical_url: https://msdynamicsguys.com/solutions/dynamics-365-crm/
description: "MS Dynamics Guys configures and extends Microsoft Dynamics 365 CRM apps on Dataverse, using plug-ins, custom APIs and PCF only where needed."
publisher: "MS Dynamics Guys"
last_modified: 2026-10-14
---

# Microsoft Dynamics 365 CRM development and customization on Dataverse

> **Short answer:** MS Dynamics Guys extends Microsoft Dynamics 365 CRM apps, such as Sales, Customer Service and Field Service, without replacing them. These apps run on Microsoft Dataverse, so the work is configuration first, then C# plug-ins, custom APIs and PCF controls where configuration stops. We repair fragile flows and customizations, design security roles that match your teams, and release every change as a managed solution.

**At a glance**

- **Apps:** Microsoft Dynamics 365 Sales, Customer Service, Field Service and model-driven apps on Dataverse
- **Typical work:** Data model, forms and views, plug-ins, custom APIs, PCF controls, security roles
- **Release model:** Managed solutions built in development and promoted through test to production
- **Different platform:** Business Central is extended in AL; see [Business Central development](https://msdynamicsguys.com/solutions/business-central/development/)

[Discuss your CRM change](https://msdynamicsguys.com/contact/#intent=project&service=D01) · [Hire a Dynamics CRM developer](https://msdynamicsguys.com/hire/dynamics-365-crm-developers/)

## What counts as Microsoft Dynamics 365 CRM development?

Buyers say CRM, CE or customer engagement. Microsoft calls them customer engagement apps: Microsoft Dynamics 365 Sales, Customer Service, Field Service and Customer Insights - Journeys. They share one platform, Microsoft Dataverse, with the same tables, security model and solution packaging. One development approach therefore covers all of them, and model-driven Power Apps built on the same tables.

Business Central and Finance and Supply Chain Management are separate ERP products. They use AL and X++, not Dataverse plug-ins, and need different specialists. If your project spans both worlds, the CRM side is built here and the ERP side follows its own product rules; [our product comparison](https://msdynamicsguys.com/solutions/) explains the split.

Before we change anything, we confirm which apps and licenses you run, which solutions are installed, and what was customized outside a solution.

If customers or dealers need a separate website to submit or view records, review [Power Pages development for customer and partner portals](https://msdynamicsguys.com/power-platform/power-pages-development/). The portal plan defines each audience's sign-in, permitted records and access checks. It is a different scope from changes to the internal CRM screens.

## How a CRM requirement moves from configuration to code

Microsoft's own guidance is to try declarative options before plug-ins. We follow the same order and record why a requirement needed code.

**Configuration first, then code: typical Dataverse decisions**

| Requirement | Start with configuration | Move further when | Next option |
|---|---|---|---|
| Validate data or set defaults | Business rules and form settings | The check must also cover imports, integrations and API calls | A plug-in registered on the Dataverse event pipeline |
| Calculate a value | Formula, calculated or rollup columns | The logic needs related data or conditions those columns cannot express | A plug-in or a custom API |
| React after a record changes | A Power Automate cloud flow | The step must be transactional, quick at volume, or covered by unit tests | A synchronous or asynchronous plug-in |
| Offer a business operation to other systems | The standard Dataverse Web API | Callers need one stable operation with defined inputs and outputs | A custom API |
| Show data in a richer control | Standard controls, views and charts | Users need an interaction the standard controls lack | A PCF (Power Apps component framework) control in TypeScript |
| Limit who sees sensitive fields | Security roles and business units | Single columns, such as salary or credit terms, need tighter rules | Column-level security profiles, which remain configuration |

## Can MS Dynamics Guys extend our Microsoft Dynamics 365 CRM without replacing it?

Usually, yes. Most CRM problems come from a few causes: a data model that grew without a plan, security that no longer matches the organization, or customizations nobody owns. Fixing those in place keeps your data, history and integrations. Replacing the platform repeats the migration and retraining cost.

We start with a review of the environment. It needs:

- System customizer access to a sandbox copy of production.
- The installed solutions, plus the source code of any plug-ins and PCF controls.
- A list of integrations, the application users they run as, and scheduled jobs.
- Known problems from users and support tickets from the last few months.

The review lists what to keep, what to repair and what to retire. Changes made directly in production as unmanaged customizations are captured in a solution first, because they sit in the unmanaged layer above every managed solution and can hide the behavior of later releases.

## Replacing fragile flows with something maintainable

Many CRM environments depend on dozens of Power Automate flows built over several years. Most work, until one fails quietly.

These failure patterns come up repeatedly:

- Flows owned by a person who has left, running on that person's connection.
- No error path, so a failed step leaves records half updated and nobody is told.
- A flow that updates the record that triggered it, causing loops or duplicate work.
- Chains of flows that only work in a particular order.
- Transactional rules, such as credit checks, built as flows that run after the save.

We inventory the flows with their owners, triggers and connections, then decide case by case. A flow stays a flow when business users need to change it and the work tolerates retries. It moves into a plug-in when the rule must hold inside the save, at volume, or under automated tests.

Flows that stay are hardened: Try and Catch scopes, Run after paths for failures, retry policies, the Terminate action for clear failure states, and connections owned by a service account rather than a person. Failed runs alert a named owner, and Application Insights can collect flow errors for trend reporting.

## Security design in Dataverse

Dataverse security has several layers, and most access problems come from mixing them up:

- **Security roles** grant privileges per table at an access level: user, business unit, parent and child business units, or organization. Roles add up, so one generous role widens access everywhere it applies.
- **Business units** separate data between regions, brands or legal entities.
- **Teams** give groups shared ownership or access to records without copying roles to every person.
- **Column-level security profiles** restrict reading or updating single columns. They do not apply to system administrators, so the administrator role stays with very few people.
- **Application users** run integrations with only the privileges each integration needs.

We document the model in a role matrix your administrators can maintain, and we test it with real user accounts rather than an administrator login.

## How MS Dynamics Guys delivers a CRM change

Every change follows the same path, whether it is a new column or a plug-in. Details of environments and acceptance are on [how we work](https://msdynamicsguys.com/how-we-work/).

1. **Map the solution layers:** We list installed solutions, publishers and unmanaged changes, so a release cannot overwrite work that already exists.
2. **Build in a development environment:** Configuration and code are built in development, inside a solution with your publisher prefix, never directly in production.
3. **Store everything in source control:** Solution files are unpacked into your repository next to plug-in and PCF source, so each change is reviewable.
4. **Review and test:** A second engineer reviews code and configuration. Plug-in logic runs in unit tests, and the release runs in a test environment against agreed scenarios.
5. **Release as a managed solution:** Changes reach test and production as managed solutions through a pipeline, with release notes for your administrators.
6. **Monitor after release:** We check plug-in traces, failed flow runs and user feedback during the first weeks, then hand over.

## A delivered change, or a specialist in your team?

The steps above describe project work: MS Dynamics Guys agrees a change, builds it, passes acceptance and hands it over. Some companies already run their own CRM backlog, code reviews and releases. They need extra people inside that process, not a provider with a separate one.

- **C# and PCF work.** A [Microsoft Dynamics 365 CRM developer](https://msdynamicsguys.com/hire/dynamics-365-crm-developers/) joins your team. Your lead assigns plug-ins, custom APIs and controls. The developer builds, tests and documents each one in your solution.
- **Configuration and testing.** A [CRM consultant](https://msdynamicsguys.com/hire/dynamics-365-crm-consultants/) runs workshops, configures forms and security roles, and prepares user acceptance testing (UAT). The consultant hands each rule that needs code to a developer as a written requirement.
- **The sales process alone.** A [Sales consultant](https://msdynamicsguys.com/hire/dynamics-365-sales-consultants/) works with your sales operations lead on leads, pipeline stages and forecasts.

In [staff augmentation](https://msdynamicsguys.com/services/dynamics-365-staff-augmentation/), your lead directs that person day to day, and the agreement covers onboarding, access and the exit.

## Common Microsoft Dynamics 365 CRM requests and where the work stops

**CRM scenarios: what MS Dynamics Guys does and the boundary**

| Scenario | What MS Dynamics Guys does | Boundary |
|---|---|---|
| A sales approval needs rules the standard process cannot express | Builds the rule as configuration, or as a tested plug-in when configuration cannot enforce it | Your process owners define the approval rules and limits |
| Customer Service needs data from another system before a case is assigned | Brings the data in through an integration or a custom API and tests the assignment that depends on it | Routing rules stay configuration inside Customer Service |
| Field technicians need a control the mobile form does not offer | Builds a PCF control and tests it on the devices your technicians carry | Offline behavior depends on the mobile offline setup and is tested separately |
| A form takes seconds to open or save | Traces synchronous plug-ins, scripts and form design, and moves heavy logic to asynchronous processing | Some causes are data volume or capacity, which code alone cannot fix |
| Customizations break after Microsoft updates | Replaces undocumented techniques with supported APIs and tools | Microsoft controls the update schedule |
| Two partners have customized the same environment | Separates their solution layers and agrees one release path | Each team must accept ownership of its own solutions |

## Designing for Dataverse platform limits

Dataverse protects shared capacity with service protection limits. Each web server applies them to each user on its own. Microsoft's documented defaults are 6,000 requests and 20 minutes of combined execution time in a five-minute sliding window, plus 52 or more concurrent requests, and Microsoft says these values can change. Integrations and bulk jobs reach these limits long before people do.

We design for them up front. Integration users are split by workload, bulk work uses batches and asynchronous processing, and every client handles the retry response Dataverse returns when a limit is reached. Synchronous plug-ins stay short, because the user waits for them and the platform stops plug-ins that run too long.

## When MS Dynamics Guys fits

MS Dynamics Guys fits companies that run Microsoft Dynamics 365 Sales, Customer Service or Field Service and want to keep the platform while making it dependable. That means changes released as managed solutions, code with tests, and security that matches how teams work.

### A good fit when

- You want to extend or repair an existing CRM rather than replace it.
- Plug-ins, flows or scripts fail, slow users down or break after updates.
- You need code that passes review and stays within Microsoft's supported customization methods.
- Your administrators need documentation they can maintain after handover.

### Choose another route when

- A standard app feature or a Microsoft Marketplace app already meets the need.
- Your system is Business Central or Finance and Supply Chain Management only.
- You have not chosen a CRM yet. Start with [Microsoft Dynamics 365 consulting](https://msdynamicsguys.com/services/dynamics-365-consulting/).
- You only need licenses. A Microsoft licensing partner is the right contact.

## Questions about Microsoft Dynamics 365 CRM development

### Is Microsoft Dynamics 365 CRM development the same as Power Apps development?

They share a platform. Model-driven Power Apps and the Microsoft Dynamics 365 CRM apps both run on Dataverse, so the same tables, security roles and solutions apply. A Microsoft Dynamics 365 app adds Microsoft's own tables, processes and license terms on top. For stand-alone apps, see [Power Apps development](https://msdynamicsguys.com/power-platform/power-apps-development/).

### Will you build in our existing solutions or create new ones?

That depends on who owns what. We look at the publishers and layers already installed, then agree whether changes join an existing solution or go into a separate one with its own release path. The aim is that every component has one owner and one way into production.

### How do you avoid hitting Dataverse service protection limits?

Integrations and bulk jobs run as separate application users, batch their requests and handle the retry response the platform returns. Heavy processing moves to asynchronous plug-ins or scheduled work outside business hours. We size this during design, not after the first failed import.

### Can you take over plug-ins another partner wrote?

Yes, after a review of the source code and the registered steps. Compiled assemblies without source are a risk to flag early, because changing them safely means recovering or rewriting the logic. The general takeover process is on [Microsoft Dynamics 365 development services](https://msdynamicsguys.com/services/dynamics-365-development/).

### What breaks during a Microsoft Dynamics 365 update?

Customizations built with documented tools and APIs are supported and upgradeable. Undocumented techniques are not preserved during updates, and they are the usual cause of breakage. We replace them with supported methods and test releases in a sandbox before they reach production.

### Do we need a developer for every change?

No. Many changes are configuration that trained administrators can own. We draw a clear line between what your team maintains and what needs code, and document both. Our [implementation cost guide](https://msdynamicsguys.com/resources/dynamics-365-implementation-cost/) explains how that split affects a budget.

## Related services and guides

- [Microsoft Dynamics 365 Sales](https://msdynamicsguys.com/solutions/dynamics-365-sales/): MS Dynamics Guys implements Microsoft Dynamics 365 Sales: leads, opportunities, forecasts, security, data migration and Outlook and Teams setup.
- [Power Apps development](https://msdynamicsguys.com/power-platform/power-apps-development/): MS Dynamics Guys builds canvas and model-driven Power Apps with Dataverse, secure connections, license checks and managed-solution ALM.
- [Microsoft Dynamics 365 development](https://msdynamicsguys.com/services/dynamics-365-development/): MS Dynamics Guys builds Microsoft Dynamics 365 extensions, Dataverse plug-ins and AL apps, with code review, tests and documented handover.
- [Microsoft Dynamics 365 integration](https://msdynamicsguys.com/services/dynamics-365-integration/): MS Dynamics Guys connects Microsoft Dynamics 365 to ecommerce, ERP, CRM and data platforms, with record ownership, error handling and reconciliation.
- [Salesforce to Microsoft Dynamics 365](https://msdynamicsguys.com/migrations/salesforce-to-dynamics-365/): MS Dynamics Guys migrates Salesforce to Microsoft Dynamics 365 Sales or Customer Service, with data mapping, automation redesign and cutover planning.
- [Microsoft Dynamics 365 support](https://msdynamicsguys.com/services/dynamics-365-support/): MS Dynamics Guys supports Microsoft Dynamics 365 after go-live with code and integration fixes, release testing and an agreed enhancement backlog.
- [Microsoft Dynamics 365 CRM developers](https://msdynamicsguys.com/hire/dynamics-365-crm-developers/): Add Microsoft Dynamics 365 CRM developers for Dataverse, C# plug-ins, custom APIs and PCF, with your lead directing work and approving releases.
- [CRM consultants](https://msdynamicsguys.com/hire/dynamics-365-crm-consultants/): Add a Microsoft Dynamics 365 CRM consultant for workshops, Dataverse configuration, security and acceptance testing under your project lead.
- [Microsoft Dynamics 365 implementation cost](https://msdynamicsguys.com/resources/dynamics-365-implementation-cost/): Plan Microsoft Dynamics 365 implementation costs: licenses, delivery, migration, integration, testing and support, with an estimate worksheet.

## Tell us what your CRM needs to do next

Name the app and version, the change you need and what fails today. We reply with questions or a proposed review.

[Discuss your CRM change](https://msdynamicsguys.com/contact/#intent=project&service=D01) · [Hire a Dynamics CRM developer](https://msdynamicsguys.com/hire/dynamics-365-crm-developers/)

## Product documentation referenced on this page

- [Manage Microsoft Dynamics 365 apps that run on Microsoft Dataverse](https://learn.microsoft.com/en-us/power-platform/admin/manage-apps) (checked 2026-10-02)
- [Use plug-ins to extend business processes](https://learn.microsoft.com/en-us/power-apps/developer/data-platform/plug-ins) (checked 2026-10-02)
- [Supported customizations for Microsoft Dataverse](https://learn.microsoft.com/en-us/power-apps/developer/data-platform/supported-customizations) (checked 2026-10-02)
- [Security roles and privileges for Dataverse](https://learn.microsoft.com/en-us/power-platform/admin/security-roles-privileges) (checked 2026-10-02)
- [Column-level security](https://learn.microsoft.com/en-us/power-platform/admin/field-level-security) (checked 2026-10-02)
- [Solution layers and merge behavior](https://learn.microsoft.com/en-us/power-platform/alm/solution-layers-alm) (checked 2026-10-02)
- [Service protection API limits](https://learn.microsoft.com/en-us/power-apps/developer/data-platform/api-limits) (checked 2026-10-02)
- [Employ robust error handling in Power Automate](https://learn.microsoft.com/en-us/power-automate/guidance/coding-guidelines/error-handling) (checked 2026-10-02)
