Archive for July, 2006

Cheek to Cheek

Thursday, July 27th, 2006

Appexchange is a really great system for packaging up modules for easy installing in Salesforce.com instances. But it’s not perfect–you can’t package up a lot of things you need to build out Salesforce.com for a customer. So, the current state of the platform still requires a lot of re-building. I spend too much time creating the same fields, same page layouts, and same profiles each time I work with a new client.

The only way it’s palatable for me is because I have two monitors on my computer and can pull up a completed Salesforce.com instance on one and my work in progress the other.

This makes the monkey work of creating the fields and laying them out correctly easier, because I’m not flipping between browser windows or looking at a printed page. If you do this kind of work, consider the $200 upgrade in video card and monitor to double the size of your desktop.

Appexchanging Reports and Dashboards

Wednesday, July 19th, 2006

I spent a bunch of time today creating some stock reports and a dashboard with the goal of using Appexchange to deploy them to my customers’ Salesforce.com instances.

Gift revenue

Reports are time consuming to create, dashboards even more so. Here’s what I’ve learned in my first day trying to replicate for nonprofit functions what Scott Hemmeter has done for user adoption:

  • Dashboard widgets sometimes don’t visualize the way you want–the axes may be reversed, or your vertical stack graph may be stacking what you want across the X-axis. I found out an undocumented feature: Create a Chart on the report you’re using for your dashboard (it’s the last step in the report wizard)–you have much more control over the display. When you create a dashboard widget on that report, it looks at the chart information and sets up your chart the way you did on the report.
  • If you reference any custom objects, the object will be installed right along with the reports. That’s probably not desireable behavior, unless you package up reports with the install package for the objects themselves. Then the user gets the object installed, and the reports all at once.
  • Don’t reference any custom fields on standard objects. Appexchange just won’t let you do it. My strategy is to use only standard fields–you can always add custom fields to the reports later.
  • You can build reports that use record types, but they will be screwed up on install. I’ve got reports that look only at Gifts. After install, I have to open up all those reports and change the criteria to use the right record type–the reports won’t show any data until you fix that. A pain, but pretty quick.
  • The and dashboards are installed in a folder with the same name that they came from. You don’t run into naming conflicts, but you do want to name the folders wisely.

I’m pretty excited as this is going to save me tons of time, and give me a way to share my reporting best practices. This approach will save me a ton of time–I’m glad I finally got around to digging in to it.

Feel free to install the reports and dashboard. Let me know what you think!

Some Observations on Nonprofit Software

Tuesday, July 18th, 2006

Over on the ONE/Northwest site I’ve written up a piece about how nonprofits can best leverage existing software in pursuit of their missions.

Identifying prospects, communicating with them, and moving them along a path to engagement is a set of activities common to just about every organization in the world. Corporations call it sales and marketing, nonprofits call it donor management and outreach, and government calls it campaigning and constituent outreach. Underlying the different terms, the activities are very similar.

This is great news–we don’t have to build it ourselves! We get to use great free and paid software that is targeted at serving other sectors, primarily corporations. We can implement our engagement strategies using tools that are already designed to do that well.

Flexible, enterprise grade commercial applications with open APIs make it possible, and highly desireable, for a nonprofit to support it’s engagement processes with very little software that is written specifically for nonprofits. As the economic engine behind those enterprise applications moves forward, we get to slipstream along, reaping the benefits of their huge investment in the tools. It’s all about leverage, and investing where we can have the most impact, on that small percentage of functionality that the corporate market isn’t ever going to build.

Opportunity Teams

Wednesday, July 12th, 2006

When you’re working on a Grant or a Major Gift, it’s often a team effort. Board members can help solicit donations, multiple staff members can contribute to a Grant submission. Record these teams in Salesforce.com using the Contact Role functionality on Opportunities.

Create Contact Roles to cover all the parts people will play on your teams. If you make sure to have Contact records for all your staff and board members they can easily be added to the Opportunity team through the Contact Role related list. Then you’ll know who’s on the team for each effort, and can track and thank accordingly.

Households and Campaigns in a Contact-centric Salesforce.com

Wednesday, July 12th, 2006

Anyone who works in Salesforce.com notices quickly that there is a distinct bias for business to business (B2B) interaction over business to consumer (B2C) interactions. This is a drag when you try to do things like run an individual giving program, or lock down user access to Contact records.

