Associate
Administrator
Developer
Consultant
Marketing
Architect
Accredited Professional
Sales
Designer
Tableau
Claude

Updated for Summer '26

New to this track? Our Salesforce Certified Platform Foundations exam prep is the recommended first step. See our certification path to understand where this certification fits. The Salesforce Certified Platform Developer exam weights Logic and Process Automation most heavily (25%) — see the full breakdown, study tips, and practice questions below. See our full study guide for deep section coverage. Ready to book? Read our exam tips and study plan.

Quick Knowledge Check

A developer writes a trigger that runs a SOQL query inside a for loop. What governor limit risk does this create?

▶ Reveal answer

SOQL inside a loop will hit the 100 SOQL query limit if the loop iterates over more than 100 records. Fix: run one SOQL query before the loop using WHERE Id IN :idSet, store results in a Map<Id, SObject>, and look up records inside the loop with no additional queries.

15 full practice questions with explanations are below ↓

60 practice Qs3.8K+ students/moUpdated Summer '26Verified vs official exam guide

Join 3.8K+ passed this month • Updated for 2026 • No sign-up required

$200 exam • 68% passing score • Free practice

Request full PD1 mock exam & study plan

Krishna Mohan — 5x Salesforce certified author

Written & verified by Krishna Mohan

5× Salesforce Certified · 12+ years in data engineering & Salesforce · Updated for Summer '26

ADM-201PD1PD2App BuilderSales Cloud Consultant

Verify on Trailblazer.me · Methodology · Contact

Who is the Platform Developer I exam for?

  • Developers new to Salesforce: You have programming experience in Java, JavaScript, or another language and want to build on the Salesforce platform using Apex and LWC.
  • Admins transitioning to development: You passed ADM-201 and want to move beyond declarative tools into custom code, triggers, and integrations.
  • Full-stack developers at SI partners: Your firm requires PD1 certification for project staffing, and you need to validate Salesforce-specific development skills.

Exam Fees & Registration

Exam Fee

$200

One-time registration fee

Retake Fee

$100

If you need to retake the exam

Comparing certs? View all Salesforce exam fees in one place →

Certification Validity

Your Salesforce Certified Platform Developer certification is valid for 3 years from the date you pass the exam. You'll need to maintain your certification through continuing education or retake the exam.

How to Register

Register for the Salesforce Certified Platform Developer (PD1) exam through the official Salesforce certification portal.

Register for Exam

Exam data verification: questions, duration, passing score, fees, and section coverage were checked against official source references on .

Official sources: Exam guide·Salesforce exam pricing·Independent prep resource; no braindumps or leaked exam questions.

PD1Intermediate

