Power Platform ALM for a Small IT Team: The Minimum That Stops Edits in Production
Most IT managers who inherit Power Platform meet ALM the hard way. A flow that posts approvals stops at nine at night, someone with admin rights opens it in the only environment it has ever lived in, changes a condition, saves, and the next morning a second thing is broken that nobody connects to the fix. Or the person who built the expense app leaves, and the team discovers that the app, its flows, and the connections under them all belonged to one account. Neither needs a large estate. This post is the version of Power Platform ALM we recommend when the whole IT department fits at one lunch table: what to install, what to skip, and the order to do it in.
The short answer
A small team needs four things, and only four, to stop production edits: a separate place to build, everything packaged in solutions, managed solutions as the only thing that reaches production, and production owned by an identity that does not resign. For deployment, Power Platform Pipelines, the in-product option, covers most teams of one to five people. Source control through Dataverse Git integration is worth adding when more than one person builds in the same solution. Azure DevOps or GitHub Actions with the Power Platform build tooling is worth it when you already run an engineering practice on them, or when you outgrow what Pipelines allows.
If you only remember one test: could anyone on your team fix a production bug without opening production in edit mode? If the answer is no, you do not have ALM yet, whatever tools you own.
Why this matters at five people as much as five hundred
Small teams skip ALM because it sounds like process for organizations with release managers. But the risk scales with how many people depend on the apps, not with IT headcount.
The after-hours fix is the first failure. When production is also the development environment, every edit is a deployment with no test, no record of what changed, and no way back except memory. Microsoft's own solution layering guidance puts it plainly: unmanaged customizations sit at the top layer of a component and define how it behaves at runtime, and in most situations you do not want them deciding behavior in test and production. That is the technical description of "someone fixed it live."
The departed builder is the second. Microsoft documents what happens to orphaned flows: when the owner leaves, flows that use connections tied to that account can fail.
The minimum setup
Environments: dev, test, prod, or at least dev and prod
Microsoft's environment strategy for ALM says you can do basic ALM with only development and production, and recommends at least one separate test environment. For a small team we treat dev plus prod as the floor and dev, test, prod as the target.
Keep production work out of the default environment. Microsoft's tenant environment strategy describes the default environment as intended for Microsoft 365 personal productivity scenarios, not long-term work, and notes that you cannot block access to it, only minimize what can be done there.
Everything in solutions, under your own publisher
A solution is the unit you move. ALM basics describes solutions as the way apps and components are transported from one environment to another.
Before you create the first one, create a publisher with a meaningful name and prefix. Microsoft's solution concepts recommends your own publisher rather than the default, notes that you cannot rename metadata items after they are created, and advises a single publisher so the layering model can change later. One publisher, one prefix, decided once.
Managed solutions downstream, unmanaged only in dev
Unmanaged solutions are what you develop in. Managed solutions are what you deploy to every environment that is not development for that solution, test and production included. Managed components cannot be edited directly, which is the point. Microsoft's guidance on moving from unmanaged to managed is unambiguous that, outside development, environments should hold managed solutions only.
Environment variables and connection references
Environment variables hold the values that differ between environments, such as a SharePoint site URL, and are set at import or during a pipeline deployment. Connection references let apps and flows bind to a reference instead of a specific connection, so at import you supply a connection once per reference and flows can switch on automatically. Without them, every deployment ends with someone opening flows in production to repoint them, which is the edit you were trying to stop.
Production owned by an identity that does not leave
Power Automate supports service principal application users owning and running flows, which Microsoft describes as insulating flow ownership from the lifecycle of a person. For solution flows, the connections do not have to be shared with the service principal for it to own them. Where a service principal is more than your team can take on this quarter, a dedicated service account is the practical interim: it is still a human-style account with a password policy, but it is not a person who changes jobs. Either way, the rule is the same: nothing critical in production belongs to the builder.
Deployment options compared
Manual export and import. Export the solution from dev as managed, import it into test, then prod. It needs nothing extra, and Microsoft's export guidance reminds you that only published components are exported. The weakness is that it is a person, a laptop, and a zip file. No built-in history, and test is easy to skip when it is late. Fine for your first deployment; a poor resting point.
Power Platform Pipelines. Run from the solution area by makers. Per Microsoft's pipelines overview, deployments are prevalidated against the target to catch missing dependencies, solutions are exported and stored in the pipelines host for every deployment, and unmanaged solutions cannot be deployed to non-development environments. The requirements to plan around: target environments must be Managed Environments, while the host does not have to be. Starting in October 2026, Microsoft notifies admins when a pipeline deploys to an unmanaged target; they have 30 days to enable Managed Environments, with one 30-day extension per environment, before deployments to that target are blocked. Admins can also turn on automatic enablement. The platform host is provisioned for the tenant the first time someone opens the Pipelines page, and makers can create personal pipelines on it, limited to a source and two targets, not shareable, not extensible. Default environments, Teams environments, and environments without Dataverse cannot be targets. When you want central control, an admin sets up a custom host. Add delegated deployments and the stage deploys as a service principal or stage owner instead of the requesting maker, with every deployment pending until approved.
Dataverse Git integration. Solutions connected to a repository, with changes committed from the Solutions area. Microsoft announced general availability in April 2025, and the Azure DevOps setup carries no preview notice. GitHub as a provider is newer: its setup article is marked preview and not meant for production use, and the release plan lists public preview from August 31, 2026 with no general availability date yet. Both providers require development and target environments to be Managed Environments. Microsoft's overview is clear about where it fits: use it with developer environments, and use builds and Pipelines to deploy.
Azure DevOps or GitHub Actions with build tooling. Power Platform Build Tools for Azure DevOps and GitHub Actions for Power Platform script export, import, solution checker, and environment provisioning, authenticated by a service principal. They are the right tool when you already run engineering on those platforms, need cross-tenant deployment (which Pipelines does not do), want to deploy several solutions together, or need import behaviors Pipelines does not offer. They are the wrong tool for a team whose first pipeline would also be its first YAML file.
Which setup fits your team
| Your situation | Environments | Deployment | Source control |
|---|---|---|---|
| One admin, a handful of apps, nothing business-critical yet | Dev + prod | Manual managed import, moving to Pipelines | Not yet |
| One to three people, some critical flows, no developers | Dev + test + prod | Pipelines on the platform host | Optional |
| Two to five people, several builders in shared solutions | Dev + test + prod, Managed Environments downstream | Pipelines on a custom host, delegated deployment with approval | Dataverse Git integration (Azure DevOps) |
| Team already runs Azure DevOps or GitHub for other systems | Dev + test + prod, per-developer dev if needed | Build Tools or GitHub Actions | Repository you already use |
| Regulated data, audit evidence required, or multiple tenants | Dev + test + prod, all managed | Pipelines with approvals, or Build Tools for cross-tenant | Required |
Most small teams land on the second or third row and should stay there until something specific pushes them down the table.
A 30-day adoption sequence
Days 1–5: count and choose. List the apps and flows that people other than their builder depend on, and note which sit outside solutions and whose accounts their connections use. Pick the two or three that would hurt most if they broke. Agree with your licensing owner what Managed Environments will mean for the users of those apps, because premium licensing follows the users of apps and flows in a managed environment. Check current terms.
Days 6–12: build the path. Create dev and test environments with Dataverse, alongside the existing production environment. Create your publisher and prefix. Enable Managed Environments where Pipelines and Git integration need them. Create the service principal or service account that will own production.
Days 13–22: move one solution end to end. Take the most critical app into a solution in dev, swap hard-coded values for environment variables and direct connections for connection references, deploy it managed to test, test it, then deploy to production through a pipeline. Reassign flow ownership in production. Remove the old unmanaged copy following Microsoft's unmanaged-to-managed steps, after a backup.
Days 23–30: make it the rule. Write one page: where people build, how a change reaches production, who approves. Turn on delegated deployment with approval if more than one person deploys. Move the next solution. From here, new work starts in dev, and production edits become an exception you can see.
That is a month of part-time work for a small team, not a program. The governance side, DLP and ownership rules, runs alongside it.
Common traps
Unmanaged layers in production. Someone "just fixes" a managed component in prod, and the fix becomes an unmanaged layer that silently overrides every future deployment of that component. Check solution layers after any incident. Microsoft's removal option for those layers cannot be undone and can lose associated data, so fix the source in dev first.
Building in the default environment. It cannot be a pipeline target, everyone can build there, and work that starts there tends to stay there. Move anything shared out early.
Personal connections under production flows. Connection references help only if the connection behind them is not a person's. Note that a delegated deployment running as a regular user stage owner cannot deploy solutions containing connection references for OAuth connections, which is one more reason to plan for a service principal.
Solution sprawl and the default publisher. One solution per app, each on a different publisher with a "new_" or "cr123_" prefix, is how estates end up unable to restructure. Microsoft notes that once a component is imported in a managed solution under a publisher, that publisher cannot be changed. Choose one publisher before the first import.
Tooling ahead of habit. A YAML pipeline nobody maintains is worse than Pipelines everyone uses. Pick the lightest row of the table that covers your risk.
FAQs
Is dev plus prod enough, or do we really need test?
Dev plus prod is a valid start, and Microsoft calls it basic ALM. A test environment is where the managed import is proven, because you cannot import a managed solution into the same environment that holds its unmanaged source. Add test as soon as one critical app is on the path.
Do Pipelines cost extra?
Pipelines themselves are in the product, but target environments must be Managed Environments, and users running apps and flows in a managed environment need premium licensing. For a small team the licensing question usually decides the timeline more than the setup does. Check current terms with your licensing owner.
Is Dataverse Git integration ready for production use?
With Azure DevOps, yes: Microsoft declared the feature generally available in 2025. GitHub as a provider is in preview as of this writing. Either way, it belongs to development environments, with Pipelines doing the deploying.
When do we need Azure DevOps or GitHub Actions instead of Pipelines?
When you need what Pipelines does not do: cross-tenant deployment, deploying several solutions in one run, custom import behavior, or integration with an engineering practice you already run. If none of those applies, Pipelines is the lighter path.
What do we do with the apps already living in production unmanaged?
Move them one at a time, most critical first, following the unmanaged-to-managed sequence: back up, rebuild the solution cleanly in dev under your publisher, deploy managed, validate, then check for leftover active layers. If you want a ranked list of which ones to move first, that is part of what a governance assessment produces.
Can you run this for us after it is set up?
Yes. Some teams want the path built and then handed back; others want deployments, monitoring, and fixes covered month to month under managed support. Where agreed standards and intake are the gap, that is a Center of Excellence conversation, sized for a small team. The Health & Governance Gauge ($3,500 focused / $7,500 extended) includes the Ø Standard gap check that tells you where your deployment path stands, and 100% of the focused-tier fee is credited toward any implementation engagement of $25,000 or more signed within 90 days of your readout.
Sources
Microsoft's own documentation for the platform facts above. Requirements, preview status, and licensing change; check them at decision time.
- Environment strategy for ALM: dev and prod as the basic minimum, with a separate test environment recommended.
- Develop a tenant environment strategy: what the default environment is for and why production work belongs elsewhere.
- ALM basics with Microsoft Power Platform: solutions as the transport mechanism and managed solutions downstream.
- Solution concepts: managed versus unmanaged, and the case for a single custom publisher and prefix.
- Solution layers: how unmanaged customizations override managed behavior, and removing active customizations.
- Move from unmanaged to managed solutions: the cleanup sequence and the permanence of publisher choice.
- Environment variables overview: per-environment values set at import or in a pipeline.
- Use a connection reference in a solution: binding apps and flows to references instead of connections.
- Service principal owned flows: insulating flow ownership from a person's lifecycle.
- Manage orphaned flows when the owner leaves: what happens to flows on departed accounts.
- Export solutions: manual managed or unmanaged export and the publish-first requirement.
- Overview of pipelines in Power Platform: capabilities, limits, host and Managed Environments requirements.
- Admin deployment page: the October 2026 enforcement for unmanaged pipeline targets, the 30-day window and extension, and automatic enablement.
- Personal pipelines on the platform host: provisioning, the source-plus-two-targets limit, and ineligible targets.
- Delegated deployments: deploying as a service principal or stage owner, with approvals.
- Dataverse Git integration overview: where source control fits relative to builds and pipelines.
- Git integration is generally available: Microsoft's April 2025 GA announcement.
- Connect Git integration to Azure DevOps: prerequisites, including Managed Environments.
- Connect Git integration to GitHub: the GitHub provider's preview status and prerequisites.
- GitHub support for source code integration (release plan): public preview date for the GitHub provider.
- Power Platform Build Tools for Azure DevOps: build tasks and service principal authentication.
- GitHub Actions for Power Platform: the equivalent actions for GitHub workflows.
- Licensing for managed environments: premium licensing for users of apps and flows in managed environments.