Monday, December 15, 2008

Wearing Many Hats



I started working with Salesforce.com about three years ago. Back then, I was a member of the Technical Support Staff, taking direct support calls from our Customers in a 24x7 response center. My company was using ProbWeb for tracking all trouble tickets (Cases), but we were experiencing a lot of problems with it. The system would crash several times a day; there were database management issues, and all kinds of problems integrating the Cold Fusion front end with the SQL server back end.

Enter Salesforce.com.

I have to confess, I was very much in opposition to this cloud computing model. Of course, back then it was called application hosting, which doesn't sound nearly as cool as "cloud computing". I just didn’t like the idea of not being able to touch the servers on which my data was stored. But after looking closely at all the problems we were experiencing with our existing ticket tracking tool, I realized they were all centered around IT management issues – problems that I wouldn’t have to deal with if our ticket tracking database was hosted on Salesforce.com servers. No more failed backups (that we didn’t know failed until it was too late), no more re-indexing of the database, no more site crashes rendering the tool useless to customer and employees, no more software / hardware integration headaches.

My first project was the data migration – getting two years of support calls, emails and activity from our legacy SQL server imported into Salesforce.com. Our Salesforce.com Account Manager was encouraging my boss to engage a local consulting company for the initial migration and turn-up. I choked when he told me about the contract proposal: $50,000 in two months. I told my boss I wanted first crack at the job. He was reluctant at first. After all, what did I know about data migrations, GUIs, and managing a project? In the end, I convinced him.

It took two weeks to scrub and clean the data from the old SQL database and import it into Salesforce. It took a third week to customize the page layouts, creating a similar “look and feel” as our old PropWeb system. Customizing the Salesforce.com standard interface was so easy, and I was converted from “hosted applications” skeptic to cloud computing, SaaS fanatic.

I saved my company $50K in contractor fees, and learned a TON about the capabilities of the Force.com platform. I started looking outside the Customer Support organization, searching for other ways that Salesforce could benefit my company. I soon became aware of various Access databases and Excel workbooks that other departments were storing company data in. Manufacturing had created their own Access database for tracking hardware repairs, engineering change orders, RMA returns, and component failure analysis reports. Finance had also created their own Access database for sales orders and revenue. Various individuals were responsible for writing quotes; all using different templates and tools (Word for some, Excel for others). Marketing leads were captured and distributed in Excel worksheets. Opportunities were discussed during weekly Sales Team conference calls, but not captured in any electronic medium outside those meetings.

I became obsessed with pushing more and more of our business tools into Salesforce.com. Over time, I started taking fewer Customer Support calls, and spending more time working with the Salesforce.com platform. I walked through all the steps of developing a project schedules: activity definition, sequencing, resource estimation, duration estimation, and resource leveling. Weekly status updates to my boss became less focused on managing customer tickets, and more focused on monitoring projects, addressing scheduling and cost variances, and summarizing weekly project status meetings. I talked with users or potential users of the CRM platform, trying to understand their business requirements and how they managed their organizations. I spent hundreds of dollars at Barnes & Noble, buying books on Business and Systems Analysis and Project Management. I downloaded client apps like Visio and MS Project, and I became a student of system development life cycle (SDLC) methodologies. In short, I re-tooled my resume from a technical engineer to project manager, building all manner of PM skills and disciplines.

Over the past six months, my related job skills have been shifting again. I’ve come to realize that as flexible and powerful as the Salesforce.com platform is, I’m using less than 1/10th of its potential. In order to provide more value to my organization, I’ve decided to dig deeper into the Force.com platform. I’m learning new programming languages, like Apex, Visualforce, PHP, Python, HTML and Java. I’ve plugged myself in to social networking streams like Twitter, Facebook, FriendFeed, and a vast number of blogs written by other people much smarter than I, all forging along this same path.

A few months ago, I decided to “give back” to the community. Inspired by a keynote address at Dreamforce 2007, I contacted the Salesforce Foundation and asked if there was anything I could do to help non-profits with their Salesforce.com implementations. This has been particularly rewarding and challenging, exposing me to a vast number of product experts, while also giving me a glimpse into the special needs of non-profit organizations.

At the end of three years, I find myself wearing so many different hats: Salesforce Administrator, Business / System Analyst, Project Manager, Developer, Consultant, Advisor, IT Strategist. It’s been amazing fun. I didn’t mean for this to be a sappy post about how Salesforce.com has changed my life, but in this seasonal time of reflection and thinking about next year's resolutions, I see that it really has.

What about you? Did you start off as a Salesforce.com Administrator, and find that your job suddenly transformed in some way? If so, share your comments – I’d love to hear them.

Friday, December 5, 2008

