Managed and Unmanaged Solution Strategy
Complete the full lesson to earn 25 points
Work through each section, then tap “Mark as Complete” on the last one.
✦ Skip the page breaks and see fewer ads — read each lesson on a single page with Pro
Managed and Unmanaged Solution Strategy in Power Platform
Introduction: The Backbone of Reliable Delivery
When you begin building applications, automations, and data models within the Microsoft Power Platform, you start in a development environment where everything feels flexible. You create tables, build canvas apps, and write Power Automate flows with ease. However, as soon as your work needs to move from your personal sandbox to a production environment where real business processes rely on it, the "wild west" approach of individual development becomes a liability. This is where the concept of Application Lifecycle Management (ALM) becomes critical.
At the heart of Power Platform ALM lies the concept of "Solutions." Solutions are the containers that hold your components—the tables, apps, and flows—allowing you to package them for transport. But simply having a container isn't enough; you must decide how that container behaves when it arrives at its destination. This is where the distinction between "Unmanaged" and "Managed" solutions becomes the single most important architectural decision you will make.
Understanding this strategy is not just for professional developers or DevOps engineers; it is a fundamental requirement for anyone managing business data. If you do not have a defined strategy, you risk overwriting production data, breaking existing functionality, and losing track of which version of an app is currently live. This lesson will guide you through the technical mechanics, the strategic considerations, and the best practices for managing your solution strategy effectively.
Defining the Core Concepts
To grasp the strategy, we must first define the two states in which a solution can exist within the Power Platform. These states determine how components behave, how they are updated, and whether they can be modified by others.
Unmanaged Solutions: The Workspace of Creation
An unmanaged solution is a collection of components that are currently in the development phase. When you create a new solution in a development environment, it is, by default, unmanaged. The components inside are "open" for editing. You can add, remove, or modify properties of tables, columns, and code directly within this solution.
Crucially, unmanaged solutions are intended for use only in development environments. They are the "source of truth" for your changes. When you export an unmanaged solution, you are essentially taking a snapshot of your current work-in-progress. If you import an unmanaged solution into another environment, you are effectively telling that environment to adopt these components as editable, flexible assets.
Managed Solutions: The Standard of Distribution
A managed solution is the final, locked-down version of your work. When you export a solution from your development environment and choose the "Managed" option, the platform packages your components into a read-only format. Once imported into a target environment (like Test, User Acceptance Testing, or Production), the components become locked.
You cannot modify the internal properties of a managed component directly in the target environment. This is a deliberate safety feature. It ensures that the application behaves exactly as it did when it was tested and approved. If you need to change a managed component, you must go back to your development environment, make the change in the unmanaged solution, export a new version of the managed solution, and re-import it.
Callout: The "Source of Truth" Concept Think of unmanaged solutions as your raw source code files in a repository. You can edit them, refactor them, and reorganize them. Think of managed solutions as the compiled binary or executable file. The user can run the executable, but they cannot change the logic inside it. Your ALM strategy must ensure that the "source" remains in development, while the "binary" is what the business users interact with in production.
Comparison of Solution Types
Understanding the differences is easier when you see them side-by-side. The following table highlights the operational differences between the two types.
| Feature | Unmanaged Solution | Managed Solution |
|---|---|---|
| Primary Use | Development and Customization | Testing, UAT, and Production |
| Editability | Fully editable | Read-only (locked) |
| Deletion | Components can be deleted individually | Components are removed by uninstalling the solution |
| Upgradability | Overwrites existing components | Follows strict update/patching rules |
| Environment | Development environments only | Any non-development environment |
| Risk Level | High (accidental changes are easy) | Low (prevents accidental changes) |
The Strategic Lifecycle: A Step-by-Step Workflow
A successful ALM strategy relies on a multi-environment architecture. You should never develop in the same environment where your users are working. A standard professional setup consists of at least three environments:
- Development Environment: Where you build and test your initial logic.
- Test/UAT Environment: Where you deploy the managed solution to verify that it works in a clean, isolated space.
- Production Environment: Where the end-users access the stable, tested solution.
Step 1: Development (Unmanaged)
Start by creating a new solution in your development environment. As you build your canvas app, you add it to this solution. You add your Dataverse tables, your security roles, and your flows to this same container. Because this is your development workspace, you are free to iterate. You might add a field to a table, test it, realize you don't need it, and delete it. This is perfectly fine in an unmanaged state.
Step 2: Exporting as Managed
Once your feature is complete and tested in your development environment, you prepare for deployment. You go to the "Export" menu in the solution explorer. You will be prompted to choose between "Unmanaged" and "Managed." For your move to Test or Production, you must select Managed.
The platform will then generate a .zip file. This file contains the metadata for all your components, but the platform has added a layer of protection that tells the target environment, "Do not allow users to change these settings."
Step 3: Deployment to Target
Navigate to your Test or Production environment. You select the "Import" option and upload the .zip file you just exported. The environment will unpack the managed solution. If you try to open a table or a flow that was brought in via this managed solution, you will notice that the "Edit" buttons are greyed out or restricted. This is the goal of the strategy: stability.
Handling Updates and Versioning
One of the most common pitfalls in Power Platform development is the "deployment nightmare" that occurs when an update goes wrong. If you have a managed solution in production and you need to add a new feature, you cannot simply "tweak" it in production. You must follow the update cycle.
The Versioning Strategy
Every time you export a solution, you should increment the version number. This is handled in the solution settings. If your current version is 1.0.0.0, your next update should be 1.0.0.1.
When you import a newer version of a managed solution into an environment that already contains an older version, the platform performs an "Upgrade." It recognizes that you are replacing the existing components with a newer version. It will automatically handle the mapping between the old components and the new ones.
The Patching Approach
If you have a massive solution but only need to fix one small bug, you don't always need to ship a full version update. You can use Patches. A patch is essentially a smaller, lighter solution that contains only the components that have changed. When you import a patch into an environment, it "layers" on top of the existing managed solution. This is much faster and less risky for minor hotfixes.
Note: The Danger of "Active" Layers If you make an unmanaged change in a production environment (which is generally discouraged), you create an "Active" layer. This layer sits on top of the managed solution and will block any further managed updates from taking effect. Always avoid making unmanaged changes in production environments.
Best Practices for Enterprise Solutions
To implement this strategy effectively, you must follow established industry standards. These are not just guidelines; they are safeguards to protect your business data and user productivity.
1. Maintain Separate Development Environments
Never develop directly in production. Even if you are a single developer, create a separate environment for development. If you develop in production, you are effectively testing on your users. If a flow fails or a table update locks the database, your users are the ones who pay the price.
2. Use Version Control Systems (VCS)
While solutions are the container for deployment, they should not be your only source of truth. You should export your unmanaged solutions and commit the extracted files to a source control system like Git. This allows you to track changes over time, see who changed what, and roll back to previous states if a deployment causes a regression.
3. Keep Solutions Small and Modular
Avoid creating a "Mega-Solution" that contains every app, flow, and table for your entire organization. Instead, group components by business function or domain. For example, have a "HR-Core" solution, a "Finance-Reporting" solution, and a "Common-Assets" solution. This makes it easier to manage updates and reduces the risk of one failing component impacting the entire platform.
4. Use Automated Pipelines
If you are comfortable with the basics, look into Power Platform Build Tools for Azure DevOps or GitHub Actions. These tools allow you to automate the export and import process. Instead of manually downloading a .zip file and uploading it elsewhere, a pipeline can trigger automatically whenever you push code to your repository, ensuring that the deployment process is consistent and documented.
Common Pitfalls and How to Avoid Them
Pitfall 1: The "Production Tweak"
The most common mistake is entering a production environment to fix a small label or a flow condition because it is "faster" than going through the full deployment cycle.
- The Consequence: You create an unmanaged layer in production. Now, your production environment is out of sync with your development environment. When you try to deploy your next official update, the system may fail or ignore your changes because the "Active" layer is blocking the update.
- The Fix: Always, without exception, apply the fix in development, export, and deploy. If you absolutely must fix something in production, you must understand how to remove the active layer afterward, which is a complex task.
Pitfall 2: Over-Reliance on Managed Solutions for Everything
Some teams try to use managed solutions for everything, including temporary testing or experimental features.
- The Consequence: You end up with a cluttered environment full of locked components that you cannot easily clean up.
- The Fix: Use managed solutions for stable, production-ready code. Keep your experimental work in unmanaged solutions in a dedicated "Sandbox" or "Dev" environment.
Pitfall 3: Ignoring Dependencies
When you add a component to a solution, the system asks if you want to include "required components."
- The Consequence: If you forget to include a required table or a connection reference, your app will fail to import in the target environment because it cannot find the assets it needs.
- The Fix: Always select "Include required components" when adding items to a solution. Periodically run the "Check for dependencies" tool within the solution to ensure your package is self-contained.
Warning: Connection References A common issue during deployment is broken connections. When you move a flow, it might be looking for a connection that exists in your Dev environment but not in Production. Always ensure you have created the necessary connection references in the target environment before or during the import process.
Technical Deep Dive: Solution Layers
To truly understand how managed and unmanaged solutions interact, you need to understand the concept of "Solution Layers." When you look at a component in the Power Platform—say, a specific column in a table—the platform evaluates the "layer" that is currently active.
- The Base Layer: The initial creation of the component.
- Managed Layers: Any managed solutions you have imported sit on top of the base layer. If you have multiple managed solutions, they are layered in the order they were imported.
- The Unmanaged Layer: This is the top-most layer. If you make an unmanaged change, it sits above everything else, effectively masking or overriding what is in the managed layers.
This explains why, if you make a change in production, your future updates fail to show up. You have placed an "unmanaged" layer on top of the "managed" stack. The platform sees your manual change and prioritizes it over the update you are trying to push through the system.
How to Inspect Layers
You can see this for yourself. Navigate to your solution, find a component (like a Cloud Flow), and select "Advanced" -> "See solution layers." You will see a list of every solution that has touched that component. If you see an entry labeled "Active," that is the culprit—it is an unmanaged change that is currently overriding your managed solution.
Practical Example: Implementing a Simple Deployment
Let’s walk through a real-world scenario. You have built a "Leave Request" app.
- Development:
- Create a solution named
LeaveRequest_Dev. - Build your Dataverse table, the Canvas App, and the Power Automate flow.
- Test it thoroughly.
- Create a solution named
- Preparation:
- Go to Solution Settings and set the version to
1.0.0.0. - Click "Export," choose "Managed," and download the file.
- Go to Solution Settings and set the version to
- Production:
- Go to your Production environment.
- Import the managed solution.
- The app is now live.
- The Update:
- The business wants a new "Reason for Leave" field.
- Go back to the
LeaveRequest_Devsolution. - Add the column to the table and update the app.
- Change the version to
1.0.1.0. - Export as Managed.
- Go to Production and import the new
1.0.1.0file. - The platform detects the existing solution and upgrades it. Your users now see the new field without you ever having to touch the production environment's internal settings.
When to Use Which Strategy
While we have established that managed solutions are for production, there is a spectrum of how strictly you should manage your environments.
- Small Projects (Single Developer): You might only have two environments: Dev and Prod. You build in Dev, export as Managed, and import to Prod. This is acceptable for simple apps.
- Medium Projects (Small Team): You should have Dev, UAT, and Prod. Dev is for building, UAT is where you perform final testing, and Prod is for users.
- Large Projects (Enterprise): You should have dedicated Dev environments for different developers, a shared build environment where all code is merged, a UAT environment, and a Production environment. This often involves Azure DevOps pipelines to handle the movement of solutions between these environments.
Callout: The "Solution-Aware" Requirement Not all components are "solution-aware." For example, some older Power Automate connectors or specific legacy assets might not be fully compatible with solutions. Always verify that the components you are using can be successfully packaged in a solution. If a component is not solution-aware, it cannot be part of your managed deployment strategy, and you will have to configure it manually in every environment.
Advanced Troubleshooting: Solving Import Failures
Sometimes, a solution import will fail. This is rarely a random event; it is almost always due to missing dependencies or conflicting layers.
- Missing Dependencies: The import log will usually tell you exactly which component is missing. If it says "Table X is missing," it means your solution requires Table X, but it isn't included in the solution file. Solution: Go back to your Dev environment, add the missing table to your solution, and re-export.
- Version Mismatch: If you try to import a lower version over a higher version, the platform will block it. Solution: Always ensure your version number is higher than what is currently in the target environment.
- Active Layer Conflicts: If your update is not appearing, it is because of an Active layer. Solution: You must navigate to the specific component, view the solution layers, and remove the active unmanaged layer. Be careful, as this will revert the component to the state defined by the managed solution.
Key Takeaways
- Solutions are the primary unit of delivery: Every piece of work you do in the Power Platform should live inside a solution. Never build "loose" components outside of a solution container.
- Managed vs. Unmanaged is a state of control: Unmanaged solutions are for your sandbox development, where you need freedom to change things. Managed solutions are for distribution and production, where you need stability and protection.
- Never develop in Production: This is the golden rule of ALM. Any change made directly in a production environment creates an "Active" layer that will cause future deployments to fail or behave unpredictably.
- Version your work: Always increment your solution version numbers before exporting. This allows the Power Platform to understand the history of your updates and handle the upgrade process cleanly.
- Automate when ready: Manual imports are prone to human error. Transitioning to automated pipelines (using tools like GitHub Actions or Azure DevOps) is the professional standard for ensuring consistent, documented deployments.
- Understand layering: If an update doesn't appear as expected in an environment, it is almost certainly due to an unmanaged "Active" layer blocking the managed update. Use the "See solution layers" tool to diagnose these conflicts.
- Keep it modular: Avoid massive, monolithic solutions. Break your work into smaller, functional solutions to make updates faster, safer, and easier to manage.
By following these strategies, you move from simply "building apps" to "managing a platform." This shift in mindset is what separates a hobbyist from an effective Power Platform professional. It ensures that your work remains stable, your production environment stays clean, and your business users can rely on the applications you build without the constant fear of sudden, breaking changes.
Continue the course
Enjoying the courses?
Everything stays free. Pro shows fewer ads, doubles your daily points limit so you progress twice as fast, and lets you read each lesson on one page.
- ✓ Fewer advertisements
- ✓ 2× daily points limit
- ✓ Distraction-free lessons