41554 blogs · [ { "id": "01a0878a-ab02-73c8-a403-40a7fe8699d5", "title": "Expanding On The Step Processor", "url": "https://www.jamessimone.net/blog/joys-of-apex/expanding-on-the-step-processor/", "published_at": "2026-02-27T00:00:00+00:00" }, { "id": "01a0878a-ab03-7148-a6f4-7045d71b8578", "title": "Record Cell Datatables in LWC", "url": "https://www.jamessimone.net/blog/joys-of-apex/record-cell-datatables-in-lwc/", "published_at": "2025-09-28T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c61135533a70", "title": "Data Cloud SQL", "url": "https://www.jamessimone.net/blog/joys-of-apex/data-cloud-sql/", "published_at": "2025-07-25T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c61135561b81", "title": "Reduce, Reuse, Refactor: Interfaces & Object Inheritance", "url": "https://www.jamessimone.net/blog/joys-of-apex/interfaces-and-object-inheritance/", "published_at": "2025-03-15T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c6113642134c", "title": "Reduce, Reuse, Refactor: Object Variables", "url": "https://www.jamessimone.net/blog/joys-of-apex/object-variables/", "published_at": "2025-03-15T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c611364f72a2", "title": "Reduce, Reuse, Refactor: What Is An Object?", "url": "https://www.jamessimone.net/blog/joys-of-apex/what-is-an-object/", "published_at": "2025-03-15T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c61136766ecd", "title": "Reduce, Reuse, Refactor: On The Relationship Between Automation & Code", "url": "https://www.jamessimone.net/blog/joys-of-apex/on-the-relationship-between-automation-and-code/", "published_at": "2025-03-15T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c61137675c26", "title": "Implementing OAuth Browser Flows Properly", "url": "https://www.jamessimone.net/blog/joys-of-apex/implementing-oauth-browser-flows-properly/", "published_at": "2025-02-08T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c611379b31b4", "title": "Four Years In Open Source", "url": "https://www.jamessimone.net/blog/joys-of-apex/four-years-in-open-source/", "published_at": "2024-12-12T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c61137f855a5", "title": "You Need To Use Queueable Finalizers", "url": "https://www.jamessimone.net/blog/joys-of-apex/you-need-to-use-queueable-finalizers/", "published_at": "2024-10-22T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c61137ff5dd0", "title": "Dynamic LWC Creation: Part Two", "url": "https://www.jamessimone.net/blog/joys-of-apex/dynamic-lwc-creation-part-2/", "published_at": "2024-08-09T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c61138405ee3", "title": "Using AI In Apex", "url": "https://www.jamessimone.net/blog/joys-of-apex/using-ai-in-apex/", "published_at": "2024-06-28T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c61138b59765", "title": "Refactoring By Tidying", "url": "https://www.jamessimone.net/blog/joys-of-apex/refactoring-by-tidying/", "published_at": "2024-05-03T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c61139713b9e", "title": "Authoring SF CLI Plugins", "url": "https://www.jamessimone.net/blog/joys-of-apex/authoring-sf-cli-plugins/", "published_at": "2024-03-17T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c61139b675f8", "title": "Benchmarking Matters", "url": "https://www.jamessimone.net/blog/joys-of-apex/benchmarking-matters/", "published_at": "2024-01-04T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c6113a04d348", "title": "Three Years In Open Source", "url": "https://www.jamessimone.net/blog/joys-of-apex/three-years-in-open-source/", "published_at": "2023-12-04T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c6113a0c8065", "title": "Exploring the Slack SDK", "url": "https://www.jamessimone.net/blog/joys-of-apex/exploring-the-slack-sdk/", "published_at": "2023-10-17T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c6113a5defd3", "title": "Building Better Software Teams", "url": "https://www.jamessimone.net/blog/joys-of-apex/building-better-teams/", "published_at": "2023-08-18T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c6113ad3b288", "title": "Custom Metadata Decoupling", "url": "https://www.jamessimone.net/blog/joys-of-apex/custom-metadata-decoupling/", "published_at": "2023-07-31T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c6113b37a13a", "title": "Responsible LLM Usage", "url": "https://www.jamessimone.net/blog/joys-of-apex/responsible-llm-usage/", "published_at": "2023-06-23T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c6113b827572", "title": "Bulk Lead Conversion", "url": "https://www.jamessimone.net/blog/joys-of-apex/bulk-lead-conversion/", "published_at": "2023-05-05T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c6113be77ee3", "title": "The Road To Tech Debt Is Paved With Good Intentions", "url": "https://www.jamessimone.net/blog/joys-of-apex/the-road-to-tech-debt-is-paved-with-good-intentions/", "published_at": "2023-04-10T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c6113c5a05ec", "title": "Iteratively Building a Flexible Caching System for Apex", "url": "https://www.jamessimone.net/blog/joys-of-apex/iteratively-building-a-flexible-caching-system/", "published_at": "2023-02-16T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c6113c8fd6d5", "title": "A Tale Of Two Scope Creeps", "url": "https://www.jamessimone.net/blog/joys-of-apex/a-tale-of-two-scope-creeps/", "published_at": "2023-01-20T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c6113d447897", "title": "TypeScript & SFDX", "url": "https://www.jamessimone.net/blog/joys-of-apex/typescript-and-sfdx/", "published_at": "2023-01-18T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c6113dacdf28", "title": "Dynamic LWC Creation", "url": "https://www.jamessimone.net/blog/joys-of-apex/dynamic-lwc-creation/", "published_at": "2022-12-28T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c6113e0e6bd6", "title": "Two Years In Open Source", "url": "https://www.jamessimone.net/blog/joys-of-apex/two-years-in-open-source/", "published_at": "2022-12-14T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c6113e7e86a2", "title": "Advanced LWC Jest Testing", "url": "https://www.jamessimone.net/blog/joys-of-apex/advanced-lwc-jest-testing/", "published_at": "2022-11-16T00:00:00+00:00" }, { "id": "01a0878a-ab04-72ed-ba30-c6113e7ebd74", "title": "Expanding On the Factory Pattern", "url": "https://www.jamessimone.net/blog/joys-of-apex/expanding-on-the-factory-pattern/", "published_at": "2022-09-06T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b93edbfd55", "title": "CICD With Kai Tribble", "url": "https://www.jamessimone.net/blog/joys-of-apex/cicd-with-kai-tribble/", "published_at": "2022-09-01T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b93f5e38df", "title": "Building An Apex Portfolio", "url": "https://www.jamessimone.net/blog/joys-of-apex/building-an-apex-portfolio/", "published_at": "2022-08-06T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b93fe49ea6", "title": "Uplevel Your Engineering Skills", "url": "https://www.jamessimone.net/blog/joys-of-apex/uplevel-your-engineering-skills/", "published_at": "2022-06-17T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b940b3d986", "title": "Abstract Classes & Interfaces", "url": "https://www.jamessimone.net/blog/joys-of-apex/abstract-classes-and-interfaces/", "published_at": "2022-05-30T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b940df5e7d", "title": "The Life & Death Of Software", "url": "https://www.jamessimone.net/blog/joys-of-apex/the-life-and-death-of-software/", "published_at": "2022-04-04T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b9414a61a9", "title": "Mocking Apex History Records", "url": "https://www.jamessimone.net/blog/joys-of-apex/mocking-apex-history-records/", "published_at": "2022-03-03T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b941da61a3", "title": "Open Sourcing The Round Robin Assigner", "url": "https://www.jamessimone.net/blog/joys-of-apex/open-sourcing-round-robin/", "published_at": "2022-03-01T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b941e433a3", "title": "Strongly Typed Parent & Child-level Queries", "url": "https://www.jamessimone.net/blog/joys-of-apex/strongly-typed-parent-and-child-queries/", "published_at": "2022-02-21T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b942c2fe3d", "title": "Mob Programming & Deep Work", "url": "https://www.jamessimone.net/blog/joys-of-apex/mob-programming-and-deep-work/", "published_at": "2022-02-15T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b943b81dee", "title": "A Year In Open Source", "url": "https://www.jamessimone.net/blog/joys-of-apex/a-year-in-open-source/", "published_at": "2021-12-19T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b9440b39bf", "title": "Creating A Round Robin Assignment", "url": "https://www.jamessimone.net/blog/joys-of-apex/creating-a-round-robin-assignment/", "published_at": "2021-12-09T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b944985009", "title": "What's New With Nebula Logger", "url": "https://www.jamessimone.net/blog/joys-of-apex/whats-new-with-nebula-logger/", "published_at": "2021-11-10T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b944bc3379", "title": "You Need A Strongly Typed Query Builder", "url": "https://www.jamessimone.net/blog/joys-of-apex/you-need-a-strongly-typed-query-builder/", "published_at": "2021-10-15T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b9452a1849", "title": "Platform Events With Async Apex", "url": "https://www.jamessimone.net/blog/joys-of-apex/platform-events-with-async-apex/", "published_at": "2021-07-12T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b946099aec", "title": "Replace Conditional With Polymorphism", "url": "https://www.jamessimone.net/blog/joys-of-apex/replace-conditional-with-polymorphism/", "published_at": "2021-06-06T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b94673ebdb", "title": "Organizing Invocable And Static Code", "url": "https://www.jamessimone.net/blog/joys-of-apex/organizing-invocable-and-static-code/", "published_at": "2021-05-23T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b94705d94b", "title": "One Small Change", "url": "https://www.jamessimone.net/blog/joys-of-apex/one-small-change/", "published_at": "2021-04-26T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b94797d8e4", "title": "Advanced Logging Using Nebula Logger", "url": "https://www.jamessimone.net/blog/joys-of-apex/advanced-logging-using-nebula-logger/", "published_at": "2021-03-08T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b9481bbeb2", "title": "The Tao Of Apex", "url": "https://www.jamessimone.net/blog/joys-of-apex/the-tao-of-apex/", "published_at": "2021-02-27T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b948e51b31", "title": "Naming Matters In Apex", "url": "https://www.jamessimone.net/blog/joys-of-apex/naming-matters-in-apex/", "published_at": "2021-01-31T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b948e81133", "title": "Replacing DLRS With Custom Rollup", "url": "https://www.jamessimone.net/blog/joys-of-apex/replacing-dlrs-with-custom-rollup/", "published_at": "2020-12-31T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b948efb311", "title": "Random Shuffle For Lists & The Importance Of Revisiting Old Code", "url": "https://www.jamessimone.net/blog/joys-of-apex/random-shuffle-for-lists-and-the-importance-of-revisiting-old-code/", "published_at": "2020-11-23T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b949a53415", "title": "Formula Date Issues", "url": "https://www.jamessimone.net/blog/joys-of-apex/formula-date-issues/", "published_at": "2020-10-26T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b949a72e37", "title": "Testing Custom Permissions", "url": "https://www.jamessimone.net/blog/joys-of-apex/testing-custom-permissions/", "published_at": "2020-10-10T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b949ce6bcb", "title": "The XY Problem In Programming", "url": "https://www.jamessimone.net/blog/joys-of-apex/the-xy-problem-in-programming/", "published_at": "2020-09-06T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b94a4bfc91", "title": "setTimeout & Implementing Delays In Apex", "url": "https://www.jamessimone.net/blog/joys-of-apex/set-timeout-and-implementing-delays/", "published_at": "2020-08-12T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b94adcf0e3", "title": "Refactoring Tips & Tricks", "url": "https://www.jamessimone.net/blog/joys-of-apex/refactoring-tips-and-tricks/", "published_at": "2020-07-29T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b94ba511ac", "title": "LWC Custom Path", "url": "https://www.jamessimone.net/blog/joys-of-apex/lwc-custom-path/", "published_at": "2020-06-22T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b94c05fd19", "title": "LWC Modal Cleanup and Testing", "url": "https://www.jamessimone.net/blog/joys-of-apex/lwc-modal-cleanup-and-testing/", "published_at": "2020-06-15T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b94c661410", "title": "Lightning Web Component Composable Modal", "url": "https://www.jamessimone.net/blog/joys-of-apex/lwc-composable-modal/", "published_at": "2020-06-12T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b94d2a865c", "title": "Lightning Web Component Composable Pagination", "url": "https://www.jamessimone.net/blog/joys-of-apex/lwc-composable-pagination/", "published_at": "2020-06-03T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b94d5770c6", "title": "Lazy Iterators", "url": "https://www.jamessimone.net/blog/joys-of-apex/lazy-iterators/", "published_at": "2020-05-20T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b94dc18ab7", "title": "Test Driven Development Example", "url": "https://www.jamessimone.net/blog/joys-of-apex/test-driven-development-example/", "published_at": "2020-05-03T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b94e993d91", "title": "Continuous Integration With SFDX", "url": "https://www.jamessimone.net/blog/joys-of-apex/continuous-integration-with-sfdx/", "published_at": "2020-04-29T00:00:00+00:00" }, { "id": "01a0878a-ab05-73af-837b-13b94f2ca816", "title": "Building A Better Singleton", "url": "https://www.jamessimone.net/blog/joys-of-apex/building-a-better-singleton/", "published_at": "2020-04-25T00:00:00+00:00" }, { "id": "01a0878a-ab06-7123-a4f3-6e419f4fcd84", "title": "Picklist Validation", "url": "https://www.jamessimone.net/blog/joys-of-apex/picklist-validation/", "published_at": "2020-04-14T00:00:00+00:00" }, { "id": "01a0878a-ab06-7123-a4f3-6e419f7eeba1", "title": "Batchable & Queueable Apex", "url": "https://www.jamessimone.net/blog/joys-of-apex/batchable-and-queueable-apex/", "published_at": "2020-03-27T00:00:00+00:00" }, { "id": "01a0878a-ab06-7123-a4f3-6e41a00a8443", "title": "Sorting And Performance In Apex", "url": "https://www.jamessimone.net/blog/joys-of-apex/sorting-and-performance-in-apex/", "published_at": "2020-03-22T00:00:00+00:00" }, { "id": "01a0878a-ab06-7123-a4f3-6e41a01378ab", "title": "Object-Oriented Basics", "url": "https://www.jamessimone.net/blog/joys-of-apex/apex-object-oriented-basics/", "published_at": "2020-03-18T00:00:00+00:00" }, { "id": "01a0878a-ab06-7123-a4f3-6e41a0df2933", "title": "React Versus Lightning Web Components", "url": "https://www.jamessimone.net/blog/joys-of-apex/react-versus-lightning-web-components/", "published_at": "2020-03-17T00:00:00+00:00" }, { "id": "01a0878a-ab06-7123-a4f3-6e41a1d444a9", "title": "Extendable (Dynamic) APIs", "url": "https://www.jamessimone.net/blog/joys-of-apex/extendable-apis/", "published_at": "2020-03-10T00:00:00+00:00" }, { "id": "01a0878a-ab06-7123-a4f3-6e41a2170575", "title": "Enum Apex Class Gotchas", "url": "https://www.jamessimone.net/blog/joys-of-apex/enum-apex-class-gotchas/", "published_at": "2020-03-05T00:00:00+00:00" }, { "id": "01a0878a-ab06-7123-a4f3-6e41a2dc1db2", "title": "Writing Performant Tests", "url": "https://www.jamessimone.net/blog/joys-of-apex/writing-performant-apex-tests/", "published_at": "2020-03-02T00:00:00+00:00" }, { "id": "01a0878a-ab06-7123-a4f3-6e41a38eaf12", "title": "Lightweight Trigger Handler", "url": "https://www.jamessimone.net/blog/joys-of-apex/lightweight-trigger-handler/", "published_at": "2020-02-29T00:00:00+00:00" }, { "id": "01a0878a-ab06-7123-a4f3-6e41a3e94a80", "title": "Idiomatic Apex", "url": "https://www.jamessimone.net/blog/joys-of-apex/idiomatic-salesforce-apex/", "published_at": "2020-02-10T00:00:00+00:00" }, { "id": "01a0878a-ab06-7123-a4f3-6e41a4203fa4", "title": "Future Methods, Callouts & Callbacks", "url": "https://www.jamessimone.net/blog/joys-of-apex/future-method-callout-callback/", "published_at": "2020-01-24T00:00:00+00:00" }, { "id": "01a0878a-ab06-7123-a4f3-6e41a473328e", "title": "The Repository Pattern", "url": "https://www.jamessimone.net/blog/joys-of-apex/repository-pattern/", "published_at": "2020-01-11T00:00:00+00:00" }, { "id": "01a0878a-ab06-7123-a4f3-6e41a4dc05e3", "title": "Building An Apex Logging Service", "url": "https://www.jamessimone.net/blog/joys-of-apex/apex-logging-service/", "published_at": "2020-01-02T00:00:00+00:00" }, { "id": "01a0878a-ab06-7123-a4f3-6e41a5b379dd", "title": "Dependency Injection & The Factory Pattern", "url": "https://www.jamessimone.net/blog/joys-of-apex/dependency-injection-factory-pattern/", "published_at": "2019-12-31T00:00:00+00:00" }, { "id": "01a0878a-ab06-7123-a4f3-6e41a615b847", "title": "Mocking DML", "url": "https://www.jamessimone.net/blog/joys-of-apex/mocking-dml/", "published_at": "2019-12-28T00:00:00+00:00" }, { "id": "01a0878a-ab06-7123-a4f3-6e41a62007fb", "title": "Introduction & Testing Philosophy", "url": "https://www.jamessimone.net/blog/joys-of-apex/intro/", "published_at": "2019-12-27T00:00:00+00:00" } ] posts Claim your blog
Back to jamessimone.net
Blog · corpus.blog/blogs/jamessimone.net/posts

jamessimone.net

jamessimone.net

2026

2025

2024

2023

2022

2021

2020

2019