Skip to main content

Change Sets vs SFDX: What Actually Works in Salesforce Deployments

About Us
Published by yuliya.dzemidchuk
26 March 2026

Change Sets vs SFDX: Choosing the Right Deployment Approach in Salesforce

 

The Deployment Question Everyone Faces

Building features in a sandbox is straightforward. Deploying them to production opens a minefield of decisions. Two completely different paths exist: Change Sets (the GUI-based approach) and Salesforce DX (the source-driven workflow). Every blog post declares "SFDX is the future!", but many orgs have successfully used Change Sets for years. This article cuts through the noise and explains when each approach actually makes sense, based on real project patterns across organizations of different sizes and maturity levels.

Deployments using both methods reveal that neither approach is universally "better." The right choice depends on team size, development patterns, existing infrastructure, and control requirements. What works for a 3-person startup doesn’t scale well for larger teams, and vice versa.

 

Change Sets: The Point-and-Click Deployment

How They Work
Change Sets are Salesforce's built-in deployment tool. Metadata components are selected in Setup, added to an Outbound Change Set, uploaded to the target org, and then deployed via the Inbound Change Set interface. Everything happens through the UI - no command line, no Git, no external tools required.

When Change Sets Make Sense:

Small teams (1-5 developers): Coordination overhead is minimal. Everyone knows what everyone else is working on.

Simple orgs with few customizations: Limited metadata means less chance of conflicts or missing dependencies.

Infrequent deployments: Monthly or quarterly deployments make manual processes acceptable.

Admin-heavy teams: Admins are comfortable with Setup but unfamiliar with command line tools.

No version control infrastructure: No Git repository, no CI/CD pipeline, no DevOps resources.

One-off emergency fixes: Quick production hotfixes without touching deployment pipelines.

The Good Parts:

  • Zero setup required - built into Salesforce

  • No external tools or CLI knowledge needed

  • Visual interface shows exactly what's being deployed

  • Works immediately, no authentication or connection setup

  • Non-technical users can deploy with proper permissions

  • Dependency validation happens automatically

The Painful Parts:

  • No version control - tracking what was deployed when becomes impossible

  • Can't see diffs between environments

  • No rollback capability - broken deployments require manual fixes

  • Complex dependency management - missing dependencies fail with cryptic errors

  • No automation - every deployment requires manual clicking

  • Profile/permission set deployments include everything, often failing or overwriting

  • Can't deploy certain metadata types (some settings, features)

  • No pre-deployment testing - hoping tests pass in production

  • Concurrent deployments cause conflicts

  • Change Set size limits (10,000 components)

     

Salesforce DX: The Source-Driven Approach

How It Works
SFDX (Salesforce CLI + source tracking) treats metadata as code. Metadata is pulled from orgs into local Git repositories, changed locally, committed, then pushed to target orgs. Everything lives in version control. Deployments can be automated via CI/CD pipelines (Jenkins, GitHub Actions, GitLab). Scratch orgs enable temporary development environments.

When SFDX Makes Sense:

Medium-to-large teams (5+ developers): Source control prevents conflicts. Feature branches isolate work.

Complex orgs with extensive metadata: Source tracking shows exactly what changed. Diffs are visible in Git.

Frequent deployments: Automated pipelines deploy on every merge. Manual processes don't scale.

Developer-heavy teams: Teams comfortable with Git, CLI tools, and DevOps practices.

Multi-environment strategy: Dev → QA → UAT → Prod pipelines require consistent deployments.

Rollback requirements: Git history enables reverting to previous states.

Compliance/audit requirements: Git log provides complete deployment history with who/what/when.

Package development: Creating managed/unmanaged packages requires SFDX.

The Good Parts:

  • Full version control - every change tracked in Git

  • Diffs show exactly what changed between versions

  • Automated deployments via CI/CD pipelines

  • Rollback by reverting Git commits

  • Scratch orgs for isolated development

  • Modular deployments - deploy only what changed

  • Better dependency management - package.xml is explicit

  • Testing runs before deployment (in CI/CD)

  • Multiple developers work simultaneously without conflicts

  • Metadata stored in readable XML format

The Painful Parts:

  • Steep learning curve - requires Git, CLI, and DevOps knowledge

  • Initial setup is complex - repos, pipelines, authentication

  • Metadata conflicts in Git require manual resolution

  • Source tracking can desync between local and org

  • Some metadata types don't work well with the source format

  • Profile/permission deployments remain problematic

  • Requires infrastructure (Git hosting, CI/CD tools)

  • Admins without a technical background struggle

  • Scratch org limits (active scratch orgs per day)

  • Learning investment required before productivity gains

     

Common Deployment Mistakes (Both Approaches)