Prioritizing Your Salesforce Ideas / Projects



I am the Salesforce.com Administrator for a small company, but I still get a ton of requests to customize and change things in the system: custom fields, objects, tabs, workflow, validation rules, reports, dashboards, applications, you name it. Help! There are so many requests, I can’t keep up with them! Some of these requests are very practical, and I know they’ll help our CRM initiatives greatly. Others aren’t so very useful (at least from my perspective). And of course, everything is URGENT! How do I track and priortize all these “urgent” change requests?

Great question, and a problem every Salesforce.com Administrator faces, I’m sure! Let me share an approach I use, perhaps it will help in your situation.

First, implement Ideas. Ideas is a “free” Salesforce.com application, available to organizations with Professional, Enterprise or Unlimited edition user licenses. If you’re familiar with the Salesforce.com IdeaExchange, the concept is the same. In fact, Ideas is based off the tremendous success Salesforce has recognized from their IdeaExchange. For more information about Ideas and IdeaExchange, check out my previous blogs here.

Inform and train your users on the use of Ideas. Set their expectation that all change requests to your CRM platform MUST be submitted through the Ideas tab. Prime the pump by creating Ideas! Through the newly deployed Ideas tab, post all of the projects and change requests you’re currently aware of. Get them off the yellow stickies, excel worksheets and email messages that you've been tracking them in -- get them in Ideas.

Every time a User approaches you in the hallway, or sends an email / voice message with an idea request, ask them to add it to the Ideas tab. Don’t worry if your users are initially reluctant to create, promote or comment on Ideas. Change takes time. Just make sure that YOU aren’t implementing any new changes to your organization's CRM platform UNLESS it has been submitted as an idea.

Now your Idea bucket is starting to fill up. Users can see the ideas they have submitted, and also those submitted by their colleagues. Users become aware that there are a lot of competing ideas and change requests in your queue. Furthermore, you can update the Idea Status field, showing your users which ideas have been reviewed, which ideas are coming soon, and which ideas have been implemented. Create Public Dashboards that track and show this information for your user community.

I created a Workflow Rule which sends a “thank you” email to Idea originator, and copies myself. I review every email as they come in, and create a “project” for each Idea. Some projects are fast and easy, some take longer and may require a more disciplined approach -- but every idea is tracked and worked on as a project.

Keeping track of these projects is easy! I created a custom object called “CRM Projects”. Here’s a sample page layout for the custom object (click image to enlarge):



All the important information is tracked in these CRM Project records: a unique project number and name, a link back to the Idea, originator of the request (my "internal" customer), drivers, constraints, pictures, etc.

“Ok, JP, but how does that help me prioritize all these Ideas and Projects? You’ve just given me more work, because now I have to go look at all these ideas, review them, qualify the ones that are worthy as projects, and then do some data entry describing what the project is!”

There are several fields in this custom object which help me prioritize the projects:




Importance: Picklist field, with 3 values: high, medium, and low
Urgency: Picklist field, with 3 values: high, medium and low
Effort: Picklist field, with 4 values: hours, days, weeks, months
Priority: A numeric formula field that provides a weighted priority for this project. Here is the formula that I use (alternatively, click the image to the left)

CASE ( Importance__c , "High", 1, "Medium", 2, "Low", 3, -999)
+ CASE ( Urgency__c , "High", 1, "Medium", 2, "Low", 3, -999)
+ CASE ( Effort__c , "Hours", 1, "Days", 2, "Weeks", 3, "Months", 4, -999)
- 2

This last field, Priority, is the most important in the bunch. Check out this List View, which shows all of open CRM Projects, along with their individual Importance, Urgency, Effort and Priority values (click to enlarge):



Wow! That's a lot of projects to work on -- more than can fit on one screen! The List View is sorted by Priority and secondarily by date. This gives me a weighted view of all the projects.

For example, the first project (Project ID: 2008-114) has High importance to the organization, High urgencyto the idea originator. It's a fairly simple request, should take only a few hours effort – certainly less than a work day. So based on the priority formula, this project goes right to the top of the list – even though it’s comparatively new to other projects on the list.

The key, of course, is setting proper values in these picklist fields. In general, I use the following criteria:

Importance: How important is this change request to the business organization? Don’t factor how long it will take to implement or deadlines – just assess the importance of this project to the company. Guiding Rule: Weigh the importance of the project to the Company, not the original submitter. Here’s the litmus test: put yourself in the CEO’s shoes (I love doing that!). If the CEO were aware of this request, would he consider it highly important? Somewhat important? Not so important? If I have any doubts, I'll just head up to the corner office and ask, “Hey, J.C. … how important is this project to you?” We’re a small company, too, and I’m not known for my timidity!

