I was reflecting on a week filled with deploys last night and thought there was an interesting takeaway about two different instances of scope creep - and the two _very_ different outcomes we as a team ended up with in two of our applications. It's a story where you as the reader get to decide at the end of the day what the takeway is. I'll be interested to hear if you end up with the same takeaway that I did.| www.jamessimone.net
I recently revised the original Factory pattern article, and wanted to write a follow-up after a few years' spent reflecting on its usage within Apex. In particular, I'd like to talk a little bit about the Singleton pattern, and how with a small amount of work we can enhance the existing Factory class in order to gracefully create cached instances of classes where a large amount of work goes into constructing them.| www.jamessimone.net
Following up on the Object-Oriented Basics post, this time we switch our attention to interfaces and abstract classes - when to use them, when to avoid them, and how to distinguish between them. Learn all about what makes an interface successful, how to consolidate logic in abstract classes, and more!| www.jamessimone.net
Assignment, be it for Leads, Cases, or custom objects in Salesforce, doesn't always conform to out-of-the-box offerings. I've seen a few places where OmniChannel didn't quite align with a company's business rules; where Lead Assignment Rules didn't offer the capabilities necessary to properly assign an owner. One common example of this is the so-called 'round robin' assigner, where a company's leads (or any other object) need to be assigned fairly between a number of sales reps. In this artic...| www.jamessimone.net
Picklists in Salesforce replace traditional HTML select fields on the front end. They also are driven by complex metadata types that we don't have programmatic access to in our code. I'll discuss one potential approach to strongly typing a picklist's values based on describe results and a little boilerplate.| www.jamessimone.net
Batchable and Queueable Apex are both powerful processing frameworks within Salesforce. Unlock the power of both Batchable and Queueable Apex with the easily extendable DataProcessor pattern.| www.jamessimone.net
API development in Apex is mostly bespoke, requiring the duplication of rest resources. Let's look at how we can change that using inheritance and polymorphism to power our routes. Using extendable, dynamic APIs give us a huge amount of flexibility in spinning up new HTTP routes within the /apexrest/ path, letting us write code that external teams can stress-test and experiment with faster.| www.jamessimone.net
Cover the basics of mocking DML operations through the use of a DML class that can be swapped in unit tests.| www.jamessimone.net