The Top 10 Deployment Disasters:

  1. Deploying without testing
    Never deploy to production without running tests. SFDX automates this in CI/CD. Change Sets require manual test execution in the target org before deployment.

  2. Missing dependencies
    Both approaches fail due to missing dependencies. Change Sets attempt detection but miss components. SFDX package.xml must include everything explicitly. Always deploy to the sandbox first.

  3. Profile/Permission Set chaos
    Profiles include everything - all field permissions, object access, tab visibility. Deploying profiles often fails or overwrites permissions. Solution: Use Permission Sets, or break profiles into smaller pieces using SFDX source format.

  4. Deploying during business hours
    Deployments lock metadata and can cause downtime. Deploy outside business hours or use maintenance windows. SFDX allows testing the deployment before execution.

  5. No rollback plan
    Change Sets have no rollback - changes must be manually undone. SFDX can revert Git commits, but requires a clean history. Always document the rollback plan before deploying.

  6. Forgetting field-level security
    Custom fields deploy without field-level security. Users can't see new fields. Change Sets require manually adding FLS. SFDX can include FLS in permission sets.

  7. Not validating before deploying
    Both approaches support validation-only deployments. Always validate first, especially in production. Catch errors before they break production.

  8. Deploying everything at once
    Large Change Sets (5,000+ components) often fail. Break into smaller deployments. SFDX allows incremental deployments - deploy only changed files.

  9. Ignoring deployment errors
    Partial deployment success is still failure. If any component fails, investigate. Don't redeploy hoping it works. Check deployment logs thoroughly.

  10. No deployment documentation
    Document what was deployed, why, and when. Change Sets provide minimal history. SFDX Git commits should explain changes. Future maintenance depends on this.

     

Problematic Metadata Types (Both Approaches)

These metadata types cause deployment headaches regardless of method:

Profiles: Include every permission in the org. Deploying profiles often overwrites existing permissions. Solution: Deploy permission sets instead, or use SFDX source format to break profiles into manageable pieces.

Custom Settings: Data and metadata are separate. Change Sets deploy structure, not data. SFDX requires separate data import. Solution: Export/import CSV data separately.

Email Templates: Classic vs Lightning templates have different formats. Folder structure matters. Solution: Keep templates in folders with clear naming. Deploy folders first, then templates.

Reports and Dashboards: Folder structure must exist first. Report types must be deployed before reports. Dashboard components reference reports. Solution: Deploy in order - folders → report types → reports → dashboards.

Custom Metadata Types: Type definition and records are separate deployments. Change Sets handle this poorly. SFDX requires two deployments. Solution: Deploy type first, verify, then deploy records.

Flows: Active flows can't be deleted, only deactivated. Deploying flow changes requires deactivation first. Solution: Include deactivation step in deployment process.

Sharing Rules: Recalculate after deployment. Can cause performance issues in large orgs. Solution: Deploy during low-usage windows, monitor sharing recalculation.

Managed Packages: Can't deploy managed package components. Dependencies on managed packages break deployments. Solution: Ensure all managed packages are installed in target org first.

 

The Hybrid Approach: Best of Both Worlds?

Using Both Methods Strategically
Many organizations successfully use both approaches. The key is defining when to use each one based on the situation, not rigid adherence to one method.

Practical Hybrid Strategy:

Regular development: Use SFDX for normal feature development. All code changes, metadata updates, and new features go through Git and CI/CD.

Emergency hotfixes: Use Change Sets for critical production fixes that can't wait for CI/CD pipeline. Document these deployments carefully.

Admin changes: Let admins use Change Sets for simple config changes (validation rules, page layouts, fields). Pull these into Git periodically.

Major releases: Use SFDX for planned releases with full testing, rollback plans, and deployment automation.

Third-party integrations: Use SFDX to version-control integration components. Makes troubleshooting easier when integrations break.

Making Hybrid Work:

  • Establish clear rules on when to use each method

  • Sync Change Set deployments into Git after deployment

  • Use separate sandboxes for SFDX vs Change Set work

  • Train team on both approaches

  • Monitor what gets deployed via each method

  • Gradually migrate to SFDX as team matures

     

Migrating from Change Sets to SFDX

The Reality of Migration
Organizations currently using Change Sets who want to switch to SFDX face a significant undertaking. Migration requires planning, training, infrastructure setup, and gradual adoption over months, not weeks.

Migration Steps:

  1. Set up Git repository and retrieve production metadata using SFDX CLI

  2. Establish branching strategy (main, develop, feature branches)

  3. Set up CI/CD pipeline basics (GitHub Actions, Jenkins, etc.)

  4. Train team on Git basics, SFDX CLI, and source-driven workflow

  5. Start with new development in SFDX, keep Change Sets for existing work

  6. Gradually migrate existing sandboxes to SFDX source tracking

  7. Document deployment processes for both methods during transition

  8. Phase out Change Sets once team is comfortable with SFDX

  9. Maintain emergency Change Set access for critical hotfixes

Common Migration Pitfalls:

  • Trying to migrate everything at once - gradual migration works better

  • Not training team before switching - expect 2-3 months of lower productivity

  • Assuming SFDX solves all problems - it introduces new complexities

  • Not documenting the process - institutional knowledge gets lost

  • Expecting immediate ROI - benefits come after initial investment period

  • Forcing SFDX on non-technical admins - keep Change Sets available for simple tasks

 

