I decided to open source my Salesforce round robin assigner because I know how difficult it is to get the edge cases right when building something like this, and I wanted to create an easier way to hook into round robin-style assignments for both Flow and Apex developers. I'll walk a little bit through the changes I made prior to packaging up this functionality, and hopefully leave you with another great free tool.| www.jamessimone.net
At the end of 2020, I decided to take 2 weeks off of work at the end of the year. I was very fortunate to be able to do so, and I found myself in the position of wanting to give back. I'd had to replace DLRS within the org for the consulting company I was working for several months previously, and the idea of creating a more performant rollup engine was an alluring way to do so. The simple `RollupCalculator` class I'd made seemed just a _few_ lines away from a much simpler implementation than...| www.jamessimone.net
You've heard about the joys of using platform events from Jonathan in Advanced Logging Using Nebula Logger - their versatility and interoperability with exception handling being a primary example of where the two features dovetail nicely together. Something interesting starts to occur when your platform events start firing other platform events, especially when those platform events originate from Apex that is already running asynchronously| www.jamessimone.net
I'd like to take you through a routine refactoring exercise to showcase the power that objects wield when used correctly. This is, in my opinion, the single most _satisfying_ refactoring, because it showcases how maintanability improves by fixing an improper abstraction instead of letting it fester. This exercise will also highlight a curious junction between Test Driven Development (TDD) and Domain Driven Design (DDD) - which is to say that if the functionality that you're working to refacto...| www.jamessimone.net
My manager and I met up the other morning for a paired programming session. We had two possible things to work on and decided to embrace Kent Beck's 'start small, or not at all,' by focusing on a seemingly innocuous task -- adding the disabled attribute to a lightning-button in one of our Lightning Web Components (LWC). Even with strict adherence to TDD, this is a task that should take only a few minutes; it's not a complicated component, and the change is extremely straightforward. Would it ...| www.jamessimone.net
Setting delays programmatically within Apex represents a unique challenge. We don't have access to the current thread instructions that are being carried out, nor do we have any kind of higher-level `delay` function. While this is frequently fine for internal usage, where the last thing you would want is for your compiled code to be slow, that's not always the case when interacting with external APIs. It's common for APIs to be 'rate-limited' - go over the number of requests you're supposed t...| www.jamessimone.net
Synchronous apex methods typically use asynchronous future methods to perform API calls, or callouts in Apex. This article covers the best way to execute performant HTTP-related code, while allowing for further processing to be done. It makes use of the Queueable interface in Apex, and shows how to implement the Queueable interface with the least amount of boilerplate.| www.jamessimone.net