
Andrew Hanna

Andrew Hanna

Definition first: source-driven development is the model where your Git repository, not any org, is the source of truth for your Salesforce configuration and code. Orgs become disposable environments you deploy from the repo, rather than places you copy changes between. Everything else in this guide follows from that one sentence.
In source-driven development, every change lands in version control first and reaches an org second. The repository holds the intended state of the org. A deployment is the act of making an org match that intent.
Three practical properties come with it:
Org-to-org deployment, whether by change sets or by direct comparison of two orgs, treats a live org as the reference. That is the actual distinction, and it has consequences.
Note what is not on that list: speed. Source-driven development is not automatically faster. It is repeatable, which is a different and more durable property.
Source tracking is the platform feature that records which components changed in an org or in your local project since the last sync, so you can pull only what actually moved instead of retrieving everything and reading a diff.
The constraint people hit is coverage. Source tracking is available in scratch orgs and in Developer and Developer Pro sandboxes. It is not available everywhere, which means a source-driven model has to answer for the environments that cannot track changes for you: full sandboxes, partial copies and production. Those are exactly the orgs where undocumented changes happen.
Commit source format. The two formats describe the same metadata differently:
package.xml manifest. One field edit rewrites a large file, so
the diff carries the whole object and reviews get noisy.
sfdx-project.json.
The practical effect is on review and merge, not on function. Small files produce readable diffs and far fewer conflicts when two people touch the same object, which is precisely the situation source-driven development exists to survive.
This is the question most explainers skip, and it is the one that decides whether the model survives contact with a real Salesforce team. Someone will always change something in production. A hotfix at midnight, an admin adding a picklist value, a managed package upgrade rewriting metadata you had committed.
Decide these three things before you migrate, not after:
Most Salesforce teams are admins and consultants, not CLI users, and this is where source-driven migrations usually stall. Sequence it so that nobody has to learn Git to keep working:
Does source-driven development require every admin to learn Git?
No. It requires the repository to be authoritative. Which humans interact with Git directly is a tooling choice, not a property of the model.
Do I have to convert my org to source format all at once?
No. Convert by package boundary or by team. A partial repository that is genuinely authoritative for its scope beats a complete one nobody trusts.
Is source-driven development the same as CI/CD?
No. Source-driven development decides where truth lives. CI/CD automates moving that truth into orgs. You can have the first without the second, but not usefully the reverse.
What about metadata that cannot be source controlled?
Some settings and package-owned components will not round-trip cleanly. Document them as excluded and control them by procedure instead of pretending the repo covers them.
Serpent is built for exactly the team this guide describes: the repository stays the source of truth while admins and consultants work in tickets, with delta deployments, drift detection and one-click rollback on top. More reference guides are in SF Guides.
Commitment free!