We added a rich tech field on every Volunteer Job to hold a statement of what impact it has had.
Note that we are using our Volunteer Jobs for several different purposes: traditional volunteerism, in-kind donations, volunteer training, public speaking attendance, and attendance at our client programs and events. For example, we have a job for virtual volunteerism. (Before the pandemic we had jobs with shifts filled with hundreds of drop-in helpers and much more.) Another example is a job for donations of food. Many organizations would probably use a record type of Opportunity for this but we need to capture both hours spent and out-of-pocket costs or value of in-kind goods received. So we use VH instead. We’ve written about this before on mightyforce.org (“The Humble Volunteer Hour”). We have a job for a client who comes to our drop-by for assistance. And we have jobs for those who attend specific weekly groups such as the Women’s Group. Some organizations would include this as a PMM object. However, we’ve been doing this since the second year we adopted Salesforce, long before PMM came along. Lol.
These jobs are each attached to campaigns. We have a Volunteer Campaign, In-kind Campaign, and Client campaign for each of our main client efforts (drop-by, help line, groups, and outreach). We have identified cohorts or seasons or years by changing the campaign and duplicating the jobs. When we mark a job as no longer ongoing and active, we put a time period in the name so we can tell more about it.
These jobs provide an opportunity to look at recent impact. We added a rich text field to hold the description of impact.
We also allow linking a volunteer facing job to a client facing job for future work. This is just a link to the related job. For example, a volunteer job like in-kind donation of food most impacts our drop-by client job.
We wrote a flow that works on one volunteer job at a time and summarizes client impact or volunteer impact (looking at campaign names) for the last 30 days and stores it. The goal is to generate a statement of impact. It simply looks up the attached VH for the last 30 days and makes some summaries of hours and out-of-pocket impact. Here is an example for a volunteer job (identified by the word volunteer in the campaign name):
Here are some examples for client facing jobs (identified by the flow using the name client in the campaign name):
For both types, you can see the flow does some work to determine how many volunteer records there are, how many unique people were involved, and sums of hours. For in-kind donations, it sums the out-of-pocket costs.
For clients, the flow does a little more work and pulls Client Notes for the contacts involved with the “job” in the time period. So it can summarize how many clients have made life changes and how many achievements they have made. In addition, we like to track how many clients are still relatively new to us that are involved in the “job.”
The flow that does the calculation gets the job, the VH and the contacts and assigns counts for the record counts:
Then it does a loop for all the VH found. Note that the time period of 30 days means we dot’t expect to exceed loop counts but that’s a possibility and not handled at the moment. TECH DEBT! Note that the hours a client is present and the hours a volunteer worked are stored in different fields on the VH object, so we have to add them each to the running sum.
The flow checks the job type. If it’s a client job, it loops throughout the contacts to count how many are new, as determined by a formula field that compares their served hours so far to 40.
This gets all the goals that are achievements in the period of interest, whether they are by the attendees or not, and uses a list processing sub-flow from unOfficialSF to count the number of goals which do match the contact list. This helps with any loop limits since it’s contained in APEX.
And finally, it takes all the statistics from the computer and saves it using a Text Template as the output.
For the volunteer job side of the process, it’s much simpler. The only thing that branch does is save the numbers to a text template:
Finally the flow ends by checking if it is to save the results or if we were only calculating it to return to a calling flow.
Note that we do have a couple of spurious flow that were created while making all this. They call this flow in one form or another. Probably these are TECH DEBT and should be deleted. SYM Job Impact Prompt either does one job or asks you which jobs you want to do. And SYM Job Impact Save just calls the function and saves the result.
We scheduled a Mass Action Schedule to create a SOQL driven update of the active ongoing jobs that are not staff. It runs every Sunday morning. This flow pulls a lot of records so we set the batch size to 1 because of the high amount of looping in the flow. We don’t want to bump into batch governor limits. There are about 100 ongoing jobs.
The results have been made available to our internal team using a Quip document that uses a live List View. We did this so team members without Salesforce experience could easily see them. We take screen shots to share with our publication team since at the moment they can’t seem to see them even though we’ve shared the Quip document.
With a little copy editing they turn into interesting paragraphs for our donors and supporters. We intend to include the job impact information in volunteer thank you/receipts/acknowledgements soon. There is a little bit of work required to make sure the new field is available for the merge template. We intend to make use of these impact statements in our customized calls to action that are calculated weekly for all our contacts. If they donated in-kind food, we want to thank them for their specific contribution, show how much is going on with that in the last month, and show them the impact of the most related job. We have also asked donors to begin identifying their favorite program and when they do so we plan to include that in their custom call to action as well. Here’s a snapshot from a recent donor update: