Building consists of 14% of total score in Salesforce Platform Lifecycle and Deployment Architect Exam. The topic covers source control, Salesforce DX & source tracking, development models and environments.

NOTE

Most of the content in this work was generated with the assistance of AI and carefully reviewed, edited, and curated by the author. If you have found any issues with the content on this page, please do not hesitate to contact me atΒ support@issacc.com.

🧭 Source Control, Testing & Quality (Salesforce)

⚑ TL;DR

  • 🧰 Git as source of truth; pick a branching model by team size, cadence, risk.
  • πŸ§ͺ Own your test data; cover positive/negative/permission; mock externals.
  • πŸ“¦ Prefer package-based + scratch orgs for modular CI/CD; use org-based + sandboxes for simpler/legacy.
  • βœ… Enforce standards + PRs + reviews + static analysis in CI/CD.

1) πŸ—‚οΈ Source Control Essentials (Git/GitHub)

Why Git: history, rollback, parallel work, reviews, CI hooks.

Key terms: repo β€’ branch β€’ commit β€’ merge β€’ tag
Merge types: fast-forward ↔️ recursive
Conflicts: overlapping edits on same lines (or delete vs edit)

🌳 Branching Models β€” Quick Chooser

  • 🧩 Centralized: 1–3 devs, super simple.
  • πŸš€ GitHub Flow: CI/CD, short-lived features β†’ PR β†’ main.
  • πŸ›€οΈ Gitflow: schedules, multiple trains; main + develop + feature/release/hotfix.
  • 🌍 Forking: open-source, strict control.
  • 🌲 Trunk-Based Dev (TBD): tiny branches, daily merges; feature flags.

2) 🧰 Salesforce DX & Source Tracking

  • πŸ“œ VCS = source of truth; DX enables source-driven work.
  • πŸ–₯️ Salesforce CLI for pull/push, tests, deploy.
  • πŸ§ͺ Scratch orgs: disposable, configurable, perfect for packages & CI.
  • πŸ” Source Tracking: default in scratch; can enable for prodβ†’Dev/Dev Pro sandboxes (some metadata still manual).

3) πŸ§ͺ Test Data & Unit Testing (Apex)

Always create test data β†’ repeatable, env-agnostic tests.
Methods: brute force β€’ @TestSetup β€’ Test Data Factory β€’ CSV static resource (great for large volumes).
Default: tests don’t see org data β†’ avoid SeeAllData=true (rare exceptions).

Test types

  • βœ… Positive: valid in β†’ expected out.
  • 🚫 Negative: invalid/edge β†’ graceful handling.
  • πŸ” Permission-based: System.runAs() to verify CRUD/FLS/perm behavior.
  • πŸ§ͺ Mocks/Stubs: HttpCalloutMock, Test.setMock(), StubProvider.

4) πŸ—οΈ Development Models & Environments

🏒 Org-Based Model

  • Sandboxes + VCS; more manual change tracking.
  • Good for smaller/legacy teams.

πŸ“¦ Package-Based Model

  • Modular (unlocked/2GP) packages, immutable versions, dependencies.
  • Needs Dev Hub (enable Unlocked/2GP).
  • Works best with scratch orgs, CI, automated tests.

🧱 Environments

  • πŸ§ͺ Scratch orgs: temp, automated, ideal for features/CI/packages.
  • πŸ–οΈ Sandboxes: dev/integration/testing/training with prod-like data.
  • πŸ§‘β€πŸ’» Dev Edition vs 🀝 Partner DE: Partner DE = more API/storage/licenses (great for partners & apps).

Tip

Many teams & modules + CI ➜ Package-based + scratch orgs
Simpler/legacy ➜ Org-based + sandboxes


5) βœ… Ensuring Code Quality

Standards & frameworks

  • 🧾 Team naming/style; trigger framework (e.g., Kevin O’Hara), error logging, bypass via custom perms/settings.
  • 🧠 Apex best practices: bulkify, avoid SOQL/DML in loops, use Limits, clear comments.