One place in Salesforce.com where B2C functionality is actually pretty nice is Campaigns. Campaigns are the stock way of modeling an outreach event. They allow you to connect a ton of Contacts to the Campaign, change their status, export them to Excel, etc. You can easily use Campaigns to create lists for direct mail, emailing, etc.

There is a problem, though, when we try to model Households. Here’s an illustrative example.

You run a report of everyone who has given you a gift this year so you can send them all a mailed invitation to a thank you party. You add everyone in that report to a Campaign for the party. Then you export the Campaign members to Excel for mail merging.

Faye Fonebone gave you $100 and Fred Fonebone gave you $50, so they are both Campaign members, and both in your Excel export. Problem is, they live at the same address, and you’d like to send them one invitation. You’ve already created a Household for them, so it’s easy to bring in their Household information, but how do we deal with the duplicates?

You can take the Excel spreadsheet and dedupe it by hand–not really that hard to do. Or you can write an S-Control to dedupe the Campaign members based on their Household, which is what I’ve done.

From a link on the Campaign, I run an S-Control that looks for Contacts that have their Household represented more than once. For all Contacts other than the first one, the Campaign Member Status is changed to “Household Member”.

The link is a Formula field created on the Campaign object–here’s what the syntax looks like:

HYPERLINK("/servlet/servlet.Integration?lid=XXXX&eid=" & {!Id} , "Deduplicate Household members")

Where XXXX is the Id of the S-Control you've just installed.

Now when I export my Campaign members, I can drop out all those with Household Member status, and eliminate my duplicate address problem. I address my letters to the Households, using the Household recognition name, “Faye and Fred Fonebone”, and we save paper and look like we know what we’re doing.

It will work with no changes if you’re using my Householding setup, which is included in the new Salesforce.com Foundation nonprofit template.

Ensuring CRM Data Quality with DemandTools

Thursday, July 6th, 2006

One of the biggest problems plaguing CRM systems and their use is data quality. Once users start entering data into the system, quality degrades with duplicates, and incomplete and innacurate data. Cleansing relational data can range from the easy (modifying simple fields on record) to the very difficult (deduplicating records while making sure all related data is maintained.) Doing it well takes some pretty high-level logical thinking and expertise in whatever programming language your CRM is written in.

No longer. Incredibly complex deduplication and data cleaning is now within the reach of nonprofits using Salesforce.com thanks to today’s announcement by CRMfusion that they are donating their Salesforce.com data manipulation software DemandTools to small nonprofits.

After spending some time with DemandTools, I am amazed at the combination of power and simplicity. I will now be training all my customers in data deduplication using DemandTools, and I’m really excited to see how the improvement in CRM data quality will positively affect them.

The DemandTools Toolkit

DemandTools is a .NET application that you install on your Windows desktop and point at your Salesforce.com instance. Much like the Salesforce.com Dataloader, DemandTools will interact with your Salesforce.com data, allowing you to select what data you want to query and modify.

But DemandTools is much more than an import/export/update utility (it does do that very well, though.) Consider the Dataloader a really fast way to get large quantities of data in, out, and modified in Salesfore.com. Consider DemandTools to be a powerful tool that helps you solve the specific problems of data cleanliness–one of the big challenges of successful CRM. Data cleanliness can be broken into a couple separate problems.

Promblem 1: Duplicate Records

Duplicate records are the bane of all CRM systems. People and organizations are in the database more than once, so you don’t have a clear picture of your relationship with them. Often it’s really hard to find duplicates. And when you can find them, it’s often even harder to get rid of them.

The main problem with getting rid of duplicates is how to deal with related records. If there are duplicate Contacts, you have to migrate all the other records in the database that are related to the Contact to be deleted to the Contact to be saved. All gifts, memberships, notes, tasks, and events have to be reconnected to the Contact we’re keeping. This is a daunting job. Salesforce.com has it’s Account and Contact merge functionality to do just this set of tasks.

DemandTools has blown the doors off of Account and Contact merge. The new version has a generic Single-Table Dedupe tool. It
allows you to dedupe any Salesforce.com objects. Accounts, Campaigns, OpportunityContactRole, Households–ones that are created by Salesforce.com and ones that you create. They’ve extended the
functionality to match the flexibility of Salesforce.com. Brilliant.

