← Back to list
🛠️

salesforce-developer Checked

Writes and debugs Apex code, builds Lightning Web Components, optimizes SOQL queries, implements …
🛠️ Developer Tools skills By Jeffallan Version v1.0.0 Added 2026-09-07 Updated 2026-09-07 Source ↗
8.7Overall rating
2Views
5Downloads
11.3kStars

Installation

🤖 Install via AI

Copy the prompt below and send it to your AI assistant (e.g. Claude Code) — it will follow the instructions and install automatically.

Install the "salesforce-developer" skill by following the instructions at https://skill123.me/install/salesforce-developer.
⌨️ Command line install

Run in your terminal — downloads and installs to ~/.claude/skills/.

curl -fsSL https://skill123.me/install/salesforce-developer.sh | bash
📦 Download ZIP

Download the zip and extract it into your skills directory (e.g. ~/.claude/skills/), then restart your session.

⬇ Download v1.0.0 · 33 KB
📊 Static rating
8.7/10
Trigger
7.5
Structure
10.0
Workflow
7.2
Content
9.0
Engineering
10.0
Security
10.0

Six-dimension rubric with reviewer rationale.

View scorecard ↓
🛡 Dynamic test
—

Not live-tested yet — this skill is rated on static analysis only.

About this skill

Writes and debugs Apex code, builds Lightning Web Components, optimizes SOQL queries, implements triggers, batch jobs, platform events, and integrations on the Salesforce platform. Use when developing Salesforce applications, customizing CRM workflows, managing governor limits, bulk processing, or setting up Salesforce DX and CI/CD pipelines.

Salesforce Developer

Documentation

Writes and debugs Apex code, builds Lightning Web Components, optimizes SOQL queries, implements triggers, batch jobs, platform events, and integrations on the Salesforce platform. Use when developing Salesforce applications, customizing CRM workflows, managing governor limits, bulk processing, or setting up Salesforce DX and CI/CD pipelines.

Salesforce Developer

Core Workflow

1. **Analyze requirements** - Understand business needs, data model, governor limits, scalability

2. **Design solution** - Choose declarative vs programmatic, plan bulkification, design integrations

3. **Implement** - Write Apex classes, LWC components, SOQL queries with best practices

4. **Validate governor limits** - Verify SOQL/DML counts, heap size, and CPU time stay within platform limits before proceeding

5. **Test thoroughly** - Write test classes with 90%+ coverage, test bulk scenarios (200-record batches)

6. **Deploy** - Use Salesforce DX, scratch orgs, CI/CD for metadata deployment

Reference Guide

Load detailed guidance based on context:

| Topic | Reference | Load When |

|-------|-----------|-----------|

| Apex Development | references/apex-development.md | Classes, triggers, async patterns, batch processing |

| Lightning Web Components | references/lightning-web-components.md | LWC framework, component design, events, wire service |

| SOQL/SOSL | references/soql-sosl.md | Query optimization, relationships, governor limits |

| Integration Patterns | references/integration-patterns.md | REST/SOAP APIs, platform events, external services |

| Deployment & DevOps | references/deployment-devops.md | Salesforce DX, CI/CD, scratch orgs, metadata API |

Constraints

### MUST DO

  • Bulkify Apex code — collect IDs/records before loops, query/DML outside loops
  • Write test classes with minimum 90% code coverage, including bulk scenarios
  • Use selective SOQL queries with indexed fields; leverage relationship queries
  • Use appropriate async processing (batch, queueable, future) for long-running work
  • Implement proper error handling and logging; use Database.update(scope, false) for partial success
  • Use Salesforce DX for source-driven development and metadata deployment

### MUST NOT DO

  • Execute SOQL/DML inside loops (governor limit violation — see bulkified trigger pattern below)
  • Hard-code IDs or credentials in code
  • Create recursive triggers without safeguards
  • Skip field-level security and sharing rules checks
  • Use deprecated Salesforce APIs or components

Code Patterns

### Bulkified Trigger (Correct Pattern)


// CORRECT: collect IDs, query once outside the loop
trigger AccountTrigger on Account (before insert, before update) {
    AccountTriggerHandler.handleBeforeInsert(Trigger.new);
}
View full documentation

public class AccountTriggerHandler {

public static void handleBeforeInsert(List<Account> newAccounts) {

Set<Id> parentIds = new Set<Id>();

for (Account acc : newAccounts) {

if (acc.ParentId != null) parentIds.add(acc.ParentId);

}

Map<Id, Account> parentMap = new Map<Id, Account>(

[SELECT Id, Name FROM Account WHERE Id IN :parentIds]

);

for (Account acc : newAccounts) {

if (acc.ParentId != null && parentMap.containsKey(acc.ParentId)) {

acc.Description = 'Child of: ' + parentMap.get(acc.ParentId).Name;

}

}

}

}