Urgency: How quickly is this feature needed? Sometimes I can determine urgency from what the Idea originator has written. More often, I can't really tell until I follow-up with them in person. That's right, I always talk to these Idea people face-to-face before setting up the project. From those discussions, I can gauge if the feature is a “Nice to Have”, “Must Have”, or “Heeeeeellllllllppppp”. And based on that, I can rank the project urgency as Low, Medium or High, respectively.

Effort: This is my estimate of how long it will take to implement the project. Custom fields, tabs, reports, dashboards are easy. We can bang out lots of those types of Ideas in few hours. Workflow rules, validation formulas, apex triggers, and Visualforce page changes might take days. Not always, as some workflow rules can be implemented very quickly. However, when you factor in our company policy to do all changes in a Sandbox environment first, and also to careful document, test and manage revision control of all changes, the cycles quickly add up. More complex Apex, Visualforce pages and application changes might be sized at weeks or months.

Priority: This field is updated automatically through the formula rule defined above. It’s a very simple weighting algorithm. Highly important, highly urgent and simpler projects jump to the top of the list. Projects that are less important, less urgent, or more difficult to implement settle somewhere lower.

One final note: as CRM Project Manager, I don’t use the priority value as the ONLY assessment for determining what my team should work on. Projects are not worked in top-down order, based solely on their priority. It’s simply a tool for determining the weighted priority of projects in my queue. However, if I’m working on projects that are NOT on the top of this list, I make sure my boss knows it – and the reason why.

Thursday, December 4, 2008

Case Comment Workflow Rules

Here’s a tricky little problem that stymied me today – and the solution!

THE PROBLEM
In the “Status” picklist field of the Case Object, we have defined a “Waiting on Customer” value.



If a Support Rep is working a Case on behalf of a Customer, they'll often come to a point where they can progress no further -- without additional diagnostic or support information from the Customer. When this happens, they'll contact the customer, let them know what information is required, and change the Case Status to “Waiting on Customer”.

When the Customer provides the information, either through the Self-Service Portal, or through an email, the Case Status remains “Waiting on Customer”. Naturally, this frustrates the Customer! When they review their open cases through the Self-Service Portal, they expect to see this status field updated. The Case is no longer waiting on Customer, it's waiting on us!

My Support Team wanted a Workflow rule that would automatically change the Case Status from “Waiting on Customer” to “Investigating”, whenever the customer added a Case Comment through the Self-Service Portal, or if they send in an email related to the Case (to our email2case application).

When I reviewed the Release Notes for Winter'09, I knew this functionality -- the ability to create a workflow rule on Case Comments -- had been recently added in. But as I started playing with the rule criteria in my sandbox, I got stuck. How do determine if a Case Comment was added by a Self-Service Portal user?

THE SOLUTION
A quick search on the Salesforce Community forums gave me this helpful information.

As len123 observes, every user has a type – but Customers accessing through the Self-Service Portal are not “users” (i.e., no user license required). Therefore, any Case Comment added by entities in which the $User.UserType is NULL must originate from Self-Service Portal users.

My first Workflow Rule formula looked like this:

AND (
ISPICKVAL (Parent.Status , "Waiting on Customer"),
ISPICKVAL ($User.UserType , "")
)


Every time a new Case Comment is added, this workflow rule is evaluated. If the related Case status is “Waiting on Customer” AND the $User.UserType is null, go do some action. In my case, the action was changing the related Case Status to “Investigating”.

The Workflow rule worked great. If the Case Status was something other than “Waiting on Customer”, the workflow never triggered. Of if an Internal user added a Case Comment (no matter what the Case status was), the workflow would not trigger.

But some of our customers communicate with our Support organization through email. We have custom Apex application that processes these emails, looks for a certain tags in the email subject line, and finds the Case that email is related to. The app adds the email to the case, and copies the body of the email into a Case Comment. The Support team wanted to make sure these customer updates would trigger the same workflow.

Here is the final Workflow Rule that I implemented:



If that’s hard to read (click to enlarge), the rule criteria formula text block is below:

AND (
ISPICKVAL (Parent.Status , "Waiting on Customer"),
OR (
ISPICKVAL ($User.UserType , ""),
$User.Username = "mail2case@cedarpointcom.com"
)
)


Now, the Workflow rule fires only when Case Status is “Waiting on Customer” AND one of the following is true: 1) UserType is Self-Service Portal user, or 2) case comment was added by our Apex app (which adds the body section of the email to the Case Comments.

What workflow rules have YOU implemented with Case Comments since Winter'09?

PS – Thanks to Twitter follower @CRMFYI for the good tips, and len123 for the workflow formula!