Managing by Metrics

One of the great promises of using CRM for nonprofit program management is the ability to manage by metrics. In theory, if we could track all efforts and all outcomes in a system, then we could uncover those predictive indicators that lead to desired outcomes. We could then make adjustments to the program operations itself to reach those desired outcomes. To a great extent, this is possible, however, it is much more complex than it sounds. One of the root causes of the complexity is the fact that we often are not looking at all of the variables and are only looking at a subset. Making decisions on a subset of variables can sometimes lead to incorrect conclusions. Since I have seen this logic trail unfold a few times, I thought I would share an abstracted example of such a situation.

Take for example, Acme Org, a human services organization that has implemented a robust CRM solution that tracks almost all aspects of it’s program operations. Below is one of the critical reports reviewed by the Executive Team each month:

Initial Management Metrics

The organization is considering the use of these metrics for determining promotions, salary adjustments, and bonuses. After initial review, the Executive team expressed concern about Jon’s performance to Jon’s manager. Jon’s manager on the other hand knew that Jon’s metrics were low because he was always thrown on to the toughest cases. Being on the toughest cases each month meant that Jon would have to spend more time with each client and would be responsible for defining new engagement processes for working through complex cases. Unlike the other client service reps Jon spent a lot of time researching and speaking to industry experts to identify best practices that could be used by Acme to help future clients. In short, Jon was expanding the organizational knowledgebase, capacity, and quality of service delivery. Unfortunately, none of this was being recognized in the monthly report. Jon’s manager decided to add a new metric into the monthly report that would help recognize Jon’s efforts. The revised report is below:

Post Review Metrics

The revised report gave the Executive Team more insight into Jon’s efforts and the demands placed on the Client Services staff.

The point of the example is to proceed with caution when using Metrics for Management level decisions. They can be a very powerful tool when well directed; however, there is usually a story behind every piece of data and it is critical that the entire story is understood before program level decisions are made.

Cross Object Formulas Have Changed the Game

If you haven’t already done so, make sure you get deep into Cross Object Formulas. They have fundamentally changed how we think and work with Salesforce.Com configurations. A Cross Object Formula is a Formula field that can traverse object relationships and pull down data into an object.

Take the following example. Let’s say you are using the Opportunities object to track Inbound Grants. Let’s say that you have a Payments object that has a Master/Detail relationship with Opportunities (Payments is the Detail).

You can setup the following Cross Object Formulas in the Payment object to reference elements from the Opportunity and Account.

Payment Made By (Account) = Opportunities__r.Account.Name
Payment For (Opp) = Opportunities__r.Name

The beauty of the Cross Object formulas is that it lifts many of the constraints we previously faced with Salesforce. We can now:
- Create more complex reports including more objects than we could in the past
- Avoid writing Apex for something as silly as replicating a parent or lookup field
- Ease data entry and report building for the end user by making data more accessible

There are some limitations to be aware of:
- Limit of 5 cross object relationships per object
- You can reference up (from detail to master) or sideways (lookup), however, for references from parent to child, you still need to use Summary Roll Ups.

If you haven’t already used these, you should definitely check them out as they can solve many common problems you may have faced in the past.

If you have any interesting use cases for cross object formulas, please post them in the comments.

CRM Sustainability

We have been engaging in a lot of interesting debates in the NPower office about what makes a CRM solution sustainable for an organization. After a typical CRM deployment project, we do our best to leave the nonprofit with enough knowledge and tools to keep them sustainable. Here is a list of a few of the things we do:

Documentation - We initially started with word docs, however, we are more recently moving towards the use of Help Tips, Recorded Screen Casts, and a Help Tab. The idea behind documentation is that it should be complex enough to educate someone on how to use the CRM; however, not so complex that the documentation cannot be maintained.

Training - This is perhaps the most important element for us. We typically provide our clients with two levels of training. We do an end user training session that lasts between 1 and 3 hours depending on the complexity of the client implementation. We also do an administrator training for the Sys Admin level users at a client site. We also encourage the Sys Admin level users at the client site to attend a formal Salesforce training class.

Community - For clients that are in cities where CRM user groups are held, we encourage them to join and attend. This allows them to learn from their peers and get new insights into what is possible with CRM. We also encourage Sys Admin level users to join the NPSF so they can learn through the engaging technical conversations of the online community.