They basically work like this:

  1. You pick the object you want to dedupe
  2. Youset criteria for the set of objects you want to check for dupes (all, owned by you, or build your own criteria)
  3. You pick the fields you want to see on the duplication comparison
  4. You set the criteria for determining if the objects are duplicates (exact, fuzzy, partial match on name, and any other fields you want. Plus crazy matches that don’t care about word order, ignore phrases like “the”, “and” or “-”.)
  5. You are presented with a list of possible dupes
  6. You identify which of the possible dupes you want to deduplicate
  7. Merging is controled in a number of ways. You can specify which fields you want to keep on the merged record, just like the Salesforce.com Account and Contact merge. Or you can set up rules that pick the fields to keep for you. You can create really complex rule sets that can be saved to XML and shared with other DemandTools users. You can also schedule deduplication to run on a schedule.
  8. You merge, and the non-master record is either deleted or renamed with a prefix you determine for easy deletion later

But don’t take my word for it, watch the screencast of DemandTools single-table Deduplication in action.

The interface is intuitive, and the results look to be right on. I like that the object to be deleted can be renamed, rather than deleted straight away–letting a program modify your CRM data is a bit scary, so it’s nice to have an extra verification step in there. Once I come to trust DemandTools more, I’m sure I let it delete for me.

Problem 2: Inconsistent Data

We spend a lot of time at the begining of a CRM project firguring out what data we need in the system to allow the nonprofit to get its work done. We set up the right fields, with the right picklists and options, and it’s a thing of beauty. Then it starts to get used and the data in those fields ends up looking like junk.

With picklists and multiselect lists we can control what people put in fields. You can make fields required so that the user has to enter something. But in the end, data entry is imperfect and data will be left out, misspelled, or otherwise incorrect. The MassChange tool lets you build simple update queries for any object. Change all Account billing country fields that are “US” to “USA”, for example. And you can build much more complex queries than that. I’ve been doing this with the Salesforce.com Dataloader–it simplifies this greatly.

Problem 3: Bad Addresses

Another big problem of CRM data is that addresses are bad–they’re either incomlete or the zip and address don’t match.The Zip Fix tool will look at the zip code and suggest changes to the city and state where appropriate. I ran this against my Salesforce.com and found 1047 Contacts where changes were suggested. Most of these were fixes to annoying capitalization errors I introduced a while back. Now they are all fixed, making my Individual Giving Manager happy!

The address change suggestions are made to a CSV file, which you can then point the MassEffect tool towards, doing a big update call. Here’s a nice feature: an Undo file is created, so if you realize after the fact you didn’t want to change those addresses, you can back out the changes.

Things get really interesting with ther Address Verification tool that connects to a the web service vendor Strike Iron. It uses the pay service at Strike Iron to check addresses and recommend changes in spelling, corrected zip codes, etc. It also will supply latitude and longitude, US Congressional district, and County. DemandTools comes with 2000 free lookups to the paid service that retails at about $0.03/lookup or $300/year for 10,000 lookups. I used those free lookups to fix addresses and add US congressional district to 1300 Contacts in our database. Very nice, and definitely worth paying for in the future. If they add State Legislatve District lookups we’d be the happiest folks on the planet…

Pricing

DemandTools is free to any nonprofit who has 10 licenses with Salesforce.com. Nonprofits with more than 10 licenses can purchase DemandTools for $25 x the number of licenses. A 20 user nonprofit would pay $500/year, well worth it in my eyes.

Conclusion

DemandTools is a wonderful complement to Salesforce.com CRM. I am hooked. I’ll be using it in my consulting, and I’ll be recommending this to everyone I know. If you’re a nonprofit using Salesforce.com DemandTools could really change the quality of your data for the better, and allow you to spend less time worrying about your data and more time using it in service of your mission.

I’m always happy to see the Salesforce.com business partners infected
by the corporate philanthropy of Marc Benioff. My hat comes off to DemandTools for making their enterprise-grade tools available to nonprofitshanks for the donation
CRMfusion!

One stop shopping

Wednesday, July 5th, 2006

You'll find it

Process Focus vs. Goal Focus

Monday, July 3rd, 2006

I ran across a short interview of Scott Molina by Mike Ricci. Both are triathletes and triathlon coaches and both try to shift the focus from outcomes to the training process itself.

Mike writes:

For the most part, the athletes that can let go of their time goals are the ones who usually achieve them. This has always been an intuitive sense as a coach, but I hadn’t thought about it until I heard Scott’s interview. Scott summed up this approach when he mentioned ‘process focused athletes, vs. results focused athletes’, meaning ‘enjoy your training, and the results will take care of themselves’. In other words, if you are so focused on the end result, you won’t have as much fun in training and the chances of you reaching your time goals diminish greatly.

