Wicked Smart Data
LearnInsightsAboutContact
Sign InLet's Build
LearnInsightsAboutContact
Sign InLet's Build
Wicked Smart Data

Intelligence, automation, and expert execution — plus an elite library of free knowledge. We turn complexity into competitive advantage.

Start a conversation

Platform

  • Learning Paths
  • Insights
  • RSS Feed

Company

  • About
  • Contact
  • Work With Us

Legal

  • Privacy Policy
  • Terms of Service

© 2026 Wicked Smart Data. All rights reserved.

Intelligence · Automation · Advantage

All Insights
Power Automate

Environment Strategy for Power Platform: Separating Dev, Test, and Production

Running Power Automate in a single environment is a reliability disaster waiting to happen. Learn how to structure Development, Test, and Production environments the right way — with solutions, environment variables, managed deployments, and DLP policies that actually protect your organization.

🌱 Foundation17 min readSep 28, 2026Updated Sep 28, 2026
Environment Strategy for Power Platform: Separating Dev, Test, and Production
On this page
  • Introduction
  • Prerequisites
  • What Is a Power Platform Environment?
  • The Three-Tier Model: Dev, Test, and Production
  • Development (Dev)
  • Test (sometimes called QA or Staging)
  • Production (Prod)
  • Creating Environments in the Power Platform Admin Center
  • Environment Variables: The Same Solution, Different Behavior
  • Creating an Environment Variable
  • Solutions: Packaging Your Work for Safe Promotion
  • Solution-Aware vs. Non-Solution Flows
  • Creating a Solution
  • Managed vs. Unmanaged Solutions
  • Connection References: Handling Authentication Across Environments
  • DLP Policies: Different Rules for Different Environments
  • Naming Conventions and Documentation
  • Hands-On Exercise
  • Common Mistakes & Troubleshooting
  • Summary & Next Steps
  • Environment Strategy for Power Platform: Separating Dev, Test, and Production

    Introduction

    Imagine your team has built a beautiful Power Automate flow that processes customer invoices. It runs perfectly in your tests. Then one afternoon, a colleague "just tweaks one thing" directly in the live system — and suddenly invoices stop processing. Support tickets pile up. Your finance team is on the phone. You spend three hours undoing a five-minute change.

    This scenario plays out constantly in organizations that treat Power Platform like a hobby tool rather than enterprise infrastructure. The single biggest structural mistake teams make is building, testing, and running everything in one place. When development, testing, and production share the same environment, every experiment is a potential outage, every test run touches real data, and governance becomes impossible.

    By the end of this lesson, you'll understand how to structure Power Platform environments the right way — what each environment's purpose is, how to configure them, and how to organize your work so that changes flow safely from an idea in a developer's workspace all the way to a production system without drama.

    What you'll learn:

    • What a Power Platform environment is and why isolation between them matters
    • The standard three-tier model: Development, Test, and Production
    • How to create and configure environments in the Power Platform admin center
    • What environment variables are and how they let the same solution behave differently in each tier
    • How solutions package your work for safe promotion between environments
    • Governance considerations including licensing, data boundaries, and DLP policies

    Prerequisites

    You should be comfortable with the basics of Power Automate — knowing what a flow is, how connectors work, and how to run a basic flow. If you're brand new, start with Getting Started with the Power Automate Interface before returning here.

    You'll also benefit from understanding how environments and templates relate to organizing your work, covered in Organizing and Reusing Logic with Power Automate Environments, Connections, and Flow Templates.

    No Azure subscription is required to follow this lesson, though some governance features reference Azure Active Directory.


    What Is a Power Platform Environment?

    Before we talk about separating environments, let's make sure we're clear on what an environment actually is.

    Think of a Power Platform environment as a completely separate container — like a walled garden — that holds its own:

    • Flows and apps — every Power Automate flow, Power App, and chatbot you build lives inside exactly one environment
    • Dataverse database — if enabled, a dedicated data store scoped to that environment only
    • Connections and connectors — the authenticated links to services like SharePoint, SQL Server, or third-party APIs
    • Security roles and users — who can see and interact with what
    • Data Loss Prevention (DLP) policies — rules that control which connectors can be used together

    Two environments don't share any of these things by default. A flow running in your Development environment cannot read data from your Production Dataverse database unless you explicitly connect it — and that's exactly the point. Isolation is the feature, not a limitation.

    Key insight

    Most organizations have a single "default" environment that everyone lands in when they first use Power Platform. This default environment is shared, lightly governed, and not suitable for production workloads. Treat it as a personal sandbox for exploration only — never for business-critical automation.


    The Three-Tier Model: Dev, Test, and Production

    Software engineering has used the concept of separate development and production systems for decades. Power Platform environments apply the same principle. Here's what each tier does and why it exists.

    Development (Dev)

    Development is where builders work. Developers and automation specialists create flows here, break things, try new connector patterns, and iterate quickly. Because this environment is isolated, nothing that happens here affects real business operations.

    In a Dev environment:

    • Data is synthetic or anonymized — never real customer or financial records
    • Connections point to sandbox versions of systems where they exist (a test SharePoint site, a non-production SQL database, a sandbox Salesforce org)
    • Multiple developers may have access, but the environment isn't shared with business users
    • Flows can be left in broken or incomplete states without anyone noticing

    The Dev environment is where creativity happens. It should feel low-stakes.

    Test (sometimes called QA or Staging)

    Test is where completed work gets validated before anyone declares it ready. Business users, quality assurance testers, or process owners interact with flows here to confirm they behave correctly under real-ish conditions.

    In a Test environment:

    • Data is representative — it looks and feels like production data but is a copy, not the live source
    • Connections point to systems that mirror production topology (same SharePoint structure, same SQL schema)
    • Access is more restricted than Dev — typically read-only for most developers
    • Changes are deployed here in complete, packaged form, not edited directly

    The Test environment is a dress rehearsal. If something breaks here, that's a success — you found the problem before it reached real users.

    Production (Prod)

    Production is the live system. Real business operations depend on it. Real customer data flows through it. This environment is treated with extreme care.

    In a Production environment:

    • Only approved, tested, packaged solutions are deployed here — never manual edits
    • Changes require formal approval and a documented deployment process
    • Access is tightly controlled: developers typically cannot directly edit flows
    • Monitoring and alerting is active at all times

    Warning

    The temptation to "just fix it quickly" directly in production is constant and almost always costly. Even a well-intentioned small change can break a flow's dynamic references, reset connection states, or trigger unintended behavior. The discipline of always going through Dev → Test → Prod is what separates reliable enterprise automation from fragile one-off scripts.


    Creating Environments in the Power Platform Admin Center

    You manage environments through the Power Platform admin center, found at admin.powerplatform.microsoft.com. You'll need a Power Platform Admin or Global Admin role to create environments.

    Here's the process:

    1. Navigate to admin.powerplatform.microsoft.com and sign in with your admin account.
    2. In the left navigation panel, click Environments.
    3. Click + New in the top toolbar.
    4. In the "New environment" panel that slides in from the right, fill in:
      • Name — use a clear, consistent naming convention like Contoso - Invoice Processing - Dev, Contoso - Invoice Processing - Test, and Contoso - Invoice Processing - Prod. Good names make governance much easier.
      • Region — choose the Azure region closest to your users. Keep all three tiers in the same region to avoid cross-region data transfer complications.
      • Type — for Dev and Test, select Sandbox. For Production, select Production. This distinction matters: Sandbox environments can be reset (wiped and restored to a clean state) from the admin center, which is useful during development. Production environments cannot be reset accidentally.
      • Add a Dataverse database — if your flows use Dataverse, enable this. If you're only using SharePoint and standard connectors, you may not need it initially.
    5. Click Save and wait for the environment to provision (usually 1-5 minutes).

    Repeat this three times — once each for Dev, Test, and Production.

    Tip

    Create all three environments at the same time before you build anything. It's much harder to retrofit a governance structure onto flows that were already built in a single environment than to start organized from day one.


    Environment Variables: The Same Solution, Different Behavior

    Here's a problem you'll face immediately when you try to promote a flow from Dev to Prod: the Dev flow probably has a hardcoded URL pointing to your test SharePoint site, or a hardcoded SQL server name pointing to your dev database. If you copy that flow to production, it still points at dev.

    The naive fix is to edit the values after deployment. But that's fragile and manual, and it defeats the purpose of a structured process.

    The correct fix is environment variables.

    An environment variable is a named placeholder defined inside a solution. The flow references the variable — not the actual value — and each environment supplies its own value for that variable at deployment time.

    Think of it like a config file in traditional software development: the code stays the same, but appsettings.json changes per environment.

    Creating an Environment Variable

    Environment variables live inside solutions (we'll cover solutions in a moment). To create one:

    1. Open make.powerapps.com and switch to your Dev environment using the environment switcher in the top-right corner.
    2. Navigate to Solutions in the left navigation, then open your solution.
    3. Click + New → More → Environment variable.
    4. Fill in:
      • Display name — something descriptive like Invoice SharePoint Site URL
      • Name — this auto-populates as a technical identifier like cr123_InvoiceSiteURL
      • Data type — Text, Number, Boolean, JSON, or Secret (for sensitive values like API keys)
      • Default value — the Dev value, e.g., https://contoso.sharepoint.com/sites/invoicing-dev
    5. Save the variable.

    When you deploy this solution to Test, the Test environment can override this variable's value with https://contoso.sharepoint.com/sites/invoicing-test. When you deploy to Production, it uses the production URL. Your flow never changes — only the environment configuration changes.

    Note

    Environment variables of type Secret store their values in Dataverse securely, but for highly sensitive credentials like API keys and service account passwords, consider a more robust approach covered in Integrating Power Automate with Azure Key Vault and Managed Identities. Environment variables and Key Vault work together, not in opposition.


    Solutions: Packaging Your Work for Safe Promotion

    An environment variable solves the "different values per environment" problem. But how do you actually move a flow from Dev to Test to Prod? The answer is solutions.

    A solution is a container inside Power Platform that packages related flows, apps, tables, and environment variables into a single exportable unit. When you want to promote your work, you export the solution from Dev as a .zip file and import it into Test. Then you export from Test and import into Prod.

    Solution-Aware vs. Non-Solution Flows

    Flows that live inside a solution are called "solution-aware." Flows that you build directly in the Power Automate interface without a solution are sometimes called "non-solution flows" — and they are much harder to move between environments. They can only be exported as individual files, connection references don't travel cleanly with them, and they lose their governance properties.

    Always build in a solution from the start.

    Creating a Solution

    1. In make.powerapps.com, switch to your Dev environment.
    2. Click Solutions in the left navigation.
    3. Click + New solution.
    4. Fill in:
      • Display name — e.g., Invoice Processing
      • Publisher — this is important. Create a publisher with a meaningful prefix like contoso rather than using the default. The publisher prefix is prepended to all technical names in your solution, preventing collisions with Microsoft's own components.
      • Version — start at 1.0.0.0
    5. Click Create.

    Now, when you create a flow, create it inside this solution (Solution → + New → Automation → Cloud flow) rather than from the main Power Automate interface.

    Managed vs. Unmanaged Solutions

    When you export a solution, you choose between two modes:

    • Unmanaged — the components inside can be freely edited after import. Use this for Dev, where developers need to work on the components.
    • Managed — the components are locked down after import. Flows inside a managed solution cannot be directly edited — only the deploying organization can update them through a new managed solution import. Always deploy Managed solutions to Test and Production.

    This is a critical governance mechanism. Deploying a managed solution to Production means that even someone with admin access cannot casually edit a flow in production. Any change must go back through the Dev/Test pipeline. The solution enforces the process.

    Key insight

    Managed solutions in production aren't bureaucratic overkill — they're the technical enforcement of your change management policy. Without them, "we never edit production directly" is a promise. With them, it's a constraint.


    Connection References: Handling Authentication Across Environments

    Flows use connections (authenticated links to services) to do their work. The connection to SharePoint in Dev belongs to a dev user's account. That same connection obviously can't exist in Production under the same credentials.

    Connection references solve this. A connection reference is a named pointer inside a solution that says "this flow uses a SharePoint connection" without specifying which SharePoint connection. When you import the solution into a new environment, you (or an admin) map the connection reference to the appropriate connection in that environment.

    This means your flow doesn't hardcode "John's personal SharePoint connection." Instead it references SharePoint - Invoice Processing, and in each environment, that reference points to the appropriate service account or connection.

    Setting this up well is foundational to secure production flows. The full story of credentials, connection references, and data loss prevention is covered in depth in Securing Power Automate Flows in Production: Managing Credentials, Connection References, and Data Loss Prevention Policies.


    DLP Policies: Different Rules for Different Environments

    Data Loss Prevention (DLP) policies control which connectors can be used together in a flow. They're defined and applied per environment (or tenant-wide).

    Your Dev environment might have a permissive DLP policy to let developers experiment with new connectors. Your Production environment should have a strict policy that only allows approved, business-critical connectors — preventing flows from accidentally (or intentionally) sending production data to unapproved external services.

    A common setup looks like this:

    Environment DLP Policy Style
    Dev Permissive — most connectors allowed for experimentation
    Test Mirrors Production — strict, to catch DLP violations before they reach Prod
    UAT/Staging Same as Test
    Production Strict — only approved connectors in the Business tier

    Warning

    Many teams forget to mirror Production DLP policy in Test. A flow might work fine in Test (with permissive DLP) and then fail immediately on import to Production because a connector is blocked there. Always make Test as restrictive as Production for DLP purposes.


    Naming Conventions and Documentation

    Governance starts with naming. When you have three environments, multiple solutions, and dozens of flows, chaos arrives quickly without a consistent convention.

    A solid naming convention for flows inside your solutions looks like this:

    [Organization]-[Domain]-[Action]-[Version]
    

    For example:

    • Contoso-Invoicing-ProcessIncomingInvoice-v1
    • Contoso-Invoicing-NotifyApprover-v1
    • Contoso-HR-OnboardNewEmployee-v2

    For environments themselves:

    • Contoso - [Domain] - Dev
    • Contoso - [Domain] - Test
    • Contoso - [Domain] - Prod

    Document each environment's purpose, owner, DLP policies, and Dataverse configuration in a shared location — a SharePoint page, a Confluence doc, or even a well-maintained README. This documentation pays dividends when someone new joins the team or when an audit requires you to demonstrate your governance structure.


    Hands-On Exercise

    This exercise walks you through setting up a minimal but real three-environment structure.

    Scenario: You're building automation to process expense reports submitted through a Microsoft Form. The flow reads the form response, looks up the employee in Dataverse, and notifies their manager.

    Step 1: Create your environments

    In the Power Platform admin center, create three Sandbox environments named:

    • [YourName] - Expenses - Dev
    • [YourName] - Expenses - Test
    • [YourName] - Expenses - Prod

    (Use Sandbox type for all three since this is a learning exercise — in real projects, Prod would be Production type.)

    Step 2: Create a solution in Dev

    Switch to your Dev environment in make.powerapps.com. Create a new solution called Expense Processing with a publisher prefix of your initials (e.g., jdoe).

    Step 3: Add an environment variable

    Inside your solution, create an environment variable:

    • Display name: Expense Notification Email
    • Type: Text
    • Default value: your own email address (simulating a dev notification target)

    Step 4: Create a simple flow inside the solution

    Inside the solution, create a new instant cloud flow triggered by a manual button. Add a single Send an Email action that uses the Expense Notification Email environment variable as the To address, with a test subject line.

    Step 5: Export as Unmanaged, then Managed

    Export the solution twice:

    1. As Unmanaged — save this as your "source of truth" backup from Dev
    2. As Managed — this is what you'll deploy to Test and Prod

    Step 6: Import the Managed solution into Test

    Switch to your Test environment. Import the Managed solution. When prompted for the environment variable value, enter a different email address to simulate a test notification target.

    Run the flow manually and verify it sends to the Test email, not the Dev email — without you touching the flow itself.

    Step 7: Reflect

    Notice what just happened: the same flow, the same code, the same logic — behaving differently in each environment because of the environment variable, and locked down in Test/Prod because it was deployed as Managed.


    Common Mistakes & Troubleshooting

    "I built my flow in the default environment and now I can't move it cleanly." Non-solution flows in the default environment can be exported individually, but connection references, environment variables, and managed solution protections won't apply. Your best option is to recreate the flow inside a proper solution in Dev. It's painful once, but worth it.

    "I deployed a Managed solution to Test and now I can't edit the flow to fix a bug." Correct — that's by design. Go back to Dev, fix the bug in the Unmanaged version there, then re-export as Managed and re-import to Test. This keeps your Dev environment as the single source of truth.

    "My environment variable isn't showing up in the flow's dynamic content." Environment variables need to be referenced explicitly in expressions, not through dynamic content pickers. Use the expression parameters('cr123_InvoiceSiteURL') where cr123_InvoiceSiteURL is your variable's schema name. The schema name is shown in the variable's detail panel.

    "The flow worked in Test but fails immediately in Production." The most common causes are: (1) a DLP policy in Production blocks a connector that's allowed in Test, (2) a connection reference wasn't mapped to a valid connection during the Production import, or (3) an environment variable value wasn't set for Production and defaulted to a Dev value. Check all three systematically.

    "We can't afford three environments per project." Licensing is a real constraint. Power Platform environments with Dataverse require a per-app or per-user plan allocation. For smaller teams, a pragmatic compromise is a single shared Dev/Test environment (with a strict rule that no production data ever enters it) plus a dedicated Production. Two environments are significantly better than one, even if three is the ideal.


    Summary & Next Steps

    You've now built the mental model for how professional Power Platform teams structure their work. The key ideas:

    • Environments are isolated containers — they don't share flows, data, connections, or policies
    • The three-tier model (Dev, Test, Production) separates experimentation from validation from live operations
    • Solutions package your work for safe, repeatable promotion between tiers
    • Managed solutions enforce the governance rule that production is never edited directly
    • Environment variables let one solution behave differently in each environment without code changes
    • Connection references abstract authentication so flows aren't tied to one person's credentials
    • DLP policies should mirror Production settings in Test to catch issues early

    This foundation unlocks everything else in enterprise Power Platform work. Once your environments are structured correctly, you can build with confidence — knowing that a bug in Dev stays in Dev, that a successful Test deployment is a genuine signal of production readiness, and that your Production system is governed, auditable, and change-controlled.

    Your natural next step is to learn the full ALM (Application Lifecycle Management) pipeline — automated pipelines that export, package, and deploy solutions across environments without manual steps. That's covered in detail in Deploying and Managing Power Automate Solutions Across Environments: ALM Pipelines, Solution-Aware Flows, and Environment Variables for Enterprise-Scale Delivery.

    You should also explore how to govern your environment estate at scale — tracking who owns what, enforcing policies, and staying compliant — in Auditing and Governing Power Automate at Scale: Flow Ownership Policies, Usage Analytics, and Automated Compliance Reporting with CoE Toolkit.

    Work With Us

    From insight to implementation

    Reading is the start. When you're ready to build the data, automation, or AI systems behind it, our team turns strategy into shipped results.

    Let's Build

    Enterprise Cloud Flows

    Previous

    Implementing Batching and Chunking Strategies in Power Automate: Processing High-Volume Data Sets Efficiently with Do Until Loops, Array Splitting, and API Rate Limit Management

    Related Insights

    Power AutomateExpert

    Automating Microsoft Access Database Operations with Power Automate Desktop: Opening Reports, Running Queries, and Exporting Results to Excel in Unattended RPA Workflows

    29 min
    Power AutomatePractitioner

    Automating Windows Notification Area and System Tray Interactions in Power Automate Desktop

    22 min
    Power AutomateExpert

    Automating PDF Form Filling and Digital Signature Workflows in Power Automate Desktop

    26 min

    On this page

    • Introduction
    • Prerequisites
    • What Is a Power Platform Environment?
    • The Three-Tier Model: Dev, Test, and Production
    • Development (Dev)
    • Test (sometimes called QA or Staging)
    • Production (Prod)
    • Creating Environments in the Power Platform Admin Center
    • Environment Variables: The Same Solution, Different Behavior
    • Creating an Environment Variable
    • Solutions: Packaging Your Work for Safe Promotion
    • Solution-Aware vs. Non-Solution Flows
    • Creating a Solution
    • Managed vs. Unmanaged Solutions
    • Connection References: Handling Authentication Across Environments
    • DLP Policies: Different Rules for Different Environments
    • Naming Conventions and Documentation
    • Hands-On Exercise
    • Common Mistakes & Troubleshooting
    • Summary & Next Steps