Updated for Winter '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. Below you'll find exam weightage, study tips, and practice questions. 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 ↓
Join 3.8K+ passed this month • Updated for 2026 • No sign-up required
$200 exam • ~65% passing score • Free practice
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 I 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 I (PD1) exam through the official Salesforce certification portal.
Register for ExamSalesforce PD1 Certification: Free Practice Exam & Study Guide (Winter '26)
The Platform Developer I certification validates your skills in developing custom applications on the Salesforce platform using Apex and Visualforce.
Recommended Prerequisites
We recommend completing this certification first to prepare you better.
Salesforce Certified Platform Developer I Exam Weightage by Section
Exam Topics
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
Most Salesforce exams test scenario-based decisions. For Salesforce Certified Platform Developer I, focus on when to use each feature, not just terms.
- Do timed question sets. Build pacing and confidence.
- Review why wrong answers are wrong. It improves scenario reasoning.
- Study high-weight topics first. Then close gaps.
- Book the exam when your mock scores are steady.
Suggested study timeline for PD1 (6–10 weeks)
Suggested study timeline for PD1 (6–10 weeks)
PD1 requires hands-on coding practice — not just reading. Budget time for Apex exercises in a Developer Edition org alongside study.
- Weeks 1–2: Salesforce Fundamentals & Data Modelling (20%) — objects, relationships, schema design, SOQL basics
- Weeks 2–3: Logic & Process Automation (23%) — Apex basics, governor limits, bulkification patterns
- Weeks 3–5: Apex Triggers & Classes (24%) — before/after triggers, handler pattern, async Apex (future, batch, queueable)
- Weeks 5–6: Testing & Debugging (22%) — test class structure, mock callouts, code coverage, debug logs
- Weeks 6–7: UI & Deployment (11%) — LWC basics, Aura, Visualforce, change sets, sandboxes
- Weeks 7–8: Full mock exams and targeted weak-area review
Already an admin? Reduce Weeks 1–2 to 3–4 days — you already know the data model and platform fundamentals.
Is the PD1 Exam Hard?
Is the PD1 Exam Hard?
The Salesforce Platform Developer I exam is considered moderately difficult — harder than ADM-201, but accessible to candidates with 3–6 months of real Apex development experience. The challenge is that most questions present actual code and require you to reason about governor limits, async patterns, and trigger behaviour under realistic conditions.
- 60 scored questions in 110 minutes — roughly 1.8 minutes per question.
- 68% passing score — you can miss up to 19 questions and still pass.
- Code-heavy — expect 30–40% of questions to include Apex code snippets.
- Scenario-based — most questions describe a business or technical requirement and ask for the right approach.
- No multiple-select trick — PD1 uses single-best-answer format (unlike ADM-201 which has some multiple-select).
Pass Rate Guidance
Candidates who pass PD1 typically score 78%+ on at least 3 full-length mock exams before booking. If you're scoring below 70% on mocks, focus on governor limits and bulkification — those two topics cover over 30% of the exam combined.
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');
}
}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.
Exam Section Difficulty Heatmap
Which sections are a gimme vs which ones trap confident candidates. Use this to prioritise your final-week revision.
| Exam Section | Difficulty | Study Tip |
|---|---|---|
| Data Modeling and Management | Moderate | SOQL relationship queries (parent-to-child, child-to-parent) and relationship field naming conventions. |
| Logic and Process Automation | Trap ⚠ | SOQL/DML inside loops — every loop in a code snippet should trigger a governor limit check. |
| User Interface | Moderate | LWC component lifecycle hooks (@wire, @api, @track) and when each is appropriate. |
| Testing, Debugging, and Deployment | Hard | System.assert() is required — coverage without assertions is meaningless. HttpCalloutMock for callout tests. |
| Integration and APIs | Hard | REST vs SOAP, Named Credentials, and when to use each integration pattern in a scenario. |
Difficulty based on analysis of common candidate errors across each exam section.
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.
Candidates who complete full mock exams report strong first-time pass rates. For pricing and access, use the contact form below or kindly reach out to km.krishnamohan25@gmail.com.
Get Full Question BankNext Certifications After Developer
After this certification, common next steps in the developer track:
PD1 Study Resources
- PD1 Exam Tips (Winter '26) →Governor limits, bulkification, 75% coverage rule, and a mock-test benchmark to pass first attempt.
- PD1 vs PD2: Which Should You Take First? →Difficulty comparison, what changes between the two exams, and when you are ready for PD2.
- What comes after PD1? Platform Developer II →Advanced Apex, integrations, and design patterns. Requires PD1 certification.
- Full Salesforce Developer Certification Path →Step-by-step guide: PD1 → JavaScript Developer I → PD2 → Integration Architect.
Coming from the admin track? ADM-201 exam tips (Winter '26) covers the Salesforce fundamentals that overlap with PD1.
Salesforce Certified Platform Developer I (PD1) Exam FAQs
- What is covered on the Salesforce Certified Platform Developer I (PD1) exam?
- The Salesforce Certified Platform Developer I (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.
- How much coding experience do I need for Platform Developer I?
- While some programming experience is helpful, you can learn Apex and Lightning Web Components through Trailhead. The exam focuses on understanding when to use code vs declarative tools, governor limits, testing, and basic Apex/LWC concepts rather than advanced programming.
- What is the PD1 passing score and exam format in Winter '26?
- The Platform Developer I (PD1) exam has 60 multiple-choice questions, 110 minutes, and a passing score of 68% (41 correct). Salesforce may include 5 unscored pilot questions. The exam costs $200 USD (retake $100 USD) and is available online-proctored or at a test center.
- What are the most common reasons candidates fail PD1?
- Common failure points: (1) not knowing governor limits (SOQL 100/transaction, DML 150/transaction) and when they trigger, (2) writing DML or SOQL inside a for loop — the exam's most common trap, (3) misunderstanding the 75% code coverage rule and how Test.startTest()/stopTest() affect limit resets, and (4) confusing @AuraEnabled, @RestResource, and @InvocableMethod annotations.
- How long should I study for PD1 and what mock score means I am ready?
- Most candidates with some object-oriented programming background need 4–6 weeks. Target benchmark: score 78%+ on three timed full mocks (60 Q / 110 min), taken one week apart. The actual passing threshold is 68%, but the extra buffer accounts for exam nerves and unfamiliar phrasing on the day.
- What is the bulkification pattern in Apex and why does PD1 test it heavily?
- Bulkification is the practice of writing Apex that processes records in collections (Lists and Maps) rather than one record at a time. The pattern: query all needed records BEFORE loops using a Map keyed by Id, collect changes INSIDE loops into a List, then perform a single DML call AFTER the loop. PD1 tests this heavily because SOQL or DML inside a for loop is the most common governor limit violation in real Salesforce orgs. The exam typically shows code with a loop containing a query or insert and asks candidates to identify the problem or rewrite the code correctly.
- What is the difference between a Future method and a Queueable class in Salesforce?
- @Future methods are the simplest form of async Apex — they run in a separate transaction, support HTTP callouts (when callout=true), and resolve mixed DML errors. Limitations: cannot be chained, cannot pass sObjects directly, limited monitoring. Queueable Apex (implements Queueable) is more powerful: it can be chained (job enqueues another job), can pass complex objects, and provides a Job ID for monitoring via AsyncApexJob. PD1 exam rule: if the question involves chaining async jobs or monitoring job completion, the answer is Queueable. If it's a simple callout from a trigger, Future method is often acceptable.
- What are the most important Apex annotations PD1 candidates must know?
- @isTest — marks a class or method as a test class (does not count toward code coverage). @TestVisible — exposes private methods/variables to test classes without changing access modifiers. @AuraEnabled — exposes an Apex method to Lightning components (LWC and Aura). @InvocableMethod — exposes an Apex method as an action in Flow. @RemoteAction — exposes methods to Visualforce pages via JavaScript remoting. @RestResource / @HttpGet / @HttpPost — creates REST API endpoints in Apex. The PD1 exam frequently presents a scenario and asks which annotation to add.
- What is the difference between SOQL and SOSL and when should each be used?
- SOQL (Salesforce Object Query Language) queries a specific object and its related objects: SELECT Id, Name FROM Account WHERE CreatedDate = TODAY. Use SOQL when you know the object and want records matching specific criteria. SOSL (Salesforce Object Search Language) searches across multiple objects simultaneously using text search: FIND 'Smith' IN ALL FIELDS RETURNING Account, Contact, Lead. Use SOSL when you need to search across multiple objects for a text string — for example, building a search feature that returns results from any object. PD1 tip: if a scenario says "search across multiple objects for a keyword," the answer is SOSL, not SOQL.
- How does Salesforce's security model relate to PD1 Apex development?
- PD1 tests "with sharing" vs "without sharing" class declarations: "with sharing" enforces the running user's sharing rules and OWD (recommended for most cases); "without sharing" bypasses sharing and runs with system-level access. If a class doesn't specify sharing, it inherits from the calling class. PD1 also tests CRUD/FLS enforcement — Apex does not automatically enforce field-level security or CRUD permissions (unlike Visualforce or LWC). Developers must explicitly check Schema.DescribeFieldResult or use Security.stripInaccessible() to enforce FLS. This is a common exam differentiator.
- Are there free practice questions for the Salesforce Certified Platform Developer I (PD1) exam?
- Yes. This page includes 15 free sample practice questions with explanations. Use them to test your knowledge before booking the exam.
- How do I prepare for the Salesforce Certified Platform Developer I (PD1) certification?
- Use the exam tips, prerequisites, and study strategy on this Salesforce Certified Platform Developer I (PD1) study guide—formerly Salesforce Certified Platform Developer I— Focus first on the highest-weighted sections, then take the sample practice questions. Schedule the exam when you consistently score well on practice tests.
- Where can I find the official exam outline for Salesforce Certified Platform Developer I (PD1)?
- Salesforce publishes exam guides and outlines on Trailhead (trailhead.salesforce.com). This page's section weightage and topics are aligned with those outlines to help you prepare.