PRs & Reviews

  • Every change via PR β†’ automated checks + human review.
  • Use a checklist: standards, limits, security (CRUD/FLS), performance, readability.
  • Keep feedback respectful & actionable; fix before merge.

Static Analysis

  • πŸ”Ž Tools: PMD, Salesforce CLI Scanner, CodeScan, Clayton.
  • Run in CI on every PR; block on criticals.

Security (AppExchange)

  • πŸ›‘οΈ Validate vs OWASP threats; enforce CRUD/FLS (common failure).

🧭 Scenario Playbook (Quick Picks)


🧾 Mini-Checklists

PR Checklist

  • πŸ§ͺ Tests (positive/negative/perm) updated
  • πŸ”Ž Static analysis passes (no new criticals)
  • πŸ” CRUD/FLS + limits respected
  • 🧱 Naming/format/trigger framework followed
  • 🏷️ Release tag/rollback plan ready

Test Checklist

  • 🧰 @TestSetup or factory used
  • 🚫 No SeeAllData=true (unless justified)
  • 🌐 Mock callouts; stub internals
  • βœ… Asserts verify behavior & messages
  • πŸ“Š Data volumes approximate reality

πŸ“ˆ Flow Charts

🌳 Branching Strategy Chooser

flowchart TD
  A[Start] --> B{Team size / cadence}
  B -->|Tiny team, simple| C[Centralized<br/>single main]
  B -->|Rapid CI/CD| D[GitHub Flow<br/>short-lived branches + PRs]
  B -->|Multiple releases / hotfixes| E[Gitflow<br/>main + develop + feature/release/hotfix]
  B -->|External contributors| F[Forking<br/>PRs from forks]
  B -->|Daily merges, flags| G[Trunk-Based Dev<br/>tiny branches + feature flags]

πŸš€ GitHub Flow (happy path)

flowchart LR
  A[Create branch from main] --> B[Commit changes]
  B --> C[Open Pull Request]
  C --> D[CI: tests & static analysis]
  D -->|Pass| E[Review & Approve]
  D -->|Fail| B
  E --> F[Merge to main]
  F --> G[Delete branch & deploy]

πŸ›€οΈ Gitflow Overview

flowchart LR
  subgraph Primary
    M[main] --- D[develop]
  end

  subgraph Feature Cycle
    D --> F1[feature/*]
    F1 --> D
  end

  subgraph Release Cycle
    D --> R[release/*]
    R --> M
    R --> D
  end

  subgraph Hotfix
    M --> H[hotfix/*]
    H --> M
    H --> D
  end

🌲 Trunk-Based Development

flowchart TD
  A[Work in trunk or very short-lived branch] --> B[Small commits daily]
  B --> C[CI runs: build, tests, lint]
  C -->|Green| D[Merge quickly to main]
  C -->|Red| A
  D --> E[Feature flags hide incomplete work]
  E --> F[Continuous deploy]

πŸ§ͺ Apex Testing & Test Data Map

flowchart LR
  T1["@TestSetup / Factory / CSV"] --> T2["Isolated Test Data"]
  T2 --> T3["Positive Tests"]
  T2 --> T4["Negative Tests"]
  T2 --> T5["Permission-based Tests (runAs)"]
  T2 --> T6["Mocks & Stubs"]
  T3 --> T7["Assertions: expected outputs"]
  T4 --> T8["Try/Catch + expected exceptions"]
  T5 --> T9["CRUD/FLS & sharing verified"]
  T6 --> T10["External deps isolated"]


πŸ” Merge Types (quick reference)

flowchart LR
  subgraph Fast-Forward
    A1[main] --> B1[feature tip]
  end
  subgraph Recursive Merge
    A2[main] --- B2[feature]
    B2 --> C2[merge commit on main]
  end

πŸ“š Flashcards

🌳 Git & Branching


🧰 Salesforce DX & Environments


πŸ“¦ Dev Models


πŸ§ͺ Apex Testing & Test Data


βœ… Quality: Standards, PRs, Reviews, Static Analysis


🧭 Scenario Quick Hits