A blessing and a curse of Salesforce is that you can solve most problems more than one way. How to track members of your organization’s board (and other committees or groups) is no different. People have all sorts of opinions. I’m going to lay out what I tend to do and suggest, but let’s be clear: this is only one option!
Overview
I’m going to leverage the Nonprofit Success Pack’s existing method for associating individuals (contacts) to organizations (accounts), which is called Affiliations. Unlike in the standard Salesforce business-to-business data model, where a contact is placed directly onto the account of the company they work for, in the NPSP contacts are directly on their household account, with one or more affiliation records to indicate connections to companies and organizations. (Usually the Primary Affiliation would be where someone works, but this is not a hard and fast rule.)
A Board Account
The first thing we do is create an account record for the board of our organization. (Of course, the board is not actually an organization in its own right, but we’re choosing to use an account record because it’s useful.)
Affiliations to the Board Account
Now that we have an account for the board of directors, we can make affiliations to connect people to the board. The reason I like to use NPSP’s affiliations functionality is that you immediately have a Start Date and End Date, a Role (for President, Treasurer, Board Member, etc), and the concept of Current vs. Former. That’s pretty much everything you’re going to need!
If you’re familiar with using the Primary Affiliation field to track where someone works, let me note that most of the time for board members this record is going to be a “secondary” affiliation. We’ll still capture where they work in the primary affiliation, but we can add their association to the board as another affiliation at the same time.
Beautiful Flags 🏳️🌈
Let’s have some fun now! When you’re on a contact page for a board member, you want to know right away that this is an important constituent, right? So let’s put a nice little flag on the record page to remind us. Something like this:
Making this flag appear takes just three steps:
1. First we make two fields on contact that are not going to be on the page layout, one for Current Board Affiliations, and one for Former Board Affiliations. These are going to be rollup summary fields that simply count the number of affiliations to the board of directors account that are Status = "Current" (or "Former.") (* See footnote at the bottom of this post.)
2. Then we make a formula field that determines Board Member Status based on those two rollup fields. It’s a pretty simple formula that returns text:
IF( Board_Current__c > 0, "Current Board Member",
IF(Board_Former__c > 0 && Board_Current__c = 0, "Former Board Member",
IF(Board_Former__c = 0 && Board_Current__c = 0, "",
"")))
Basically, if there is a current affiliation to the board it returns “Current Board Member.” If there is no current but there is a former affiliation to the board, it returns “Former Board Member.” And it defaults to blank.
I usually leave this field off of contact page layouts because we’re going to show the pretty flag instead. But the field is available in reporting on the contact object, so it can be useful for people to see the field directly in that kind of context.
3. Edit the contact Lightning record page. Add two components that are conditionally displayed based on the value in the Board Member Status field–one each for Current and Former.
The Flag Itself
You have a choice: You could simply use a Rich Text component to make your board member flag. This is the simplest option because it uses a standard page component that’s available right out of the box. Throw in some emoji to make it visual and it certainly does the job.
But if you want your banner to look a little more like it belongs alongside the other parts of the page, I recommend installing the Lightning Messaging Utility from Salesforce Labs. This is a free page component that uses the Salesforce Lightning Design System, just like the other parts of the page layout. Personally, I think it looks more polished than the rich text version.
Et voila! If you give someone an affiliation to the board, the flag appears, make them former and a different flag shows up, remove all board service and there’s no flag at all.
Why I like the Affiliation Method
Using this method you’ll have a complete record of historical board service. If someone changes roles on the board (like being elected treasurer), you can make a new affiliation indicating when the new role started. You can even preemptively use the End Date field to indicate when a board or position term will end. (Though putting in that end don’t won’t automatically change the status to Former, so you’ll still need to keep your data clean.)
There is one minor downside to this method: It’s not that easy to quickly see who was on the board at any given moment in time (other than Now). You have the complete data, based on start and end dates, but you have to compare each affiliation record to understand which members would have been on the board at the moment you’re interested in.
Why not a campaign?
Instead of the affiliations-based method, some organizations create a campaign for the board and give campaign memberships to that campaign. This has its benefits, but you don’t have the same easy way to see start date, end date, and role. (Plus to track status you have to have the right Campaign Member Status options.) Some organizations create a campaign for each year, which helps with the history.
Personally, I think the affiliation method is easier than the campaign method.
But using the affiliation method it is probably also helpful to create a campaign each year for the board members. Setting up that campaign takes just a moment. (Run a report of current board members and then use the Add to Campaign button.)
Once you have that campaign, you can use it for communication purposes (sending list emails). And if you create the campaigns each year, you'll have solved the minor downside of quickly seeing "who was on the board in FY20."
Things Not To Do
Should we address probably the most common way organizations track board members–having a checkbox on Contact? DON’T DO IT! It’s simple, of course, but the downsides are almost too numerous to list. Let's start with this: If the box isn't checked, does that mean they aren't on the board or does it mean nobody remembered to check it...?
Next in line is a picklist for "Board Status." If someone regularly keeps this up to date, that's a start. But it's really no easier than the Affiliations method (or the Campaigns method) and the picklist has no way to capture start and end date, etc.
* Footnote:
If you make your fields using a standard Salesforce rollup summary field you will have to hard code the account Id of the record that is your board of directors account as one of your filters. This will work, but if you make a sandbox that Id won't exist and, therefore, your rollups will always be at zero.
I prefer to make my rollups for this using the Declarative Lookup Rollup Summary tool, also known as DLRS. (I'll be writing more about DLRS in future blog posts.) The benefit to making these fields with a DLRS rollup is that you can put the actual Account Name as part of your rollup filter. Then if you spin up a sandbox and put an account for your board in that sandbox (with the same name as the account in production), your rollups and the resulting flags will immediately work.