{"id":19709,"date":"2026-08-04T18:27:55","date_gmt":"2026-08-04T18:27:55","guid":{"rendered":"https:\/\/dianapps.com\/blog\/?p=19709"},"modified":"2026-08-05T05:52:51","modified_gmt":"2026-08-05T05:52:51","slug":"salesforce-development-guide","status":"publish","type":"post","link":"https:\/\/dianapps.com\/blog\/salesforce-development-guide\/","title":{"rendered":"Salesforce Development: The Complete Guide to Apex, LWC, Flow and Best Practices"},"content":{"rendered":"<p>Most Salesforce projects don\u2019t fail because someone wrote bad code; they fail because someone wrote code that shouldn\u2019t have existed. A trigger where a Flow would have done, a custom screen where a page layout was fine, an integration built point-to-point that now breaks every release.<\/p>\n<p><span style=\"font-weight: 400;\">Salesforce development is less about knowing Apex syntax than knowing when to reach for it.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This guide covers both, and it\u2019s the hub for every development guide we publish.<\/span><\/p>\n<blockquote><p><b>TL;DR:<\/b><span style=\"font-weight: 400;\"> Salesforce development means extending the platform through declarative tools (Flow, App Builder) and code (Apex, Lightning Web Components). It runs on a multi-tenant, metadata-driven architecture, which is why governor limits exist and why bulkification isn\u2019t optional. The average US Salesforce developer earns <\/span><b>$95,814<\/b><span style=\"font-weight: 400;\"> (<\/span><a href=\"https:\/\/www.payscale.com\/research\/US\/Job=Salesforce_Developer\/Salary\"><span style=\"font-weight: 400;\">PayScale<\/span><\/a><span style=\"font-weight: 400;\">, 2026), and IDC projects the ecosystem will create <\/span><b>11.6 million jobs<\/b><span style=\"font-weight: 400;\"> between 2022 and 2028.<\/span><\/p><\/blockquote>\n<h2><b>What Is Salesforce Development?<\/b><\/h2>\n<p><span style=\"font-weight: 400;\"><a href=\"https:\/\/dianapps.com\/salesforce-development-services\">Salesforce development<\/a> is the practice of extending the Salesforce platform beyond its standard configuration using declarative tools, custom code, or both. It differs from general software development in one decisive way: you build inside a shared, governed runtime rather than on your own infrastructure.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"> <img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-19730 size-full\" src=\"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-4-2026-11_46_57-PM.webp\" alt=\"Salesforce Development Activities\" width=\"1536\" height=\"1024\" srcset=\"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-4-2026-11_46_57-PM.webp 1536w, https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-4-2026-11_46_57-PM-1024x683.webp 1024w, https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-4-2026-11_46_57-PM-768x512.webp 768w, https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-4-2026-11_46_57-PM-640x427.webp 640w, https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-4-2026-11_46_57-PM-400x267.webp 400w\" sizes=\"auto, (max-width: 1536px) 100vw, 1536px\" \/><\/span><\/p>\n<p><span style=\"font-weight: 400;\">It splits into three activities that get lumped together and shouldn\u2019t be.<\/span><\/p>\n<ul>\n<li><b><\/b> <b>Configuration:<\/b><span style=\"font-weight: 400;\"> Changing what already exists. Page layouts, fields, validation rules, permission sets. No code, no deployment risk, any trained admin can do it.<\/span><\/li>\n<li><b><\/b> <b>Customisation: <\/b>B<span style=\"font-weight: 400;\">uilding new behaviour declaratively. Flows, custom objects, App Builder pages, dynamic forms. Still no code, but you\u2019re now designing systems and can absolutely design them badly.<\/span><\/li>\n<li><b><\/b> <b>Custom development:<\/b><span style=\"font-weight: 400;\"> Writing Apex, Lightning Web Components, integrations, or packaged apps. Full control, full responsibility, mandatory test coverage.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">The distinction is commercial as much as technical. Configuration is measured in hours; custom development in sprints. We break the boundary down in<\/span><span style=\"font-weight: 400;\"> configuration versus customisation<\/span><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><b>What Does a Salesforce Developer Actually Do?<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">A Salesforce developer translates business requirements into platform solutions, writing Apex for logic the declarative tools can\u2019t express, building Lightning Web Components for custom interfaces, integrating external systems through APIs, and maintaining code quality across three annual platform upgrades.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The day-to-day, honestly:<\/span><\/p>\n<ul>\n<li><b><\/b> <b>Requirements Translation:<\/b><span style=\"font-weight: 400;\"> Deciding whether a request needs code at all. This is the highest-leverage part of the job and the least visible.<\/span><\/li>\n<li><b><\/b> <b>Building:<\/b><span style=\"font-weight: 400;\"> Apex classes and triggers, LWC components, Flows, integrations.<\/span><\/li>\n<li><b><\/b> <b>Testing:<\/b><span style=\"font-weight: 400;\"> Unit tests with real assertions, not coverage padding.<\/span><\/li>\n<li><b><\/b> <b>Deploying:<\/b><span style=\"font-weight: 400;\"> Source control, CI\/CD pipelines, sandbox strategy.<\/span><\/li>\n<li><b><\/b> <b>Debugging:<\/b><span style=\"font-weight: 400;\"> Reading debug logs, tracing governor limit exceptions, diagnosing why an automation fired twice.<\/span><\/li>\n<li><b><\/b> <b>Release management:<\/b><span style=\"font-weight: 400;\"> Regression testing against Spring, Summer, and Winter releases you didn\u2019t schedule.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">The line against the admin role: <\/span><b>an administrator manages what Salesforce is configured to do; a developer changes what it\u2019s capable of doing.<\/b><span style=\"font-weight: 400;\"> In small orgs, one person does both. Full comparison in <\/span><span style=\"font-weight: 400;\">admin vs developer vs architect vs consultant<\/span><span style=\"font-weight: 400;\">.<\/span><\/p>\n<h2><b>How Does the Salesforce Platform Architecture Work?<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">Salesforce runs as a multi-tenant platform: your org shares infrastructure with thousands of others, and the platform enforces per-transaction resource limits so no tenant can degrade the rest. This single constraint shapes every design decision you\u2019ll make.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"> <img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-19731 size-full\" src=\"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-4-2026-11_49_46-PM.webp\" alt=\"How to design Salesforce solutions considering multi-tenancy?\" width=\"1535\" height=\"1024\" srcset=\"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-4-2026-11_49_46-PM.webp 1535w, https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-4-2026-11_49_46-PM-1024x683.webp 1024w, https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-4-2026-11_49_46-PM-768x512.webp 768w, https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-4-2026-11_49_46-PM-640x427.webp 640w, https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-4-2026-11_49_46-PM-400x267.webp 400w\" sizes=\"auto, (max-width: 1535px) 100vw, 1535px\" \/><\/span><\/p>\n<p><span style=\"font-weight: 400;\">Three properties, each with direct consequences:<\/span><\/p>\n<ul>\n<li><b><\/b> <b>Multi-tenancy:<\/b><span style=\"font-weight: 400;\"> You don\u2019t get a server, you get a governed share of one. This is the origin of every governor limit, and the reason code that works on ten records fails on fifty thousand.<\/span><\/li>\n<li><b><\/b> <b>Metadata-driven: <\/b><span style=\"font-weight: 400;\">Your customisations are stored as metadata, not compiled binaries. Objects, fields, Apex classes, Flows all metadata. That\u2019s what makes source control, sandboxes and packaging possible.<\/span><\/li>\n<li><b><\/b> <b>Three upgrades a year:<\/b><span style=\"font-weight: 400;\"> Spring, Summer, Winter. You don\u2019t choose when. Anything you build must survive an upgrade you didn\u2019t schedule, which is why unsupported hacks eventually break.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">The platform layer beneath the CRM apps is covered separately in <\/span><span style=\"font-weight: 400;\">what the Salesforce Lightning Platform is,<\/span><span style=\"font-weight: 400;\"> including the Platform licence, which costs meaningfully less than full CRM for custom apps that never touch Sales or Service objects.<\/span><\/p>\n<h2><b>Declarative or Code: How Do You Decide?<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">Start declarative. Salesforce\u2019s guidance is clicks before code, and the market has moved decisively that way; developer demand declined 12% in 2025 as low-code absorbed routine Apex work, while Technical Architect demand rose 27% against only 4% supply growth (<\/span><a href=\"https:\/\/www.syncgtm.com\/blog\/how-many-sales-force-developers-are-there\"><span style=\"font-weight: 400;\">SyncGTM<\/span><\/a><span style=\"font-weight: 400;\">, 2026).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">That shift is the practical answer: routine automation is now declarative, and what\u2019s left for code is the hard part.<\/span><\/p>\n<ul>\n<li><b><\/b> <b>Reach for Flow:<\/b><span style=\"font-weight: 400;\"> When logic is record-triggered, linear or lightly branching, and an admin will maintain it.<\/span><\/li>\n<li><b><\/b> <b>Reach for Apex:<\/b><span style=\"font-weight: 400;\"> When you need callouts with retry logic, complex bulk processing, recursion control, transactional rollback, or logic that must be unit-tested to a standard Flow can\u2019t reach.<\/span><\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-19736 size-full\" src=\"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-5-2026-10_58_24-AM.webp\" alt=\"Decision flowchart comparing Salesforce Flow and Apex for automation\" width=\"1536\" height=\"1024\" srcset=\"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-5-2026-10_58_24-AM.webp 1536w, https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-5-2026-10_58_24-AM-1024x683.webp 1024w, https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-5-2026-10_58_24-AM-768x512.webp 768w, https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-5-2026-10_58_24-AM-640x427.webp 640w, https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-5-2026-10_58_24-AM-400x267.webp 400w\" sizes=\"auto, (max-width: 1536px) 100vw, 1536px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">The honest test: <\/span><i><span style=\"font-weight: 400;\">who maintains this in two years?<\/span><\/i><span style=\"font-weight: 400;\"> If the answer is an admin, build it declaratively even when code would be marginally faster today.<\/span><\/p>\n<div style=\"margin: 40px 0; padding: 34px 38px; background: linear-gradient(135deg,#0F5FB8 0%,#184A8C 100%); border-radius: 18px; font-family: -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Arial,sans-serif; color: #fff; box-shadow: 0 12px 30px rgba(15,95,184,.18);\">\n<div style=\"display: inline-block; padding: 8px 16px; background: rgba(255,255,255,.12); border-radius: 999px; font-size: 12px; font-weight: 600; letter-spacing: .3px;\">Need Expert Advice?<\/div>\n<h2 style=\"margin: 22px 0 16px; font-size: 30px; line-height: 1.25; font-weight: bold; color: #ffffff; max-width: 700px;\">Not sure whether your requirement needs code or configuration?<\/h2>\n<p style=\"margin: 0 0 28px; font-size: 17px; line-height: 1.75; color: rgba(255,255,255,.92); max-width: 720px;\">We rebuilt <strong>Freshworks&#8217; entire Freshdesk\u2013Salesforce app in Lightning Web Components (LWC)<\/strong> and have also advised businesses against unnecessary custom development when declarative solutions were the better choice.<\/p>\n<p><a style=\"display: inline-flex; align-items: center; justify-content: center; padding: 15px 30px; background: linear-gradient(135deg,#21B8FF,#0B74F1); border-radius: 12px; color: #ffffff; text-decoration: none; font-size: 16px; font-weight: bold; line-height: 1; white-space: nowrap; box-shadow: 0 8px 20px rgba(0,0,0,.18);\" href=\"https:\/\/dianapps.com\/contact\" target=\"_blank\" rel=\"noopener noreferrer\"><br \/>\nBook a Free Scoping Call \u2192<\/a><\/p>\n<\/div>\n<p><span style=\"font-weight: 400;\">Deeper: <\/span><span style=\"font-weight: 400;\">Flow vs Apex<\/span><span style=\"font-weight: 400;\"> \u00b7 <\/span><span style=\"font-weight: 400;\">Salesforce low-code development<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><b>Apex, LWC, Flow and Visualforce: What Does Each Do?<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">Four building blocks, four jobs; confusing them is where architectural debt starts.<\/span><\/p>\n<h3><b>Apex<\/b><\/h3>\n<ul>\n<li><b><\/b> <b>Salesforce\u2019s server-side language:<\/b><span style=\"font-weight: 400;\"> Java-like, running inside governor limits, and handles triggers, batch and async processing, REST callouts, and logic reusable across Flow, LWC and integrations.<\/span><\/li>\n<li><b><\/b> <b>Non-negotiables:<\/b><span style=\"font-weight: 400;\"> Bulkify everything, keep SOQL and DML outside loops, one trigger per object delegating to a handler class, business logic in service classes rather than the trigger.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">\u2192 <\/span><span style=\"font-weight: 400;\">Apex programming guide<\/span><span style=\"font-weight: 400;\"> \u00b7 <\/span><span style=\"font-weight: 400;\">SOQL and SOSL<\/span><span style=\"font-weight: 400;\"> \u00b7 <\/span><span style=\"font-weight: 400;\">Governor limits<\/span><\/p>\n<h3><b>Lightning Web Components<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">The modern UI framework, built on web standards rather than a proprietary abstraction. Faster than Aura and the default for anything custom-facing.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u2192 <\/span><span style=\"font-weight: 400;\">LWC complete guide<\/span><span style=\"font-weight: 400;\"> \u00b7 <\/span><span style=\"font-weight: 400;\">LWC vs Aura vs Visualforce<\/span><span style=\"font-weight: 400;\"> \u00b7 <\/span><span style=\"font-weight: 400;\">Lightning Experience<\/span><\/p>\n<h3><b>Flow<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">The declarative automation engine, and now the primary one, workflow Rules and Process Builder are both retired. Before-save Flows for same-record updates, after-save for related records, fault paths on every element that can fail.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u2192 <\/span><span style=\"font-weight: 400;\">Salesforce Flow guide<\/span><span style=\"font-weight: 400;\"> \u00b7 <\/span><span style=\"font-weight: 400;\">Flow Orchestration<\/span><\/p>\n<h3><b>Visualforce<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Not deprecated, despite what you\u2019ll read. It remains the only native way to render PDFs via <\/span><span style=\"font-weight: 400;\">renderAs=&#8221;pdf&#8221;<\/span><span style=\"font-weight: 400;\">, which is why quote, invoice, and contract requirements still land on it in 2026.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u2192 <\/span><span style=\"font-weight: 400;\">What is Visualforce<\/span><\/p>\n<h2><b>What Tools Do Salesforce Developers Use?<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">The modern toolchain is VS Code plus the Salesforce CLI, with the Developer Console reserved for quick debugging rather than real work.<\/span><\/p>\n<p style=\"text-align: center;\">\n<table id=\"tablepress-237\" class=\"tablepress tablepress-id-237\">\n<thead>\n<tr class=\"row-1\">\n\t<th class=\"column-1\">Tool<\/th><th class=\"column-2\">Purpose<\/th><th class=\"column-3\">When to skip it<\/th>\n<\/tr>\n<\/thead>\n<tbody class=\"row-striping row-hover\">\n<tr class=\"row-2\">\n\t<td class=\"column-1\">VS Code + Salesforce Extensions<\/td><td class=\"column-2\">Primary IDE for authoring, deploying, and debugging<\/td><td class=\"column-3\">Never<\/td>\n<\/tr>\n<tr class=\"row-3\">\n\t<td class=\"column-1\">Salesforce CLI (sf)<\/td><td class=\"column-2\">Scripting, CI\/CD, org management, data loads<\/td><td class=\"column-3\">Never on team projects<\/td>\n<\/tr>\n<tr class=\"row-4\">\n\t<td class=\"column-1\">Developer Console<\/td><td class=\"column-2\">Anonymous Apex, log inspection<\/td><td class=\"column-3\">Anything you\u2019d commit<\/td>\n<\/tr>\n<tr class=\"row-5\">\n\t<td class=\"column-1\">Code Builder<\/td><td class=\"column-2\">Browser-based VS Code, zero local setup<\/td><td class=\"column-3\">If local setup works<\/td>\n<\/tr>\n<tr class=\"row-6\">\n\t<td class=\"column-1\">Scratch orgs<\/td><td class=\"column-2\">Disposable, source-tracked environments<\/td><td class=\"column-3\">Small teams on org-based dev<\/td>\n<\/tr>\n<tr class=\"row-7\">\n\t<td class=\"column-1\">PMD \/ Apex Code Analyzer<\/td><td class=\"column-2\">Static analysis in CI<\/td><td class=\"column-3\">Never with a pipeline<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<!-- #tablepress-237 from cache --><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Still deploying with change sets? That\u2019s the first thing to fix.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">See <\/span><span style=\"font-weight: 400;\">Salesforce DevOps: CI\/CD and release management<\/span><span style=\"font-weight: 400;\">, <\/span><span style=\"font-weight: 400;\">sandboxes explained,<\/span><span style=\"font-weight: 400;\"> and <\/span><span style=\"font-weight: 400;\">Code Builder<\/span><span style=\"font-weight: 400;\">.<\/span><\/p>\n<h2><b>How Should You Design the Data Model?<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">Design the data model before anything else; every automation, report, and integration you build afterwards inherits its mistakes. Relationship errors are the most expensive category on the platform because fixing them requires migrating live data.<\/span><\/p>\n<p><b>Master-detail or lookup?<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Master-detail gives cascading delete, roll-up summaries, and inherited sharing, at the cost of a hard dependency. Lookup keeps records independent. Converting later means data migration.<\/span><\/p>\n<ul>\n<li><b><\/b> <b>Junction Objects:<\/b><span style=\"font-weight: 400;\"> Model many-to-many with two master-detail relationships. Standard pattern; no clever alternatives needed.<\/span><\/li>\n<li><b><\/b> <b>Watch for Skew:<\/b><span style=\"font-weight: 400;\"> One account owning millions of child records, or one user owning millions of records, degrades performance through record locking during bulk operations. Invisible in a sandbox, painful in production.<\/span><\/li>\n<li><b><\/b> <b>Fewer Objects Beats More: <\/b><span style=\"font-weight: 400;\">Every custom object fragments reporting and adds maintenance. Model the business, not the org chart.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">\u2192 <\/span><span style=\"font-weight: 400;\">The Salesforce data model explained<\/span><\/p>\n<h2><b>What Are Governor Limits and How Do You Design Around Them?<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">Governor limits are per-transaction resource caps that keep the multi-tenant platform stable. For a synchronous transaction: <\/span><b>100 SOQL queries, 150 DML statements, 10,000 records per DML operation, 6MB heap, 10 seconds CPU time.<\/b><span style=\"font-weight: 400;\"> Asynchronous contexts get roughly double on most.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Nearly every limit exception traces to one of three mistakes:<\/span><\/p>\n<ol>\n<li><b> A Query Inside a Loop:<\/b><span style=\"font-weight: 400;\"> 200 records, 200 queries, blown at 100.<\/span><\/li>\n<li><b> DML Inside a Loop:<\/b><span style=\"font-weight: 400;\"> Same pattern, lower ceiling.<\/span><\/li>\n<li><b> Logic Assuming One Record:<\/b> <span style=\"font-weight: 400;\">Trigger.new[0]<\/span><span style=\"font-weight: 400;\"> is a bug waiting for a data load.<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400;\">The fix is always the same shape: collect into a <\/span><span style=\"font-weight: 400;\">Map<\/span><span style=\"font-weight: 400;\"> or <\/span><span style=\"font-weight: 400;\">Set<\/span><span style=\"font-weight: 400;\">, query once outside the loop, operate on collections, write once.<\/span><\/p>\n<p style=\"text-align: center;\">\n<table id=\"tablepress-238\" class=\"tablepress tablepress-id-238\">\n<thead>\n<tr class=\"row-1\">\n\t<th class=\"column-1\">Limit<\/th><th class=\"column-2\">Value<\/th>\n<\/tr>\n<\/thead>\n<tbody class=\"row-striping row-hover\">\n<tr class=\"row-2\">\n\t<td class=\"column-1\">SOQL queries<\/td><td class=\"column-2\">100<\/td>\n<\/tr>\n<tr class=\"row-3\">\n\t<td class=\"column-1\">DML statements<\/td><td class=\"column-2\">150<\/td>\n<\/tr>\n<tr class=\"row-4\">\n\t<td class=\"column-1\">Records per DML operation<\/td><td class=\"column-2\">10,000<\/td>\n<\/tr>\n<tr class=\"row-5\">\n\t<td class=\"column-1\">Heap size<\/td><td class=\"column-2\">6 MB<\/td>\n<\/tr>\n<tr class=\"row-6\">\n\t<td class=\"column-1\">CPU time<\/td><td class=\"column-2\">10 seconds<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<!-- #tablepress-238 from cache --><\/p>\n<p><em><span style=\"font-weight: 400;\">Source: Salesforce Developer Documentation Apex Governor Limits, 2026. Asynchronous contexts get roughly double on most of these.<\/span><\/em><\/p>\n<p><span style=\"font-weight: 400;\">\u2192 <\/span><span style=\"font-weight: 400;\">Governor limits: full reference and workarounds<\/span><\/p>\n<h2><b>How Do You Test and Deploy Salesforce Code?<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">Salesforce requires <\/span><b>75% Apex code coverage<\/b><span style=\"font-weight: 400;\"> to deploy to production, a compliance floor, not a quality target. Coverage measures which lines executed, not whether your assertions proved anything. A test that runs your code and asserts nothing passes the gate and catches no bugs.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"> <img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-19733 size-full\" src=\"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-4-2026-11_56_08-PM.webp\" alt=\"How do you test and deploy salesforce code?\" width=\"1024\" height=\"1536\" srcset=\"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-4-2026-11_56_08-PM.webp 1024w, https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-4-2026-11_56_08-PM-683x1024.webp 683w, https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-4-2026-11_56_08-PM-768x1152.webp 768w, https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-4-2026-11_56_08-PM-640x960.webp 640w, https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-4-2026-11_56_08-PM-400x600.webp 400w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/span><\/p>\n<p><span style=\"font-weight: 400;\">What actually protects you:<\/span><\/p>\n<ul>\n<li><span style=\"font-weight: 400;\">Bulk tests with 200+ records, because that\u2019s what production sends<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Negative tests for validation failures and permission denials<\/span><\/li>\n<li><span style=\"font-weight: 400;\">A test data factory so setup stays consistent<\/span><\/li>\n<li><span style=\"font-weight: 400;\">@testSetup<\/span><span style=\"font-weight: 400;\"> to create shared data once per class<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Callout mocks so integration tests don\u2019t depend on someone else\u2019s uptime<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Deployment should move through source control and a pipeline: scratch org or dev sandbox \u2192 integration \u2192 UAT \u2192 production, with automated validation and a rollback plan.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u2192 <\/span><span style=\"font-weight: 400;\">Salesforce DevOps and CI\/CD<\/span><span style=\"font-weight: 400;\"> \u00b7 <\/span><span style=\"font-weight: 400;\">Agile delivery for Salesforce<\/span><\/p>\n<h2><b>Salesforce Development Best Practices<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">Best practices reward discipline in specific, expensive ways. The gap between a well-built org and a poorly built one usually doesn\u2019t show for eighteen months; then it shows all at once, during a data migration or a peak trading period.<\/span><\/p>\n<p style=\"text-align: center;\">\n<table id=\"tablepress-239\" class=\"tablepress tablepress-id-239\">\n<thead>\n<tr class=\"row-1\">\n\t<th class=\"column-1\">Discipline<\/th><th class=\"column-2\">The rule that matters most<\/th>\n<\/tr>\n<\/thead>\n<tbody class=\"row-striping row-hover\">\n<tr class=\"row-2\">\n\t<td class=\"column-1\">Bulkification<\/td><td class=\"column-2\">Assume 200 records. Always.<\/td>\n<\/tr>\n<tr class=\"row-3\">\n\t<td class=\"column-1\">Trigger design<\/td><td class=\"column-2\">One trigger per object, delegating to a handler<\/td>\n<\/tr>\n<tr class=\"row-4\">\n\t<td class=\"column-1\">Logic placement<\/td><td class=\"column-2\">Service classes, not triggers or controllers<\/td>\n<\/tr>\n<tr class=\"row-5\">\n\t<td class=\"column-1\">Queries<\/td><td class=\"column-2\">Selective filters on indexed fields, outside loops<\/td>\n<\/tr>\n<tr class=\"row-6\">\n\t<td class=\"column-1\">Security<\/td><td class=\"column-2\">with sharing by default; enforce CRUD\/FLS explicitly<\/td>\n<\/tr>\n<tr class=\"row-7\">\n\t<td class=\"column-1\">Secrets<\/td><td class=\"column-2\">Named Credentials or protected Custom Metadata, never hardcoded<\/td>\n<\/tr>\n<tr class=\"row-8\">\n\t<td class=\"column-1\">Error handling<\/td><td class=\"column-2\">Catch specific types, log context, never swallow silently<\/td>\n<\/tr>\n<tr class=\"row-9\">\n\t<td class=\"column-1\">Naming<\/td><td class=\"column-2\">Type_Object_Purpose for Flows; PascalCase nouns for classes<\/td>\n<\/tr>\n<tr class=\"row-10\">\n\t<td class=\"column-1\">Automation<\/td><td class=\"column-2\">One Flow per object per context, so order stays predictable<\/td>\n<\/tr>\n<tr class=\"row-11\">\n\t<td class=\"column-1\">Documentation<\/td><td class=\"column-2\">Comment why, not what<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<!-- #tablepress-239 from cache --><\/p>\n<p>&nbsp;<\/p>\n<p><b>From our delivery work:<\/b><span style=\"font-weight: 400;\"> the fastest diagnostic on an unfamiliar org is counting triggers per object. More than one on any object and you\u2019re almost certainly looking at unpredictable execution order, recursive updates, and a team that has quietly stopped trusting its own automation.<\/span><\/p>\n<h2><b>The 15 Mistakes That Cost the Most<\/b><\/h2>\n<ol>\n<li><span style=\"font-weight: 400;\"> SOQL or DML inside a loop<\/span><\/li>\n<li><span style=\"font-weight: 400;\"> Logic that assumes a single record<\/span><\/li>\n<li><span style=\"font-weight: 400;\"> Recursive triggers with no guard<\/span><\/li>\n<li><span style=\"font-weight: 400;\"> Hardcoded IDs that break across orgs<\/span><\/li>\n<li><span style=\"font-weight: 400;\"> Without sharing<\/span><span style=\"font-weight: 400;\"> as a default rather than a documented exception<\/span><\/li>\n<li><span style=\"font-weight: 400;\"> Missing CRUD\/FLS checks in custom controllers<\/span><\/li>\n<li><span style=\"font-weight: 400;\"> God classes nobody can test<\/span><\/li>\n<li><span style=\"font-weight: 400;\"> Multiple triggers on one object<\/span><\/li>\n<li><span style=\"font-weight: 400;\"> Overlapping Flow and Apex on the same event<\/span><\/li>\n<li><span style=\"font-weight: 400;\"> Testing only the happy path<\/span><\/li>\n<li><span style=\"font-weight: 400;\"> Chasing 75% coverage instead of meaningful assertions<\/span><\/li>\n<li><span style=\"font-weight: 400;\"> No error handling on integrations failures disappear silently<\/span><\/li>\n<li><span style=\"font-weight: 400;\"> Designing against sandbox data volumes<\/span><\/li>\n<li><span style=\"font-weight: 400;\"> No source control<\/span><\/li>\n<li><span style=\"font-weight: 400;\"> Generic naming (<\/span><span style=\"font-weight: 400;\">Flow1<\/span><span style=\"font-weight: 400;\">, <\/span><span style=\"font-weight: 400;\">TempClass<\/span><span style=\"font-weight: 400;\">) nobody can search<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400;\">\u00a0<\/span><\/p>\n<div style=\"margin: 40px 0; padding: 34px 38px; background: linear-gradient(135deg,#0F5FB8 0%,#184A8C 100%); border-radius: 18px; font-family: -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Arial,sans-serif; color: #fff; box-shadow: 0 12px 30px rgba(15,95,184,.18);\">\n<div style=\"display: inline-block; padding: 8px 16px; background: rgba(255,255,255,.12); border-radius: 999px; font-size: 12px; font-weight: 600; letter-spacing: .3px;\">SALESFORCE HEALTH CHECK<\/div>\n<h2 style=\"margin: 22px 0 16px; font-size: 30px; line-height: 1.25; font-weight: bold; color: #ffffff; max-width: 700px;\">Recognise your org in that list?<\/h2>\n<p style=\"margin: 0 0 28px; font-size: 17px; line-height: 1.75; color: rgba(255,255,255,.92); max-width: 720px;\">Most Salesforce orgs we inherit have <strong>five or more of these issues.<\/strong> We cleaned up <strong>Freshworks&#8217; legacy Salesforce architecture<\/strong> and rebuilt it using <strong>Lightning Web Components (LWC)<\/strong> without disrupting production. We can do the same for your organization.<\/p>\n<p><a style=\"display: inline-flex; align-items: center; justify-content: center; padding: 15px 30px; background: linear-gradient(135deg,#21B8FF,#0B74F1); border-radius: 12px; color: #ffffff; text-decoration: none; font-size: 16px; font-weight: bold; line-height: 1; white-space: nowrap; box-shadow: 0 8px 20px rgba(0,0,0,.18);\" href=\"https:\/\/dianapps.com\/contact\" target=\"_blank\" rel=\"noopener noreferrer\"><br \/>\nGet a Technical Health Check\u00a0\u2192<br \/>\n<\/a><\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<h2><b>How Is AI Changing Salesforce Development?<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">AI now handles the boilerplate, not the judgement. A developer can describe a requirement in natural language and get a working Apex class or LWC as a starting point, then review, test, and correct it. What AI doesn\u2019t do is design governor-limit-safe architecture, decide whether something needs code at all, or define the boundaries of an agent.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The credential market has shifted with it; Salesforce introduced the <\/span><b>Agentforce Specialist certification in 2025<\/b><span style=\"font-weight: 400;\">, and by early 2026 it had become one of the most in-demand credentials in developer job descriptions alongside Platform Developer II<\/span><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Practically, this means the skill that\u2019s appreciating is architectural judgement, which is exactly what the 27% rise in Technical Architect demand reflects.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u2192 <\/span><span style=\"font-weight: 400;\">What is Agentforce<\/span><span style=\"font-weight: 400;\"> \u00b7 <\/span><span style=\"font-weight: 400;\">Building custom agents with Agent Builder<\/span><\/p>\n<h2><b>What Skills and Certifications Do You Need?<\/b><\/h2>\n<p><b>Technical:<\/b><span style=\"font-weight: 400;\"> Apex \u00b7 SOQL and SOSL \u00b7 Lightning Web Components and the Lightning Design System \u00b7 Flow \u00b7 REST and SOAP APIs \u00b7 data modelling \u00b7 debugging via debug logs \u00b7 Git and CI\/CD<\/span><\/p>\n<p><b>Non-Technical:<\/b><span style=\"font-weight: 400;\"> Requirements gathering, communication with non-technical stakeholders, and knowing when to say a requirement doesn\u2019t need code.<\/span><\/p>\n<p><b>The certification path:<\/b><\/p>\n<p style=\"text-align: center;\">\n<table id=\"tablepress-240\" class=\"tablepress tablepress-id-240\">\n<thead>\n<tr class=\"row-1\">\n\t<th class=\"column-1\">Certification<\/th><th class=\"column-2\">What it signals<\/th>\n<\/tr>\n<\/thead>\n<tbody class=\"row-striping row-hover\">\n<tr class=\"row-2\">\n\t<td class=\"column-1\">Platform Developer I (PD1)<\/td><td class=\"column-2\">Foundational Apex, LWC, data model<\/td>\n<\/tr>\n<tr class=\"row-3\">\n\t<td class=\"column-1\">Platform Developer II (PD2)<\/td><td class=\"column-2\">Advanced Apex, async, performance, testing<\/td>\n<\/tr>\n<tr class=\"row-4\">\n\t<td class=\"column-1\">Agentforce Specialist<\/td><td class=\"column-2\">Agent topic and action design, prompt templates, guardrails, now among the most requested<\/td>\n<\/tr>\n<tr class=\"row-5\">\n\t<td class=\"column-1\">Platform App Builder<\/td><td class=\"column-2\">Declarative build capability<\/td>\n<\/tr>\n<tr class=\"row-6\">\n\t<td class=\"column-1\">Application \/ System Architect<\/td><td class=\"column-2\">Design across a full org<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<!-- #tablepress-240 from cache --><\/p>\n<p><span style=\"font-weight: 400;\">\u2192 <\/span><span style=\"font-weight: 400;\">40 Salesforce developer interview questions<\/span><\/p>\n<h2><b>Salary and Career Path<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">The average US Salesforce developer salary is <\/span><b>$95,814<\/b><span style=\"font-weight: 400;\">, ranging from $72,000 to $141,000 depending on experience, location, and specialisation (<\/span><a href=\"https:\/\/www.payscale.com\/research\/US\/Job=Salesforce_Developer\/Salary\"><span style=\"font-weight: 400;\">PayScale<\/span><\/a><span style=\"font-weight: 400;\">, 2026). Developers holding Agentforce Specialist alongside PD2 are commanding a premium in the current market.<\/span><\/p>\n<p><b>Table 2: US Salesforce Developer Salary (2026)<\/b><\/p>\n\n<table id=\"tablepress-241\" class=\"tablepress tablepress-id-241\">\n<thead>\n<tr class=\"row-1\">\n\t<th class=\"column-1\">Percentile<\/th><th class=\"column-2\">Salary<\/th>\n<\/tr>\n<\/thead>\n<tbody class=\"row-striping row-hover\">\n<tr class=\"row-2\">\n\t<td class=\"column-1\">10th percentile<\/td><td class=\"column-2\">$72,000<\/td>\n<\/tr>\n<tr class=\"row-3\">\n\t<td class=\"column-1\">Median<\/td><td class=\"column-2\">$95,814<\/td>\n<\/tr>\n<tr class=\"row-4\">\n\t<td class=\"column-1\">90th percentile<\/td><td class=\"column-2\">$141,000<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<!-- #tablepress-241 from cache -->\n<p><em><span style=\"font-weight: 400;\">Source: PayScale, Salesforce Developer salary data, 2026.<\/span><\/em><\/p>\n<p><b>The path:<\/b><span style=\"font-weight: 400;\"> Admin fundamentals \u2192 PD1 \u2192 junior developer \u2192 PD2 and async Apex \u2192 senior developer \u2192 architect. Skipping the admin stage is the most common mistake; it produces developers who write code for problems configuration already solved.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The talent market is globally distributed; India supplies 42% of certified developer talent and North America 30% (<\/span><a href=\"https:\/\/www.syncgtm.com\/blog\/how-many-sales-force-developers-are-there\"><span style=\"font-weight: 400;\">SyncGTM<\/span><\/a><span style=\"font-weight: 400;\">, 2026).<\/span><\/p>\n<h2><b>The Learning Path<\/b><\/h2>\n<ul>\n<li><b><\/b> <b>Beginner:<\/b><span style=\"font-weight: 400;\"> Declarative tools, standard object model, SOQL basics, and a conceptual grasp of governor limits <\/span><i><span style=\"font-weight: 400;\">before<\/span><\/i><span style=\"font-weight: 400;\"> writing Apex.<\/span><\/li>\n<li><b><\/b> <b>Intermediate:<\/b><span style=\"font-weight: 400;\"> Trigger frameworks, asynchronous Apex, LWC fundamentals, unit testing patterns, REST callouts with Named Credentials.<\/span><\/li>\n<li><b><\/b> <b>Advanced:<\/b><span style=\"font-weight: 400;\"> Service and selector architecture, Platform Events, performance tuning at volume, security design.<\/span><\/li>\n<li><b><\/b> <b>Architect:<\/b><span style=\"font-weight: 400;\"> Multi-cloud solution design, org strategy, governance, mentoring.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Is it hard? Six to twelve months to productivity if you already know an object-oriented language. Governance limits and the sharing model are what trip up experienced developers from other platforms; the syntax is the easy part.<\/span><\/p>\n<h2><b>Should You Build In-House or Work With a Partner?<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">It depends on whether your Salesforce work is continuous or project-shaped. Senior talent is genuinely scarce; architect demand grew 27% in 2025 against 4% supply growth, which makes hiring at the top of the market slow.<\/span><\/p>\n<ul>\n<li><b><\/b> <b>In-house: <\/b><span style=\"font-weight: 400;\">Works with a steady backlog and domain knowledge that takes months to acquire. A half-utilised senior developer is an expensive way to buy availability.<\/span><\/li>\n<li><b><\/b> <b>A Partner: <\/b><span style=\"font-weight: 400;\">Works when the work is project-shaped, you need several skill sets at once, or you need capacity now rather than after a four-month hiring cycle.<\/span><\/li>\n<li><b><\/b> <b>Hybrid: <\/b><span style=\"font-weight: 400;\">In-house architect owning design and standards, partner delivering build is where most mid-market organisations land.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">\u2192 <\/span><span style=\"font-weight: 400;\">Salesforce development cost<\/span><span style=\"font-weight: 400;\"> \u00b7 <\/span><span style=\"font-weight: 400;\">Hiring a Salesforce developer<\/span><span style=\"font-weight: 400;\"> \u00b7 <\/span><span style=\"font-weight: 400;\">In-house vs outsourced<\/span><\/p>\n<div style=\"margin: 40px 0; padding: 34px 38px; background: linear-gradient(135deg,#0F5FB8 0%,#184A8C 100%); border-radius: 18px; font-family: -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Arial,sans-serif; color: #fff; box-shadow: 0 12px 30px rgba(15,95,184,.18);\">\n<div style=\"display: inline-block; padding: 8px 16px; background: rgba(255,255,255,.12); border-radius: 999px; font-size: 12px; font-weight: 600; letter-spacing: .3px;\">LET&#8217;S TALK SALESFORCE<\/div>\n<h2 style=\"margin: 22px 0 16px; font-size: 30px; line-height: 1.25; font-weight: bold; color: #ffffff; max-width: 700px;\">Rather discuss scope than read another guide?<\/h2>\n<p style=\"margin: 0 0 28px; font-size: 17px; line-height: 1.75; color: rgba(255,255,255,.92); max-width: 720px;\">We rebuilt <strong>Freshworks&#8217; Salesforce app using Lightning Web Components (LWC)<\/strong> and helped <strong>Sinch launch its communication platform on the Salesforce AppExchange.<\/strong> If you&#8217;re unsure whether your project needs custom development or simply better platform administration, we&#8217;ll give you an honest recommendation.<\/p>\n<p><a style=\"display: inline-flex; align-items: center; justify-content: center; padding: 15px 30px; background: linear-gradient(135deg,#21B8FF,#0B74F1); border-radius: 12px; color: #ffffff; text-decoration: none; font-size: 16px; font-weight: bold; line-height: 1; white-space: nowrap; box-shadow: 0 8px 20px rgba(0,0,0,.18);\" href=\"https:\/\/dianapps.com\/contact\" target=\"_blank\" rel=\"noopener noreferrer\"><br \/>\nStart a Conversation\u00a0\u2192<br \/>\n<\/a><\/p>\n<\/div>\n<h2><b>Go Deeper: The Full Development Cluster<\/b><\/h2>\n<p><b>Foundations:<\/b> <span style=\"font-weight: 400;\">Lightning Platform<\/span><span style=\"font-weight: 400;\"> \u00b7 <\/span><span style=\"font-weight: 400;\">Lightning Experience<\/span><span style=\"font-weight: 400;\"> \u00b7 <\/span><span style=\"font-weight: 400;\">admin vs developer vs architect<\/span><span style=\"font-weight: 400;\"> \u00b7 <\/span><span style=\"font-weight: 400;\">Salesforce Functions retirement<\/span><\/p>\n<p><b>Code:<\/b> <span style=\"font-weight: 400;\">Apex<\/span><span style=\"font-weight: 400;\"> \u00b7 <\/span><span style=\"font-weight: 400;\">SOQL &amp; SOSL<\/span><span style=\"font-weight: 400;\"> \u00b7 <\/span><span style=\"font-weight: 400;\">governor limits<\/span><\/p>\n<p><b>UI:<\/b> <span style=\"font-weight: 400;\">Lightning Web Components<\/span><span style=\"font-weight: 400;\"> \u00b7 <\/span><span style=\"font-weight: 400;\">LWC vs Aura vs Visualforce<\/span><span style=\"font-weight: 400;\"> \u00b7 <\/span><span style=\"font-weight: 400;\">Visualforce<\/span><\/p>\n<p><b>Automation:<\/b> <span style=\"font-weight: 400;\">Flow<\/span><span style=\"font-weight: 400;\"> \u00b7 <\/span><span style=\"font-weight: 400;\">Flow vs Apex<\/span><span style=\"font-weight: 400;\"> \u00b7 <\/span><span style=\"font-weight: 400;\">low-code<\/span><span style=\"font-weight: 400;\"> \u00b7 <\/span><span style=\"font-weight: 400;\">Flow Orchestration<\/span><\/p>\n<p><b>DevOps:<\/b> <span style=\"font-weight: 400;\">CI\/CD<\/span><span style=\"font-weight: 400;\"> \u00b7 <\/span><span style=\"font-weight: 400;\">sandboxes<\/span><span style=\"font-weight: 400;\"> \u00b7 <\/span><span style=\"font-weight: 400;\">agile delivery<\/span><span style=\"font-weight: 400;\"> \u00b7 <\/span><span style=\"font-weight: 400;\">Code Builder<\/span><\/p>\n<p><b>Beyond the platform:<\/b> <span style=\"font-weight: 400;\">Heroku for Salesforce<\/span><\/p>\n<p><b>Career:<\/b> <span style=\"font-weight: 400;\">I<\/span><span style=\"font-weight: 400;\">nterview questions<\/span><\/p>\n<style>.elementor-19712 .elementor-element.elementor-element-2932a52{text-align:left;}.elementor-19712 .elementor-element.elementor-element-2932a52 > .elementor-widget-container{margin:0px 0px 0px 0px;}.elementor-19712 .elementor-element.elementor-element-0b767d1 .elementor-tab-title{border-width:1px;border-color:#00000014;}.elementor-19712 .elementor-element.elementor-element-0b767d1 .elementor-tab-content{border-width:1px;border-bottom-color:#00000014;}.elementor-19712 .elementor-element.elementor-element-0b767d1 > .elementor-widget-container{margin:0px 0px 0px 0px;}<\/style><div class=\"porto-block elementor elementor-19712\">\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-27707ca elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"27707ca\" data-element_type=\"section\">\r\n\t\t\t\r\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\r\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-0163611\" data-id=\"0163611\" data-element_type=\"column\">\r\n\r\n\t\t\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-03a2969 elementor-widget elementor-widget-text-editor\" data-id=\"03a2969\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.14.0 - 26-06-2023 *\/\n.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#69727d;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#69727d;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}<\/style>\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2932a52 elementor-widget elementor-widget-heading\" data-id=\"2932a52\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.14.0 - 26-06-2023 *\/\n.elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title[class*=elementor-size-]>a{color:inherit;font-size:inherit;line-height:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px}<\/style><h2 class=\"elementor-heading-title elementor-size-large\">FAQs <\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0b767d1 elementor-widget elementor-widget-toggle\" data-id=\"0b767d1\" data-element_type=\"widget\" data-widget_type=\"toggle.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.14.0 - 26-06-2023 *\/\n.elementor-toggle{text-align:left}.elementor-toggle .elementor-tab-title{font-weight:700;line-height:1;margin:0;padding:15px;border-bottom:1px solid #d5d8dc;cursor:pointer;outline:none}.elementor-toggle .elementor-tab-title .elementor-toggle-icon{display:inline-block;width:1em}.elementor-toggle .elementor-tab-title .elementor-toggle-icon svg{-webkit-margin-start:-5px;margin-inline-start:-5px;width:1em;height:1em}.elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-right{float:right;text-align:right}.elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-left{float:left;text-align:left}.elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-closed{display:block}.elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-opened{display:none}.elementor-toggle .elementor-tab-title.elementor-active{border-bottom:none}.elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-closed{display:none}.elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-opened{display:block}.elementor-toggle .elementor-tab-content{padding:15px;border-bottom:1px solid #d5d8dc;display:none}@media (max-width:767px){.elementor-toggle .elementor-tab-title{padding:12px}.elementor-toggle .elementor-tab-content{padding:12px 10px}}.e-con-inner>.elementor-widget-toggle,.e-con>.elementor-widget-toggle{width:var(--container-widget-width);--flex-grow:var(--container-widget-flex-grow)}<\/style>\t\t<div class=\"elementor-toggle\">\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<h3 id=\"elementor-tab-title-1201\" class=\"elementor-tab-title\" data-tab=\"1\" role=\"button\" aria-controls=\"elementor-tab-content-1201\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-right\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">What language is used in Salesforce development?<\/a>\n\t\t\t\t\t<\/h3>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-1201\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"1\" role=\"region\" aria-labelledby=\"elementor-tab-title-1201\"><p><span style=\"font-weight: 400;\">Apex handles server-side logic, a strongly typed, Java-like language running inside governor limits. Front-end work uses standard JavaScript, HTML, and CSS through Lightning Web Components. Much of what teams build needs no code at all, since Flow handles most record-triggered automation declaratively.<\/span><\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<h3 id=\"elementor-tab-title-1202\" class=\"elementor-tab-title\" data-tab=\"2\" role=\"button\" aria-controls=\"elementor-tab-content-1202\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-right\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">Is Salesforce development hard to learn?<\/a>\n\t\t\t\t\t<\/h3>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-1202\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"2\" role=\"region\" aria-labelledby=\"elementor-tab-title-1202\"><p><span style=\"font-weight: 400;\">Six to twelve months to productivity if you already know an object-oriented language, longer without. The syntax is straightforward; governor limits and the sharing model are what trip up experienced developers arriving from other platforms.<\/span><\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<h3 id=\"elementor-tab-title-1203\" class=\"elementor-tab-title\" data-tab=\"3\" role=\"button\" aria-controls=\"elementor-tab-content-1203\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-right\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">Do I need to code to work in Salesforce?<\/a>\n\t\t\t\t\t<\/h3>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-1203\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"3\" role=\"region\" aria-labelledby=\"elementor-tab-title-1203\"><p><span style=\"font-weight: 400;\">No, developers make up roughly 44% of the certified talent supply (<\/span><span style=\"font-weight: 400;\">SyncGTM<\/span><span style=\"font-weight: 400;\">, 2026), meaning most certified professionals are admins, consultants, and architects who rarely write Apex.<\/span><\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<h3 id=\"elementor-tab-title-1204\" class=\"elementor-tab-title\" data-tab=\"4\" role=\"button\" aria-controls=\"elementor-tab-content-1204\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-right\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">How much do Salesforce developers earn?<\/a>\n\t\t\t\t\t<\/h3>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-1204\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"4\" role=\"region\" aria-labelledby=\"elementor-tab-title-1204\"><p><span style=\"font-weight: 400;\">The US average is $95,814, ranging from $72,000 to $141,000 (<\/span><span style=\"font-weight: 400;\">PayScale<\/span><span style=\"font-weight: 400;\">, 2026). Holding Agentforce Specialist alongside Platform Developer II currently commands a premium.<\/span><\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<h3 id=\"elementor-tab-title-1205\" class=\"elementor-tab-title\" data-tab=\"5\" role=\"button\" aria-controls=\"elementor-tab-content-1205\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-right\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">Is Visualforce still used in 2026?<\/a>\n\t\t\t\t\t<\/h3>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-1205\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"5\" role=\"region\" aria-labelledby=\"elementor-tab-title-1205\"><p><span style=\"font-weight: 400;\">Yes, it isn\u2019t deprecated and isn\u2019t on any retirement list. <\/span><span style=\"font-weight: 400;\">renderAs=&#8221;pdf&#8221;<\/span><span style=\"font-weight: 400;\"> remains the only native way to generate PDFs in Salesforce, which LWC still can\u2019t do. See <\/span><span style=\"font-weight: 400;\">our Visualforce guide<\/span><span style=\"font-weight: 400;\">.<\/span><\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<h3 id=\"elementor-tab-title-1206\" class=\"elementor-tab-title\" data-tab=\"6\" role=\"button\" aria-controls=\"elementor-tab-content-1206\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-right\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">Why does Salesforce require 75% test coverage?<\/a>\n\t\t\t\t\t<\/h3>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-1206\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"6\" role=\"region\" aria-labelledby=\"elementor-tab-title-1206\"><p><span style=\"font-weight: 400;\">Because your code runs on shared infrastructure and Salesforce needs assurance it won\u2019t destabilise the platform during upgrades. The threshold is a deployment gate, not a quality measure; coverage records which lines ran, not whether your tests proved anything.<\/span><\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<h3 id=\"elementor-tab-title-1207\" class=\"elementor-tab-title\" data-tab=\"7\" role=\"button\" aria-controls=\"elementor-tab-content-1207\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-right\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">What\u2019s the difference between Salesforce development and customisation?<\/a>\n\t\t\t\t\t<\/h3>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-1207\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"7\" role=\"region\" aria-labelledby=\"elementor-tab-title-1207\"><p><span style=\"font-weight: 400;\">Customisation builds new behaviour with declarative tools, Flows, custom objects, App Builder pages. Development means writing code: Apex, LWC, integrations, packaged apps. Both change the org; only one carries test coverage requirements and deployment risk. More in <\/span><span style=\"font-weight: 400;\">configuration vs customisation<\/span><span style=\"font-weight: 400;\">.<\/span><\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t<script type=\"application\/ld+json\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"What language is used in Salesforce development?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"<p><span style=\\\"font-weight: 400;\\\">Apex handles server-side logic, a strongly typed, Java-like language running inside governor limits. Front-end work uses standard JavaScript, HTML, and CSS through Lightning Web Components. Much of what teams build needs no code at all, since Flow handles most record-triggered automation declaratively.<\\\/span><\\\/p>\"}},{\"@type\":\"Question\",\"name\":\"Is Salesforce development hard to learn?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"<p><span style=\\\"font-weight: 400;\\\">Six to twelve months to productivity if you already know an object-oriented language, longer without. The syntax is straightforward; governor limits and the sharing model are what trip up experienced developers arriving from other platforms.<\\\/span><\\\/p>\"}},{\"@type\":\"Question\",\"name\":\"Do I need to code to work in Salesforce?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"<p><span style=\\\"font-weight: 400;\\\">No, developers make up roughly 44% of the certified talent supply (<\\\/span><span style=\\\"font-weight: 400;\\\">SyncGTM<\\\/span><span style=\\\"font-weight: 400;\\\">, 2026), meaning most certified professionals are admins, consultants, and architects who rarely write Apex.<\\\/span><\\\/p>\"}},{\"@type\":\"Question\",\"name\":\"How much do Salesforce developers earn?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"<p><span style=\\\"font-weight: 400;\\\">The US average is $95,814, ranging from $72,000 to $141,000 (<\\\/span><span style=\\\"font-weight: 400;\\\">PayScale<\\\/span><span style=\\\"font-weight: 400;\\\">, 2026). Holding Agentforce Specialist alongside Platform Developer II currently commands a premium.<\\\/span><\\\/p>\"}},{\"@type\":\"Question\",\"name\":\"Is Visualforce still used in 2026?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"<p><span style=\\\"font-weight: 400;\\\">Yes, it isn\\u2019t deprecated and isn\\u2019t on any retirement list. <\\\/span><span style=\\\"font-weight: 400;\\\">renderAs=&#8221;pdf&#8221;<\\\/span><span style=\\\"font-weight: 400;\\\"> remains the only native way to generate PDFs in Salesforce, which LWC still can\\u2019t do. See <\\\/span><span style=\\\"font-weight: 400;\\\">our Visualforce guide<\\\/span><span style=\\\"font-weight: 400;\\\">.<\\\/span><\\\/p>\"}},{\"@type\":\"Question\",\"name\":\"Why does Salesforce require 75% test coverage?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"<p><span style=\\\"font-weight: 400;\\\">Because your code runs on shared infrastructure and Salesforce needs assurance it won\\u2019t destabilise the platform during upgrades. The threshold is a deployment gate, not a quality measure; coverage records which lines ran, not whether your tests proved anything.<\\\/span><\\\/p>\"}},{\"@type\":\"Question\",\"name\":\"What\\u2019s the difference between Salesforce development and customisation?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"<p><span style=\\\"font-weight: 400;\\\">Customisation builds new behaviour with declarative tools, Flows, custom objects, App Builder pages. Development means writing code: Apex, LWC, integrations, packaged apps. Both change the org; only one carries test coverage requirements and deployment risk. More in <\\\/span><span style=\\\"font-weight: 400;\\\">configuration vs customisation<\\\/span><span style=\\\"font-weight: 400;\\\">.<\\\/span><\\\/p>\"}}]}<\/script>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/section>\r\n\t\t<\/div>\n<p>&nbsp;<\/p>\n<h2><b>Where to Start<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">If you\u2019re deciding whether you need custom development at all, begin with <\/span><span style=\"font-weight: 400;\">configuration versus customisation; <\/span><span style=\"font-weight: 400;\">a good portion of what gets scoped as development turns out to be configuration.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If your org already feels fragile, <\/span><span style=\"font-weight: 400;\">Salesforce DevOps<\/span><span style=\"font-weight: 400;\"> is usually the highest-leverage fix.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If you\u2019re learning, start with Apex fundamentals and governor limits together; understanding the constraint before the syntax is what separates developers who scale from developers who firefight.<\/span><\/p>\n<div style=\"margin: 40px 0; padding: 34px 38px; background: linear-gradient(135deg,#0F5FB8 0%,#184A8C 100%); border-radius: 18px; font-family: -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Arial,sans-serif; color: #fff; box-shadow: 0 12px 30px rgba(15,95,184,.18);\">\n<div style=\"display: inline-block; padding: 8px 16px; background: rgba(255,255,255,.12); border-radius: 999px; font-size: 12px; font-weight: 600; letter-spacing: .3px;\">FEATURED CASE STUDY<\/div>\n<h2 style=\"margin: 22px 0 16px; font-size: 30px; line-height: 1.25; font-weight: bold; color: #ffffff; max-width: 700px;\">Looking for more details on how we work?<\/h2>\n<p style=\"margin: 0 0 28px; font-size: 17px; line-height: 1.75; color: rgba(255,255,255,.92); max-width: 720px;\">Discover how we rebuilt <strong>Freshworks&#8217; Freshdesk\u2013Salesforce integration using Lightning Web Components (LWC)<\/strong>, modernized the legacy architecture, and delivered a scalable solution without disrupting production.<\/p>\n<p><a style=\"display: inline-flex; align-items: center; justify-content: center; padding: 15px 30px; background: linear-gradient(135deg,#21B8FF,#0B74F1); border-radius: 12px; color: #ffffff; text-decoration: none; font-size: 16px; font-weight: bold; line-height: 1; white-space: nowrap; box-shadow: 0 8px 20px rgba(0,0,0,.18);\" href=\"https:\/\/dianapps.com\/freshworks\" target=\"_blank\" rel=\"noopener noreferrer\"><br \/>\nView Freshworks Case Study\u00a0\u2192<br \/>\n<\/a><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Most Salesforce projects don\u2019t fail because someone wrote bad code; they fail because someone wrote code that shouldn\u2019t have existed. A trigger where a Flow would have done, a custom screen where a page layout was fine, an integration built point-to-point that now breaks every release. Salesforce development is less about knowing Apex syntax than [&hellip;]<\/p>\n","protected":false},"author":15,"featured_media":19729,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_yoast_wpseo_meta-robots-noindex":"","_yoast_wpseo_meta-robots-nofollow":"","_yoast_wpseo_canonical":"","_yoast_wpseo_opengraph-title":"","_yoast_wpseo_opengraph-description":"","_yoast_wpseo_opengraph-image":"","_yoast_wpseo_twitter-title":"","_yoast_wpseo_twitter-description":"","_yoast_wpseo_twitter-image":"","_wp_applaud_exclude":false,"footnotes":""},"categories":[85],"tags":[2550,2549,2551,470,2552],"class_list":["post-19709","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-salesforce","tag-apex","tag-learn-salesforce-development","tag-lwc","tag-salesforce-development","tag-salessforce-flow"],"featured_image_src":{"landsacpe":["https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/Untitled-design-65-1140x445.webp",1140,445,true],"list":["https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/Untitled-design-65-463x348.webp",463,348,true],"medium":["https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/Untitled-design-65-300x169.webp",300,169,true],"full":["https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/Untitled-design-65.webp",1536,864,false]},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Salesforce Development Guide: Apex, LWC, Flow and More<\/title>\n<meta name=\"description\" content=\"Learn Salesforce development with Apex, LWC, Flow, architecture, bestpractices, DevOps, AI and career insights in one guide.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/dianapps.com\/blog\/salesforce-development-guide\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Salesforce Development Guide: Apex, LWC, Flow and More\" \/>\n<meta property=\"og:description\" content=\"Learn Salesforce development with Apex, LWC, Flow, architecture, bestpractices, DevOps, AI and career insights in one guide.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/dianapps.com\/blog\/salesforce-development-guide\/\" \/>\n<meta property=\"og:site_name\" content=\"Learn About Digital Transformation &amp; Development | DianApps Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-04T18:27:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-05T05:52:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/Untitled-design-65.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"864\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Vaibhav Sharma\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Vaibhav Sharma\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Salesforce Development Guide: Apex, LWC, Flow and More","description":"Learn Salesforce development with Apex, LWC, Flow, architecture, bestpractices, DevOps, AI and career insights in one guide.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/dianapps.com\/blog\/salesforce-development-guide\/","og_locale":"en_US","og_type":"article","og_title":"Salesforce Development Guide: Apex, LWC, Flow and More","og_description":"Learn Salesforce development with Apex, LWC, Flow, architecture, bestpractices, DevOps, AI and career insights in one guide.","og_url":"https:\/\/dianapps.com\/blog\/salesforce-development-guide\/","og_site_name":"Learn About Digital Transformation &amp; Development | DianApps Blog","article_published_time":"2026-08-04T18:27:55+00:00","article_modified_time":"2026-08-05T05:52:51+00:00","og_image":[{"width":1536,"height":864,"url":"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/Untitled-design-65.webp","type":"image\/webp"}],"author":"Vaibhav Sharma","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Vaibhav Sharma","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/dianapps.com\/blog\/salesforce-development-guide\/#article","isPartOf":{"@id":"https:\/\/dianapps.com\/blog\/salesforce-development-guide\/"},"author":{"name":"Vaibhav Sharma","@id":"https:\/\/dianapps.com\/blog\/#\/schema\/person\/e0ee1e2a6cfb8681a3cc69154f8d8bcf"},"headline":"Salesforce Development: The Complete Guide to Apex, LWC, Flow and Best Practices","datePublished":"2026-08-04T18:27:55+00:00","dateModified":"2026-08-05T05:52:51+00:00","mainEntityOfPage":{"@id":"https:\/\/dianapps.com\/blog\/salesforce-development-guide\/"},"wordCount":2487,"commentCount":0,"image":{"@id":"https:\/\/dianapps.com\/blog\/salesforce-development-guide\/#primaryimage"},"thumbnailUrl":"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/Untitled-design-65.webp","keywords":["apex","learn salesforce development","LWC","Salesforce Development","Salessforce flow"],"articleSection":["Salesforce"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/dianapps.com\/blog\/salesforce-development-guide\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/dianapps.com\/blog\/salesforce-development-guide\/","url":"https:\/\/dianapps.com\/blog\/salesforce-development-guide\/","name":"Salesforce Development Guide: Apex, LWC, Flow and More","isPartOf":{"@id":"https:\/\/dianapps.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/dianapps.com\/blog\/salesforce-development-guide\/#primaryimage"},"image":{"@id":"https:\/\/dianapps.com\/blog\/salesforce-development-guide\/#primaryimage"},"thumbnailUrl":"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/Untitled-design-65.webp","datePublished":"2026-08-04T18:27:55+00:00","dateModified":"2026-08-05T05:52:51+00:00","author":{"@id":"https:\/\/dianapps.com\/blog\/#\/schema\/person\/e0ee1e2a6cfb8681a3cc69154f8d8bcf"},"description":"Learn Salesforce development with Apex, LWC, Flow, architecture, bestpractices, DevOps, AI and career insights in one guide.","breadcrumb":{"@id":"https:\/\/dianapps.com\/blog\/salesforce-development-guide\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/dianapps.com\/blog\/salesforce-development-guide\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/dianapps.com\/blog\/salesforce-development-guide\/#primaryimage","url":"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/Untitled-design-65.webp","contentUrl":"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/08\/Untitled-design-65.webp","width":1536,"height":864,"caption":"Salesforce Development Guide"},{"@type":"BreadcrumbList","@id":"https:\/\/dianapps.com\/blog\/salesforce-development-guide\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/dianapps.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Salesforce Development: The Complete Guide to Apex, LWC, Flow and Best Practices"}]},{"@type":"WebSite","@id":"https:\/\/dianapps.com\/blog\/#website","url":"https:\/\/dianapps.com\/blog\/","name":"Learn About Digital Transformation &amp; Development | DianApps Blog","description":"Dianapps","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/dianapps.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/dianapps.com\/blog\/#\/schema\/person\/e0ee1e2a6cfb8681a3cc69154f8d8bcf","name":"Vaibhav Sharma","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/07\/cropped-Vaibhav-Sharma-Salesforce-Specialist-96x96.jpg","url":"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/07\/cropped-Vaibhav-Sharma-Salesforce-Specialist-96x96.jpg","contentUrl":"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2026\/07\/cropped-Vaibhav-Sharma-Salesforce-Specialist-96x96.jpg","caption":"Vaibhav Sharma"},"description":"A Salesforce specialist with over 15 years in the field, Vaibhav Sharma has built his career at the intersection of CRM strategy and enterprise transformation. As the driving force behind Salesforce innovation at DianApps, he architects solutions across Sales Cloud, Service Cloud, and Experience Cloud that turn fragmented customer data into unified growth engines. His work spans a 360-degree perspective in BFSI, healthcare, and retail, where he's known for engineering platforms that don't just go live, they move revenue and retention numbers. Vaibhav's edge lies in reading where Salesforce is headed next, from AI-powered automation, AgentExchange to Agentforce, and translating that foresight into roadmaps enterprise leaders can act on today.","url":"https:\/\/dianapps.com\/blog\/author\/vaibhav-sharma\/"}]}},"_links":{"self":[{"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/posts\/19709","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/comments?post=19709"}],"version-history":[{"count":16,"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/posts\/19709\/revisions"}],"predecessor-version":[{"id":19746,"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/posts\/19709\/revisions\/19746"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/media\/19729"}],"wp:attachment":[{"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/media?parent=19709"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/categories?post=19709"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/tags?post=19709"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}