Salesforce PD1 Certification: Free Practice Exam & Study Guide (Summer '26)

The Platform Developer I certification validates your skills in developing custom applications on the Salesforce platform using Apex and Visualforce.

60
Questions
68%
Passing Score
110 min
Duration
$200
Exam Fee

Salesforce Certified Platform Developer Exam Weightage by Section

Data Modeling and Management15%
Logic and Process Automation25%
User Interface25%
Testing, Debugging, and Deployment20%
Integration and APIs15%

Exam Topics

Apex FundamentalsData ModelingSOQL & SOSLDML OperationsTriggersVisualforceLightning ComponentsTestingDebug & DeploymentIntegration

Why This Certification Matters

PD1 is the standard developer cert.

It is required for many technical and architect paths.

Exam Tips

  • 1Logic and User Interface are 50% combined—Apex triggers, LWC, and when to use each.
  • 2Know governor limits: SOQL 100, DML 150, etc., and how to avoid hitting them.
  • 3Testing: minimum code coverage, positive and negative tests, Test.runAs().
  • 4Understand @AuraEnabled, @InvocableMethod, and when to use REST vs SOAP.

Prerequisites

  • Programming experience (Java, C#, or similar)
  • Administrator or App Builder recommended

Focus Areas

  • Apex and Triggers
  • Lightning Web Components
  • Testing and Deployment
  • Governor Limits

Study Strategy

Code daily in a dev org.

Build a small LWC + Apex feature and write tests.

Memorize key governor limits and practice debugging scenarios.

Exam Format and First-Attempt Readiness

The Salesforce Certified Platform Developer exam has 60 questions in 105 min, passing score 68%. Most Salesforce exams test scenario-based decisions — focus on when to use each feature, not just terms.

  • Study Logic and Process Automation and User Interface first — together they carry 50% of the exam.
  • Do timed question sets. Build pacing and confidence.
  • Review why wrong answers are wrong. It improves scenario reasoning.
  • Book the exam once your mock scores are steady above 68%.
Suggested study timeline for PD1 (6–10 weeks)
Is the PD1 Exam Hard?
PD1 Exam Format Explained

Platform Developer I: Key Concepts for the Exam

Apex Governor Limits & the Limits Class

Governor limits prevent any one transaction from monopolising shared platform resources. Key synchronous limits: 100 SOQL queries, 150 DML statements, 50,000 records returned from queries, 6 MB heap size, 10 seconds CPU time. Asynchronous limits are generally 2× the synchronous limits. Use Limits.getQueries() and Limits.getLimitQueries() from the Apex Common Classes (the Limits class) to check usage at runtime. The exam tests which limit applies to a given code scenario and what to change.

Bulkification: Never Put SOQL or DML Inside a Loop

The core Apex pattern: query records before loops using a single SOQL with IN :triggerIdSet, collect changes in a List or Map inside loops, then perform DML after loops. Map<Id, SObject> is the workhorse — used to relate trigger records to queried related records by Id. Use Database.insert(records, false) for partial success (returns SaveResult array). The exam presents code with SOQL/DML in a loop and asks you to identify the issue or fix it.

Apex Triggers: Order of Execution & Handler Pattern

Before triggers fire before the record is saved — use them to validate or modify field values before save (changes to Trigger.new persist without extra DML). After triggers fire after the record is committed — use them when you need the record Id or to update related records. Key context variables: Trigger.new, Trigger.old (not available on insert), Trigger.isInsert, Trigger.isUpdate. Best practice: one trigger per object, all logic delegated to a handler class. The Order of Execution for a save: validation rules → before triggers → system validation → after triggers → workflow rules → DML commit → flows (record-triggered).

SOQL: Relationships, Aggregates & SOSL

Child-to-parent query: SELECT Id, Account.Name FROM Contact (dot notation). Parent-to-child: SELECT Id, (SELECT Id FROM Contacts) FROM Account (subquery). Aggregate functions: COUNT(), SUM(), AVG() — require GROUP BY. SOSL searches multiple objects simultaneously: FIND ’term’ IN ALL FIELDS RETURNING Account, Contact. Use SOSL for cross-object searches; use SOQL when you know the object.

Process Automation: Flow vs. Apex Triggers

The exam tests when to use declarative automation (Flow) vs. programmatic automation (Apex Triggers). Use Flow for standard CRUD operations, approval automation, and complex UI flows without code. Use Apex Triggers when you need cross-object logic beyond Flow’s capabilities, governor limit control, or callout scheduling. Both can fire on the same record — the Order of Execution determines which runs first (Flow runs before After Triggers in record-triggered contexts). Key PD1 topic: if Flow can do it declaratively, prefer Flow; if it needs Apex Classes, Limits, or Database class methods, use Apex.

Testing Framework: SeeAllData, Test.startTest & HttpCalloutMock

Minimum 75% code coverage required across all Apex to deploy to production. Test classes use @isTest. Test data is isolated by default (SeeAllData=false) — create all test data explicitly using @TestSetup or within each test method. Test.startTest() resets governor limits and marks the start of the tested code; Test.stopTest() forces async operations (future methods, batch jobs) to complete synchronously. Mock HTTP callouts with Test.setMock(HttpCalloutMock.class, mockImpl). @TestVisible exposes private members to test classes without making them public.

Lightning Web Components (LWC): Wire Service & @AuraEnabled

LWC is the modern Salesforce UI framework. Key decorators: @track (reactive private properties), @api (public properties exposed to parent), @wire (reactive Apex method calls). The @wire decorator connects an LWC to an Apex method marked @AuraEnabled(cacheable=true) — the cacheable flag is required for @wire. Use lightning-record-form for standard record CRUD without writing Apex. Communication between components uses CustomEvent (child to parent) and LightningMessageService (unrelated components).

Core Apex Code Patterns for PD1

The PD1 exam presents real Apex code in 30–40% of questions. These three patterns appear most frequently — understand them at a read-and-reason level, not just from a definition.

1. Bulk-Safe Trigger with Handler Class

One trigger per object, all logic in a handler class. SOQL runs once outside the loop; DML runs once after the loop.

// AccountTrigger.trigger
trigger AccountTrigger on Account (before insert, after insert) {
AccountTriggerHandler handler = new AccountTriggerHandler();
if (Trigger.isBefore && Trigger.isInsert) {
handler.onBeforeInsert(Trigger.new);
}
if (Trigger.isAfter && Trigger.isInsert) {
handler.onAfterInsert(Trigger.new);
}
}
 
// AccountTriggerHandler.cls
public class AccountTriggerHandler {
public void onBeforeInsert(List<Account> newAccounts) {
// Validate or set field values — no DML needed, changes persist
for (Account acc : newAccounts) {
if (acc.Industry == null) {
acc.Industry = 'Technology';
}
}
}
 
public void onAfterInsert(List<Account> newAccounts) {
// Collect Ids, run one SOQL, perform one DML outside loop
Set<Id> accountIds = new Map<Id, Account>(newAccounts).keySet();
List<Contact> contacts = [SELECT Id, AccountId FROM Contact
WHERE AccountId IN :accountIds];
List<Contact> toUpdate = new List<Contact>();
for (Contact c : contacts) {
c.Description = 'Processed';
toUpdate.add(c);
}
update toUpdate; // Single DML — not inside loop
}
}

2. Database Class with Partial Success & Error Handling

Use Database.insert(records, false) to allow partial success; inspect the SaveResult array for errors.

List<Account> accountsToInsert = new List<Account>();
accountsToInsert.add(new Account(Name = 'Valid Account'));
accountsToInsert.add(new Account()); // Missing required field — will fail
 
// allOrNone = false → partial success allowed
Database.SaveResult[] results = Database.insert(accountsToInsert, false);
 
for (Database.SaveResult sr : results) {
if (sr.isSuccess()) {
System.debug('Inserted: ' + sr.getId());
} else {
for (Database.Error err : sr.getErrors()) {
System.debug('Error: ' + err.getMessage()
+ ' Fields: ' + err.getFields());
}
}
}

3. Test Class with HttpCalloutMock

HTTP callouts cannot run in tests — implement HttpCalloutMock and register it with Test.setMock().

// Mock implementation
@isTest
global class MockHttpCallout implements HttpCalloutMock {
global HTTPResponse respond(HTTPRequest req) {
HttpResponse res = new HttpResponse();
res.setHeader('Content-Type', 'application/json');
res.setBody('{"status":"success"}');
res.setStatusCode(200);
return res;
}
}
 
// Test class
@isTest
private class CalloutServiceTest {
@isTest
static void testCalloutSuccess() {
Test.setMock(HttpCalloutMock.class, new MockHttpCallout());
Test.startTest();
String result = CalloutService.makeCallout('https://api.example.com');
Test.stopTest(); // Forces async to complete
System.assertEquals('success', result, 'Expected success status');
}
}
Execution context: Triggers, Flow, and Process Builder share one transaction (exam mental model)

All automation that fires on a single DML operation — before/after triggers, Record-Triggered Flows, and Process Builder — runs inside one execution context. Governor limits (SOQL queries, DML statements, CPU time) accumulate across all of them, not per-automation. This is why bulkification and avoiding recursive updates matters for PD1.

Diagram: a single transaction execution context boundary contains before triggers, validation, after triggers, Record-Triggered Flow, and Process Builder, all sharing one shared governor limit poolOne Transaction / Execution Context(one shared governor-limit pool for everything inside this box)Before TriggerField defaults, validationRecord Saved(not yet committed)After TriggerRelated record updatesRecord-Triggered FlowRuns in the same transactionProcess Builder (legacy)Also shares the same contextIf a Flow/Process re-updates the record, before/after triggers can re-fire — watch for recursionGovernor limits (100 SOQL, 150 DML, CPU time) apply to the WHOLE box above — not per automation

How to Pass the Platform Developer I (PD1) Exam

PD1 is a code-heavy exam where most questions present Apex code or describe a development scenario and ask you to identify the issue, fix, or best practice. Understanding governor limits, bulkification patterns, and test methodology at a deep practical level is what separates passing candidates from failing ones.

Governor Limit Questions — the Pattern to Recognise

The exam will show you Apex code and ask “what is wrong with this code?” The answer is almost always SOQL or DML inside a for loop. Look for for (Account a : accounts) { insert contact; } — that’s DML in a loop, and it will hit the 150 DML statement limit. The fix: collect records in a List inside the loop, then call insert contactList; after the loop. For SOQL: use Maps populated with a single query before the loop, not a query inside the loop.

Testing Questions — the Three Rules to Memorise

(1) Minimum 75% code coverage across the entire org (not per class) to deploy. (2) Test data must be created in the test method — do not rely on org data (@isTest(SeeAllData=false) is the default). (3) HTTP callout tests require a mock implementation — use Test.setMock(HttpCalloutMock.class, mockImpl). Questions often say “a developer’s test class fails when calling an external API” — the answer is always to implement HttpCalloutMock.

Async Apex Selection — Which Method for Which Scenario

Use Future methods for simple one-off async operations (HTTP callouts from triggers, mixed DML). Use Batch Apex when processing more than 10,000 records (up to 50 million). Use Queueable Apex when you need chaining (one job triggers another) or need to pass complex objects between async contexts. Use Scheduled Apex for time-based execution. Exam tip: if the question says “millions of records” or “process in chunks” — the answer is Batch Apex. If it says “chain jobs” — Queueable.

Trigger Scenarios — Before vs After

When the question says “set a field value before the record is saved” — use a before trigger (changes to Trigger.new persist without a DML call). When the question says “create a related record after an account is created” — use an after trigger (the account Id exists after save). When the question says “prevent a record from being saved if a condition is not met” — use addError() in a before trigger. Never call a SOQL query in a trigger without first checking bulkification patterns.

Exam Strategy

PD1 questions often include realistic-looking Apex code snippets. Read code carefully — the “wrong answer” in the options often uses the right method name but in the wrong context (e.g., using a future method where a queueable is needed, or using DML before a callout). Passing score is 68% (41/60 questions). Aim for 78%+ on full mock exams — the additional buffer accounts for exam-day stress and unfamiliar question phrasing. Complete the official Trailhead PD1 Trailmix before booking.

Is the Salesforce Certified Platform Developer (PD1) Exam Hard?

DifficultyChallenging; plan about 8-16 weeks of focused prep.

Book When ReadyScore 85%+ on three timed mocks before scheduling.

Use Practice, Not DumpsOriginal practice questions build skill without risking your credential.

Exam format: 60 questions, 105 min, 68% passing score.

Get the Full PD1 Question Bank

Most candidates book the exam after scoring 75%+ on full mocks.

If you’re planning to test this quarter, aim to complete full mocks at least 10–14 days before your exam date.

Want to ensure you pass on your first try? Contact us for more information on our full 60-question mock exams and a personalized study plan. You can also reach out to km.krishnamohan25@gmail.com.

Request Mock Exams & Study Plan

PD1 Study Resources

Coming from the admin track? ADM-201 exam tips (Summer '26) covers the Salesforce fundamentals that overlap with PD1.

Salesforce Certified Platform Developer (PD1) Exam FAQs

What is covered on the Salesforce Certified Platform Developer (PD1) exam?
The Salesforce Certified Platform Developer (PD1) exam—formerly Salesforce Certified Platform Developer I— covers section-wise weightage as shown above. Use the exam topics and practice questions on this page to align your study with the official outline.
What programming languages do I need to know for Platform Developer I?
You need to know Apex (Salesforce's Java-like language) and JavaScript for Lightning Web Components. Experience with Java, C#, or similar object-oriented languages is helpful, but you can learn Apex through Trailhead and hands-on practice.