Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
jeffallan avatar

Salesforce Developer

  • 3.2k installs
  • 10.8k repo stars
  • Updated May 20, 2026
  • jeffallan/claude-skills

salesforce-developer is a specialist skill for Apex, Lightning Web Components, SOQL optimization, triggers, batch jobs, and Salesforce DX deployments on the CRM platform.

About

Salesforce Developer is a specialist skill for building on the Salesforce platform with Apex classes, Lightning Web Components, SOQL and SOSL queries, triggers, batch jobs, platform events, and REST or SOAP integrations. The workflow analyzes business requirements and governor limits, designs declarative versus programmatic solutions, implements bulkified code, validates SOQL and DML counts plus heap and CPU limits, writes test classes targeting 90 percent or higher coverage including 200-record bulk scenarios, and deploys through Salesforce DX scratch orgs and CI/CD metadata pipelines. MUST rules require collecting IDs before loops, selective indexed SOQL, async processing for long work, Database.update with partial success, and proper error handling. MUST NOT rules forbid SOQL or DML inside loops, hard-coded IDs, recursive triggers without safeguards, skipping field-level security checks, or deprecated APIs. Reference guides load for Apex development, LWC framework, SOQL optimization, integration patterns, and deployment DevOps. Code patterns include bulkified trigger handlers, batch Apex with 200-record scopes, relationship queries, and LWC counter components with exposed metad.

  • Covers Apex, Lightning Web Components, SOQL, triggers, batch jobs, and platform events on Salesforce.
  • Requires bulkified code with SOQL and DML outside loops to respect governor limits.
  • Mandates 90 percent or higher test coverage including 200-record bulk test scenarios.
  • Documents batch Apex, relationship queries, and LWC component scaffolding with metadata.
  • Uses Salesforce DX for source-driven development and metadata CI/CD deployment.

Salesforce Developer by the numbers

  • 3,212 all-time installs (skills.sh)
  • +90 installs in the week ending Jul 28, 2026 (Skillselion tracking)
  • Ranked #177 of 4,386 Backend & APIs skills by installs in the Skillselion catalog
  • Security screen: HIGH risk (skills.sh audit)
  • Data as of Jul 28, 2026 (Skillselion catalog sync)
At a glance

salesforce-developer capabilities & compatibility

Capabilities
bulkified apex trigger and handler implementatio · lightning web component scaffolding with metadat · selective soql and relationship query optimizati · batch apex and async processing patterns · salesforce dx deployment and test class authorin
Works with
salesforce
Use cases
api development · database · testing
From the docs

What salesforce-developer says it does

Write test classes with minimum 90% code coverage, including bulk scenarios
SKILL.md
Execute SOQL/DML inside loops (governor limit violation
SKILL.md
npx skills add https://github.com/jeffallan/claude-skills --skill salesforce-developer

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs3.2k
repo stars10.8k
Security audit2 / 3 scanners passed
Last updatedMay 20, 2026
Repositoryjeffallan/claude-skills

How do I implement Salesforce Apex and LWC with correct bulkification, governor limit safety, and 90 percent test coverage?

Write bulkified Apex, Lightning Web Components, optimized SOQL, triggers, batch jobs, platform events, and Salesforce DX deployments with 90 percent test coverage.

Who is it for?

Developers building Sales Cloud or Service Cloud customizations who need enforced Apex bulkification and governor limit patterns.

Skip if: Skip for non-Salesforce stacks or when you only need declarative Flow configuration without programmatic Apex.

When should I use this skill?

User mentions Salesforce, Apex, Lightning Web Components, SOQL, governor limits, triggers, or Salesforce DX deployment.

What you get

Production-oriented Apex classes, LWC components, bulkified triggers, batch jobs, and test classes deployable via Salesforce DX.

  • Apex classes and triggers
  • LWC component bundles
  • test classes with bulk coverage

By the numbers

  • Documents AccountService-style Apex service class structure with bulkified Set<Id> processing

Files

SKILL.mdMarkdownGitHub ↗

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:

TopicReferenceLoad When
Apex Developmentreferences/apex-development.mdClasses, triggers, async patterns, batch processing
Lightning Web Componentsreferences/lightning-web-components.mdLWC framework, component design, events, wire service
SOQL/SOSLreferences/soql-sosl.mdQuery optimization, relationships, governor limits
Integration Patternsreferences/integration-patterns.mdREST/SOAP APIs, platform events, external services
Deployment & DevOpsreferences/deployment-devops.mdSalesforce 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);
}

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

Related skills

How it compares

Pick salesforce-developer for Apex-specific bulk and service patterns instead of generic Java backend skills.

FAQ

Can SOQL run inside a for loop?

No. SOQL or DML inside loops violates governor limits; collect IDs first and query once outside the loop.

What test coverage is required?

Minimum 90 percent code coverage including bulk scenarios with 200-record batches per the skill constraints.

How should long-running work be handled?

Use async processing such as batch, queueable, or future methods instead of synchronous governor-limited execution.

Is Salesforce Developer safe to install?

skills.sh reports 2 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.

Backend & APIsbackendintegrations

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.