Decision Framework: Which Should You Use?

Key Questions to Consider:

How many developers?

1-3 → Change Sets probably fine

4-10 → SFDX worth considering

10+ → SFDX essential

How often are deployments?

Monthly or less → Change Sets acceptable

Weekly → SFDX recommended

Daily → SFDX required

Is deployment history required?

Nice to have → Change Sets with manual docs

Required for compliance → SFDX with Git

What is team composition?

Mostly admins → Change Sets

Mixed admins/developers → Hybrid

Mostly developers → SFDX

Is DevOps infrastructure available?

No Git, no CI/CD → Change Sets

Git but no CI/CD → SFDX manual deployments

Full pipeline → SFDX automated

What is org complexity?

Simple (few objects/fields) → Either works

Moderate complexity → SFDX helps with organization

High complexity (1000+ objects) → SFDX essential

Is rollback capability needed?

No → Either works

Yes → SFDX with Git history

 

The Honest Assessment

Neither Method Is Perfect
Change Sets are simple but don't scale. SFDX scales but requires investment. The "right" choice depends on team size, org complexity, deployment frequency, and technical capability. Internet opinions shouldn't pressure teams into SFDX if Change Sets work for their situation. Conversely, sticking with Change Sets because "that's how it's always been done" fails when teams grow to 15 developers deploying daily.

Practical Starting Points:

  • Small team, simple org, infrequent deploys → Change Sets are sufficient

  • Growing team, increasing complexity → Plan SFDX migration

  • Large team, frequent deploys → Invest in SFDX infrastructure

  • Mixed technical capability → Use a hybrid approach

  • Legacy org with years of Change Sets → Gradual migration, not big bang

The Strategic Reality:
Deployment method is not just a technical decision - it's strategic, affecting team productivity, deployment reliability, and long-term maintainability. The cost of switching from Change Sets to SFDX is real (training, infrastructure, productivity dip), but so is the cost of staying on Change Sets when the team and org have outgrown them (deployment errors, lack of version control, manual overhead).

The decision should consider not only your current setup, but also how your team and org are expected to grow. A 3-person team today might be 10 people in a year. An org with 50 custom objects today might have 500 next year. Choose the approach that scales with growth, or plan migration before hitting the breaking point.

Both Change Sets and SFDX work - the question is which one works better for the specific context. Make informed decisions based on actual needs, not theoretical best practices. And whatever approach is chosen, document deployments, test before deploying, and always have a rollback plan. That matters more than the tool itself.


Alexander Zherebilo
Certified Salesforce Developer
image
Expertise
Question to the expert
image

We have available resources to start working on your project within 5 business days

1 UX Designer

image

1 Admin

image

2 QA engineers

image

1 Consultant

image
Related Articles
All articles
image
Is Salesforce Winning the Public Sector Race?
An analysis of Salesforce's rapid expansion into the U.S. public sector, tracing its path from cautious early government licensing deals in the 2010s through the launch of Government Cloud in 2012, its pivotal role in COVID-19 vaccine rollouts, and its 2025–2026 push into military and intelligence work via Agentforce and Missionforce. The piece covers major 2026 contracts — including a $5.6 billion Army deal, a $1.6 billion VA agreement, and Pentagon Impact Level 5 authorization — alongside real-world case studies like California's REAL ID processing and the UK's NHS back-office operations. It also examines the structural obstacles still facing Salesforce and other vendors in government tech: legacy IT systems decades old, outdated federal procurement rules, budget constraints, and organizational caution around AI adoption, plus the competitive pressure from Palantir, Microsoft, and Oracle in the race for public sector AI spending.
28 August 2026
image
Why Your Salesforce Flows Are Agentforce's Biggest Problem
This article argues that the most underestimated risk in Agentforce deployments isn't data quality — it's the automation layer: years of overlapping Flows, Process Builder processes, Apex triggers, and managed package logic that no one has reviewed end-to-end. It explains why AI agents inherit automation complexity without the tribal knowledge human admins carry, why technical debt only becomes visible after an agent hits it in production, and why a clean demo is no indicator of production readiness. The article closes with a concrete, tool-by-tool inventory approach using Flow Trigger Explorer, Salesforce Optimizer, Setup Audit Trail, Apex Debug Logs, Agent Builder, and Health Check — scoped to the specific processes the agent will actually use rather than the whole org.
23 July 2026
image
How to Wire Multiple Salesforce Projects in One Org Without Breaking Everything
This article maps the real integration patterns that emerge when multiple Salesforce projects — both managed packages and unpackaged code — share a single org. It covers four concrete patterns: attaching custom triggers to package-owned objects, calling global members exposed by managed packages, writing directly into another project's objects, and runtime-guarded reads of package data. It then addresses access control for authenticated and guest users, including the Master-Detail wall and the without sharing elevation pattern. The piece closes with eight concrete risks (compile-time dependencies that block uninstall, upgrade coupling, silent cascade failures, access invisible to admins) and six actionable recommendations for keeping cross-project coupling manageable.
08 July 2026