With three sports you have to somehow train enough to master them all without getting burned out or injured. Turns out that’s incredibly difficult–pofessional triathletes are some of the most relentless and dedicated trainers in the world of sports. And the ones who succeed have figured out a way to enjoy the training while they are doing it.

Scott chimes in:

Most people I work with hire me to help them achieve their goals. That’s what they ask so that’s what I try to deliver. Many want to better their time or place in an IM [Ironman triathlon: 2.4 mi swim, 112 mi bike, 26.2 mi run] or qualify for Kona [the Ironman world champioships]. Nearly 100% of the time they are focused on a goal or two. What I try to convince them of along the way is that if they can learn to enjoy the challenges of daily training then the goals will take care of themselves. The hardest part of this sport is creating a life that includes training in such a way that the athlete looks forward to it. If they can do that then they’re 90% the way there.

I see parallels to working at a nonprofit. It’s a long slog as well. There are goals out there that are big–end hunger, preserve wilderness, change the way we use energy. It’s important to have these big audacious goals out there, but they can seem unattainable. There is so much emphasis on the goals, that often we don’t consider if the work that is getting us there is enjoyable. The nonprofit sector is notorious for burnout and staff turnover–turns out if you’re focused on goals alone, it’s hard to hang with the daily work.

Scott again:

The main question each athlete has to ask themselves to enjoy the process of training is “how can I make this more enjoyable?” Enjoyable doesn’t necessarily mean fun. I like words like challenging, uplifting, encouraging, satisfying, fulfilling, outstanding, achievement. These are the feelings you want to get from your training and often it’s just a matter of perspective. These are the feelings that lead to a successful process.”

One of the things I really like about my current job is that we focus on the process and try to make that enjoyable. What is the work, and how can we make it efficient, fun, and challenging? How do we fit it into your life so you won’t burn out in the thousand mile journey to those big goals? We’ve implemented a number of strategies (i.e. flex time, compressed work week, self-directed workteams, making room for research and development, etc.) and they do make the process more enjoyable. Our team seems to be a little bit less crispy around the edges from burnout because of them.

Mike again:

One important thing I took from this interview is that if you have a goal, and you know the training it’s going to take to get there, and you can’t meet those training goals, then you need to back off the ultimate race goal. I have seen many athletes short change themselves and think they had a bad race day because they didn’t hit their goals, when in reality they had a great race if you consider how much time they were actually able to train.

Another key aspect of our success is being realistic about the velocity of our progress toward our goals. We have decided that we should not ask employees to work 60 hours a week. This puts a limit on the time we have to move toward our mission goals. Acceptance of this constraint makes us prioritize and be creative in our work, and periodically check in, resetting expectations along the way.

And we feel successful because of it. We’re not saving all the wilderness areas in the Northwest today, but we’re doing what we can today to get us where we want to be in 10 years. By focusing on process rather than on goals alone, we’re aiming for sustainability, which is what you need when you’re going after goals that are 10-50 years out.

Ted Stevens on the Internets

Monday, July 3rd, 2006

I don’t usually repost things like this, but I saw this on kos and had to–it’s Senator Ted Stevens explaining the Internet, and why net neutrality is a bad idea.

There’s one company now you can sign up and you can get a movie delivered to your house daily by delivery service. Okay. And currently it comes to your house, it gets put in the mail box when you get home and you change your order but you pay for that, right.

But this service isn’t going to go through the interent and what you do is you just go to a place on the internet and you order your movie and guess what you can order ten of them delivered to you and the delivery charge is free.

Ten of them streaming across that internet and what happens to your own personal internet?

I just the other day got, an internet was sent by my staff at 10 o’clock in the morning on Friday and I just got it yesterday. Why?

Because it got tangled up with all these things going on the internet commercially […]

The regulatory approach is wrong. Your approach is regulatory in the sense that it says “No one can charge anyone for massively invading this world of the internet”. No, I’m not finished. I want people to understand my position, I’m not going to take a lot of time. [?]

They want to deliver vast amounts of information over the internet. And again, the internet is not something you just dump something on. It’s not a truck.

It’s a series of tubes.

And if you don’t understand those tubes can be filled and if they are filled, when you put your message in, it gets in line and its going to be delayed by anyone that puts into that tube enormous amounts of material, enormous amounts of material.

Keep up the good work Senator. And continue to focus your energy on issues you grok so well.