One of the areas that continues to be a challenge for us is Custom Code. Salesforce (and other CRM tools) provide a variety of means to extend the base platform with Custom Code. In the case of Salesforce this would be Apex, VisualForce, S-Control, and API Code. We are always weary of dropping custom code into an organization that has no means of managing or modifying the code. We do our best to avoid code by using as much standard functionality as possible. When it comes to deploying custom code into an organization that is not able to support it, we work through a simple cost/benefit tradeoff. Is this Code performing a high value business function? Is there a high probability the Code will need to be changed within the next 3 years? If the code needs to be changed, can the organization afford the change? If there is HIGH value for the code, LOW probability of the code needing to be changed, and the organization will likely find the funds for a change, then this alleviates our concerns. Custom Code is not to be feared in a NPO CRM implementation; however, a plan needs to be in place to support it over its lifecycle.

Encrypted Fields in Salesforce

A colleague of mine (Lisa Glass) recently began using encrypted fields in Salesforce. It turns out they are fairly simple to use. Encrypted fields need to be requested through the “Feature Activations Team” at Salesforce. You can just open a Support Ticket and put in a request for this. As per the documentation, this feature is available to all Enterprise and Unlimited edition accounts, which means all NPO’s should be able to access this.

How it works:

  • It creates a new field type in your instance called “Text (Encrypted)”. This is fairly similar to a regular text field, except that the data is encrypted.
  • In order to see data within an encrypted field, the user’s profile must have the “View Encrypted Data” option checked off
  • Any user that does not have this permission in their profile will see a value such as “***-**-****” when they view the encrypted field. (Note: You can specify whether you want the Mask to be either a “X” or a “*”. You can also leave a portion of a field unencrypted, such as the last 4 digits of an SSN.

Limitations:

  • Max length of 175 characters. (You can’t really use this to encrypt case notes.)
  • Field value can not be Unique, External ID, or have a Default Value
  • Can not search, filter, roll-up, query, or use the field value in a Formula
  • Can not use in workflows and assignments

Overall, this is a very powerful feature and you should consider leveraging it in your instance if your are storing any sensitive data such as Social Security Number, Credit Card Number, Medical Info, etc.

There is a lot more information on best practices and usage examples within Salesforce Help.

Understanding Vertical Response and Salesforce

At ONE/Northwest we’ve been looking into Vertical Response (VR) as an emailing solution that is integrated with Salesforce.com. We’ve just completed our first implementations, and I wanted to share what we’ve learned about how VR behaves with Salesforce. I’m going to try to lay out what I know in as concise terms as possible. Some of this is already known to many of you, but it was surprisingly hard for me to get my head around. When I get something wrong please comment on this post and I’ll update as necessary!

First, VR for Salesforce.com is best thought of as an individual Salesforce user’s personal application for sending mass emails rather than a shared solution for an organization. Here’s why I say that:

  1. Each Salesforce.com user has their own VR account, and it is impossible for those accounts to share lists
  2. If one person starts a send, someone else can’t complete it
  3. If one person sends an email, they are the ones who will need to pull the stats back to Salesforce
  4. If a subscriber opts out, they are globally opted out of emails in Salesforce

Now that I’ve said that, let me say that VR accounts can share some important info:

  1. By creating your email Templates as Email Templates in Salesforce.com, they are available to all Salesforce/VR users.
  2. Salesforce Campaigns can be used to represent each send, and the stats get pulled back to them, so those are visible to all Salesforce/VR users. They can even be used for segmentation of future sends.
  3. You can pool send credits ($) between any number of users, you just have to email VR and tell them which users.

Read the rest of this entry »

Backing Up Your Data

Salesforce is so reliable and available, it is easy to forget to back up your data locally. Lately, I’ve was reminded that it is a good idea to back up your Salesforce data from time to time. Salesforce allows administrators to download a complete export up to once a week.

It isn’t that you have to fear for the Salesforce database crashing or being lost. I recommend downloading for a couple reasons:

  • It could help if you ever accidentally make unintended changes to data and want to return to an earlier state.
  • It could also be helpful in the event that Salesforce or your internet access ever goes “down” at a critical time – you’d have a way to access your data offline.

To download the backup, go to Setup (Administration) | Data Management | Data Export. Click the button – a while later you’ll get an email with a link to download your data file. Save it somewhere safe.

Alternatively, if you use Demand Tools, you can back up to a file as often as you like. I use this to create a copy of the database in a Microsoft Access file.

Microsoft Dynamics CRM - A first look

I recently spent some time learning more about Microsoft Dynamics CRM and I must admit the product looks very interesting! For those of you that are more familiar with Salesforce.Com, I will try and draw out some of the similarities and some of the differences. I haven’t had a chance to do a nonprofit implementation with Dynamics CRM, so this is very much just a first look based on information I have read and some online demos.

The first major difference between the two platforms is how they can be run. Salesforce is locked in to the On-Demand model. Microsoft offers the ability to run Dynamics CRM either as an Internal Application or as an On-Demand offering through their CRM Live service. At first glance, it appears as though Dynamics CRM would be more feature rich when run as an internal server based application. It derives its value from making the assumption that end users are most familiar with MS Office Suite of Products. It has very tight integration with MS Outlook and MS Excel. Below is a screenshot of how CRM Dynamics looks in a familiar MS Outlook Environment:
Read the rest of this entry »

Web to lead: requiring fields with Javascript validation

In a previous post, I talked about a few ways that I customize web-to-lead forms. One key change I make is to ensure that certain fields get filled in for every web lead. In a Salesforce page layout, you can require fields, but web-to-lead doesn’t allow you to do this - any web-to-lead form submission will create a lead, even if critical fields such as last name or email are left blank.

Most of our clients want to make sure their leads fill in a minimum amount of information, such as name and email. Moreover, you can catch spam by requiring sensible entries - since spammers don’t always fill in the fields.

Read the rest of this entry »

Web to lead: Javascript phone formatting

In a previous post, I talked about a few ways that I customize web-to-lead forms. One of the most important improvements you can make, I think, is to add Javascript functions to format phone numbers.

When you enter 10 digits into a phone number field in Salesforce, it gets formatted as (206) 555-1212. Web to lead forms don’t do this by default, so phone numbers show up in Salesforce with inconsistent formatting. This is the reason I first started fiddling with Javascript in web-to-lead forms.

Javascript lets you change data when a website user moves out of a field - you simply respond to the onblur event by calling a function such as my formatPhone function. In the web to lead form, your phone field tag will look like this:

<input  id="phone" maxlength="40" name="phone" size="20" type="text"
     onblur="formatPhone(this);" />

The Javascript code goes in a <script> block within the <head> section of the web page:

<script language="JavaScript" type="text/JavaScript">
<!--
    //Written by Evan Callahan, NPower Seattle
    function formatPhone(num) {
    var re= /\D/;
    var newNum=num.value;
     if (newNum != "") {
        while (re.test(newNum)) {
         newNum = newNum.replace(re,"");
        }
        if (newNum.length == 7){
           newNum = '(206) ' + newNum.substring(0,3) + '-' +
               newNum.substring(3,7);
           num.value = newNum;
        }
        if (newNum.length == 10){
           newNum = '(' + newNum.substring(0,3) + ') ' +
               newNum.substring(3,6) + '-' +
               newNum.substring(6,10);
           num.value = newNum;
        }
      }
    }
//-->
</script>

My function defaults 7 digit numbers to a 206 area code - if you aren’t fortunate enough to live in Seattle, you can replace this with a different default (or skip the whole section).

Ideas for better Web to Lead forms

We use web-to-lead forms pretty extensively for our Salesforce clients, because it is so much less expensive for them than integrating with the API.  We’ve found that WTL can work not just for ordinary leads, but also for simple event registration, volunteer signup, pledges, and many types of "applications" for service or grants.  Leads don’t have to be just people - they can bring in organization, donation, grant, or service information as well.

For example, we worked with a group that matches teen interns to other nonprofits that need interns.  The organizations that want interns apply for services on a web-to-lead form; the teen applicants sign up on another.  The first type of lead gets converted into an account, a contacts, and an internship "opportunity," while the intern applicants stay as leads until they are either matched to an internship (via contact roles) or rejected and deleted.

This is just one example of how web-to-lead has allowed us to set up simple website integration relatively quickly.

The more you use web-to-lead, however, the less you’ll like the HTML form that Salesforce provides you.  We edit the form pretty extensively, for several reasons:

  • To arrange and align form fields in a table and apply styles
  • To format phone numbers and other values as they are entered
  • To provide validation, making certain fields required and helping to avoid spam
  • To set hidden values, such as Lead Source or Record Type, that we don’t want to show on the form
  • To create or modify a picklist for values, such as Campaign

The first thing I do for web to lead is format the form in a table - two columns, with the labels at left and the fields at right. Then I add styles for labels and fields to the stylesheet.  For examples, take a look at forms for Teens in Public Service, Communities Connect Network, and Arts Corps.  To see the form’s HTML, view the source code for the page and search for WebToLead.

I will offer other a few other examples of web-to-lead techniques in subsequent posts.