// INCORRECT: SOQL inside loop — governor limit violation

trigger AccountTrigger on Account (before insert) {

for (Account acc : Trigger.new) {

Account parent = [SELECT Id, Name FROM Account WHERE Id = :acc.ParentId]; // BAD

acc.Description = 'Child of: ' + parent.Name;

}

}



### Batch Apex

public class ContactBatchUpdate implements Database.Batchable<SObject> {

public Database.QueryLocator start(Database.BatchableContext bc) {

return Database.getQueryLocator([SELECT Id, Email FROM Contact WHERE Email = null]);

}

public void execute(Database.BatchableContext bc, List<Contact> scope) {

for (Contact c : scope) {

c.Email = 'unknown@example.com';

}

Database.update(scope, false); // partial success allowed

}

public void finish(Database.BatchableContext bc) {

// Send notification or chain next batch

}

}

// Execute: Database.executeBatch(new ContactBatchUpdate(), 200);



### Test Class

@IsTest

private class AccountTriggerHandlerTest {

@TestSetup

static void makeData() {

Account parent = new Account(Name = 'Parent Co');

insert parent;

Account child = new Account(Name = 'Child Co', ParentId = parent.Id);

insert child;

}

@IsTest

static void testBulkInsert() {

Account parent = [SELECT Id FROM Account WHERE Name = 'Parent Co' LIMIT 1];

List<Account> children = new List<Account>();

for (Integer i = 0; i < 200; i++) {

children.add(new Account(Name = 'Child ' + i, ParentId = parent.Id));

}

Test.startTest();

insert children;

Test.stopTest();

List<Account> updated = [SELECT Description FROM Account WHERE ParentId = :parent.Id];

System.assert(!updated.isEmpty(), 'Children should have descriptions set');

System.assert(updated[0].Description.startsWith('Child of:'), 'Description format mismatch');

}

}



### SOQL Best Practices

// Selective query — use indexed fields in WHERE clause

List<Opportunity> opps = [

SELECT Id, Name, Amount, StageName

FROM Opportunity

WHERE AccountId IN :accountIds // indexed field

AND CloseDate >= :Date.today() // indexed field

ORDER BY CloseDate ASC

LIMIT 200

];

// Relationship query to avoid extra round-trips

List<Account> accounts = [

SELECT Id, Name,

(SELECT Id, LastName, Email FROM Contacts WHERE Email != null)

FROM Account

WHERE Id IN :accountIds

];



### Lightning Web Component (Counter Example)

<!-- counterComponent.html -->

<template>

<lightning-card title="Counter">

<div class="slds-p-around_medium">

<p>Count: {count}</p>

<lightning-button label="Increment" onclick={handleIncrement}></lightning-button>

</div>

</lightning-card>

</template>



// counterComponent.js

import { LightningElement, track } from 'lwc';

export default class CounterComponent extends LightningElement {

@track count = 0;

handleIncrement() {

this.count += 1;

}

}



<!-- counterComponent.js-meta.xml -->

<?xml version="1.0" encoding="UTF-8"?>

<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">

<apiVersion>59.0</apiVersion>

<isExposed>true</isExposed>

<targets>

<target>lightning__AppPage</target>

<target>lightning__RecordPage</target>

</targets>

</LightningComponentBundle>



[Documentation](https://jeffallan.github.io/claude-skills/skills/platform/salesforce-developer/)

Score breakdown

Trigger
7.5
Strong What/When and rich keyword triggers, but no When-Not exclusion boundary.
Structure
10.0
205-line SKILL.md with clean Load-When table routing to five topic references, no redundant files.
Workflow
7.2
Six-step workflow plus MUST/MUST-NOT constraints and bulkified patterns, but knowledge-heavy with no scripts or failure guards.
Content
9.0
Concise imperative instructions; all code samples complete and directly usable.
Engineering
10.0
Valid frontmatter with rich metadata; all referenced paths exist; no scripts to check.
Security
10.0
No scripts, no secrets, no injection; external URLs are official Salesforce domains plus a personal docs page.
Well-structured Salesforce expert skill with excellent progressive disclosure via five focused references and a 205-line SKILL.md; only gaps are missing When-Not boundary in description and reliance on static reference docs rather than executable workflow.