Tuesday, November 10, 2009

Dreamforce is Coming!

I keep telling Paul Overy, my colleague and co-founder of Force Geeks, to start a blog. I think he'd be great at it. Here he is as a guest monkey, err, blogger. This is a reprint of a mailing Paul sent to the Salesforce.com New Hampshire User Group.

Dreamforce'09 is only 1 week away. Are you going?

Here are some things that you might find interesting:

- You can log in to the attendee portal to add sessions to your calendar. You can even have your updated calender emailed to you.

- A Dreamforce 2009 Tweet-up is scheduled for Tuesday night at 6pm. Originally planned by David Schach (@dschach), but Salesforce has agreed to host this event and give out free stuff. Hope to see you there!

- Another Tweet-up hosted by Model Metrics is scheduled for 8pm on Tuesday at Johnny Foley's Irish House. Stop by for a pint!

- Steve Anderson (@gokubi) wants you to join him next Wednesday in creating a collaborative document of the Dreamforce opening keynote using Google Wave. If you need an invitation to Google Wave, let me know and I'll send one.

- If you know of any parties, you can list them on the Dreamforce Party Planner, or you can just check out the spreadsheet to see what else is planned.

- If you still need a reason to get excited about Dreamforce, Salesforce is posting a count down of 8 reasons to get excited about Dreamforce.

That's all for now. Feel free to forward on links of your own.

Till next time,
Paul Overy
NHUG Co-Leader

Sunday, November 1, 2009

Calculating Business Hours

The Problem

My client has a Service Level Agreement (SLA) in which they must respond to a certain type of service request within 2 business days. In Salesforce, they were trying to track what % of orders are serviced within the SLA period. To date, they had been calculating the SLA Due Date with a workflow rule. The workflow rule auto-assigned the SLA Due Date with a simple formula: today()+1. This was problematic for two reasons: (1) the formula didn’t factor in weekdays or company holidays, and (2) the process didn’t give consideration to “time of day”.



They understood the first point, but didn’t quite understand the significance of the second point. To illustrate, I described the following scenario: “Let’s consider the ideal case - an order comes in today at precisely 9:00 AM. By your formula, you have all of today and all of tomorrow to finish that order. If it takes you longer than tomorrow, you have exceeded your SLA. Now, let’s suppose an order comes in today at 4:50 PM. By your formula, you have only 10 minutes left from today and all of tomorrow to finish that order – anything after that and you have exceeded your SLA. Also, what happens if an order comes in anytime on a Saturday? By the time you get to work on Monday, you have already exceeded your SLA with the current formula.”


The light bulbs clicked on. We agreed they needed to start tracking the date/time of the order submission, and calculate the SLA Due Date by adding 16 business hours to that Order Submission date/time stamp.


Thought Process -- Getting to the End Solution

A reader recently asked me to share more details about how I get from Problem to Solution, so here we go:

  1. I started by checking out the Workflow formulas; in general, if I can solve a problem with clicks and formulas, rather than code, I’ll take that option. In this case, I couldn’t come up with a simple solution. There are no functions that allow for determining the “Day of Week” in a date field, nor an easy way to exclude company holidays from the SLA Due Date calculation.

  2. Whatever can’t be managed in a formula can almost certainly be managed in an Apex trigger. I visited the Salesforce Developer Community message boards, to see if anyone had done something similar. Before I write any code, I always visit the AppExchange and developer boards, looking for a short cut, inspiration or at least potential gotcha’s that other devs have run into. My quick search didn’t bear much fruit. Blanka and Rup3 had creative formulas that could be used in Workflow rules, but neither solved the problem of company holidays or calculating the value based on business hours. I spot checked a few other posts, but none provided they guidance I needed.

  3. Next, I pondered how non-Salesforce Developers might have tackled this problem. I did a Google search on “calculate business hours” and came up with this interesting post (and code sample) on the Code Project boards. The sample was written by perle1, and was exactly the logic I needed. Well, almost. Whle it would be pretty simple to convert perle1's C++ logic into Apex, his code still hadn’t tackled the problem of holidays.

  4. RTFM - Read the Foolish Manual. Yes, I probably should have done this sooner, perhaps at step 1, but I wasn’t entirely sure what I was looking for until I’d latched on to Perle1’s code. His sample focused my attention on company holidays. It was then that I recalled Company Profile configurations, which are a standard part of your organization setup in Salesforce.com. There had to be a way for my Apex triggers to use and offset with these configuration settings.



So I poked around the Apex Developers Guide, found the BusinessHours object and some nice sample code … and was pleasantly surprised. This was going to be a piece of cake! In fact, it looked like I’d be able to write this trigger in 4 lines of Apex code (compared with Perle1’s 90 lines of C++ code). Plus, I’d have the ability to handle holidays in the business hours calculation – without writing any extra code.


Here's the step-by-step:


1.) First, I entered in all of the company holidays (click Setup -> Company Profile -> Holidays). A nice Salesforce.com feature is that the holidays can be configured as "recurring", so you can set the holiday once, and then never have to worry about it. Recurring holidays are flexible, in that they can be set up to occur on a specific day of the year (i.e., Christmas is December 25th, every year), or on a date pattern (i.e., Labor Day occurs on the 1st Monday of each September).


2.) Next, I set up the business hours for the work group that was using this "Submitted Order" process. In Salesforce, click Setup -> Company Profile -> Business Hours. There was already a Business Hours record labeled "Default". I left that one there, and created a new Business Hours record labeled "BSC". I added in the service teams business hours, and included the company holidays. I set these hours as the new "default" for the org.


3.) Finally, here's the Apex Code that does all the work:


trigger calcBusinessHours on Submitted_Order__c (before insert, before update) {

// Assumes the BSC work hours are the default for the Org
BusinessHours stdBusinessHours = [select id from businesshours where isDefault = true];

for (Submitted_Order__c so : Trigger.new) {
if ((so.WB_Submitted__c != NULL) && (stdBusinessHours != NULL)) {
// BSC works 11.5 hours / day (8:00 AM - 7:30 PM, M-F). Our SLA is 2-days (23 business hours)
so.SLA_Due_Date__c = BusinessHours.addGmt (stdBusinessHours.id, so.WB_Submitted__c, 23 * 60 * 60 * 1000L);
}
}
}



Submitted_Order__c is the custom object that I want to determine the SLA Due Date from. This custom object has a date/time field labeled "WB_Submitted__c", and another date/time field labeled "SLA_Due_Date__c".


The "WB_Submitted__c" field has a date/time value when it is uploaded into Salesforce (by an external process). This is the date and time that the order was submitted to our support services group.


This function is triggered whenever a Submitted_Order__c record is inserted or updated in Salesforce. The trigger grabs the BSC work hours (which we configured as "default" in step 2), and then adds 23 business hours to that value to calculate the SLA_Due_Date__c field. NOTE: You'll want to change this if you're using 8-hour business days.


What if you needed to calculate the number of business hours between two date/time values, and record that into a number field? There's already a BusinessHours.diff method that does that work for you! NOTE: The answer is returned in milliseconds, so you need to do a little math to convert it to hours:


Hours_to_Close__c = BusinessHours.diff (stdBusinessHours.id, so.WB_Submitted__c, so.OA_Complete__c) / 1000 / 60 / 60;


How simple is that? Easy-peasy, lemon-squeezy!

Friday, October 2, 2009

Training Tips for Your Administrator

Our administrator has spent considerable time developing her skills in SF. I would like to provide her with some additional training but I believe after reviewing the course syllabus that the content provided by SF is too basic. Does anyone have any suggstions regarding training that might be helpful? We are located in the NYC area and are using the Professional edition. -- Connie Ducaine



Here are some ideas:



1.) Have your Administrator connect and get involved with the local Salesforce.com User Group. There are many User Groups around the world, you can find your local chapter here: http://www.salesforce.com/community/community/ On the right sidebar, in the section labeled Local User Groups click your region of interest, and register to join.



Salesforce.com User Groups are organized and run by volunteers within the Salesforce user community -- not by Salesforce. They're a great way to connect with other administrators, developers, partners, or even Salesforce employees. User group members share personal experiences, learn how others are using the platform, and have a unique opportunity to bring some of those ideas back into their own organization's instance of Salesforce.com.



2.) Even if you opt to not send your Administrator to training, consider sending them to get their certification. For more information, click here. While the training courses are designed to specifically help students with the certification exams, an experienced administrator will probably have no difficulty with the them. There are also plenty of online resources that will help students prepare for the exams. This is a great opportunity to show recognition for your hard-working employee!

3.) Have your Administrator get her own Salesforce.com Developer account. She can get one here: http://developer.force.com/



That site also provides a great deal of information on how to get started with some of the more advanced features of the tool. The Developer edition is a bit more "full-featured" than the Professional edition, so she can really spread her wings -- digging into more advanced features like writing triggers, designing Visualforce pages, and experimenting with AppExchange packages.



4.) Have your Administrator spend some time on in the Salesforce Community website. There is so much information here: Best Practices, Training & Recordings, Developer Blogs, etc. If she's really hot stuff, she might be interested in helping other users with their questions in the discussion forums.



5.) Want to really get her excited about learning more about the platform? Send your adminstrator to the annual Salesforce.com user conference: Dreamforce. This is a 3-day conference in San Francisco CA, designed for users, developers, and partners. The event is highly engaging, full of break-out sessions for users of all skill levels. I guarantee that when she leaves Dreamforce, her head will be swimming in ideas for how she can do more for your organization with the Force.com platform.



I think it's great that you're keeping her focused on advancement and improvement on her Salesforce skills. There are lots of resources out there, even if you're not interested in the actual training classes.

Saturday, August 22, 2009

Salesforce.com Data Storage Space


A Salesforce.com client contacted me, very concerned ... they were using 139% of their data storage space. Frankly, they were surprised that Salesforce.com hadn't yet disabled their ability to add new records to the system. Mostly, they wanted to understand how they got in that predicament -- they had only been using Salesforce.com for 10 months.

Here's what I relayed to them:

In a small org (less than 50 users), data storage space can run out quick!

Here's how storage space works in Salesforce.com:

With Professional and Enterprise User Licenses, you get 20MB/user (Unlimited User licenses get 120MB/user). This particular client had 29 User Licenses, meaning they were allocated 580 MB (0.58 GB) of data storage space. However, minimum storage space for any org is 1GB, so that was their actual data storage limit.

When you get right down to it, 1GB isn't a whole lot of space, not if you store a sizeable amount of records and want to be able to create trend reports / dashboards for 1-2 years. There is an Idea on the Salesforce.com IdeaExchange to increase this data storage space: click here. As we've seen time and again, Salesforce.com does a great job of implementing features / demands from it's customers -- so I'd encourage you to go vote this up. Then have every user in your org vote it up! Those votes really make a difference.

Additional storage space can always be purchased from Salesforce.com. They sell storage space in 50MB and 500MB blocks. It can be activated immediately, by contacting your account executive. Warning: prepare for sticker shock. It's been reported that the charge for this increased storage space is disproportionately high.

It would be nice if System Administrators received a periodic notification of what their data storage usage / capacity was -- perhaps as part of the monthly Admin Newsletter. However today, there isn't any automated email notification that a System Administrator can receive to warn them them when they have passed a certain threshold of data storage space. Instead, System Administrators must be vigilent, and periodically check their usage: Click Setup -> Data Management -> Storage Usage (see screen shot above).

The page layout shows what your Org's data storage limit is, along with how many MB and % of storage space is used. There are seperate break-outs for both data storage and file storage. Data storage is all the data stored in various standard and custom objects, and file storage space is for attachments, documents and media stored in Salesforce Content.

We observed that the majority of this client's data usage was from Tasks: 448,213 task records! We did some quick math, and observed that at 29 licensed users, they had assigned 15,455 tasks per user in the last 8 months (64 tasks per day!). The actual count was much higher, since many of these users were recent hiresm, but Phew! That's a lot of tasks!

As a rough estimiate, 2,500 Salesforce object records will take up 5MB of data storage space. The bulk of these were coming from their many Vertical Response mailings. There are techniques for configuring Vertical Response campaigns so that they don't spawn tasks, which their System Administrator was already familiar with, and indicated he would implement.

So now that we knew what the problem is, how did we resolve it?

Job #1 House-Cleaning: There are several free tools that allow you to do bulk export and deletion of records, like the Salesforce/Excel Connector tool and Salesforce Data Loader. Their SysAdmin grabbed the low-hanging fruit, backing up a sizeable chunk of their aged Tasks to a local file and then deleting those records from Salesforce.com. This brought them down to under 95% data storage. We're now doing a little data mining and discovery, looking at data stored in other objects and working with the client to determine what is relevant and what data is not really being utilized.

Job #2 Prevention: After we've cleaned house, we plan to take a look at what is spawning all these tasks. Aside from those created from Vertical Response, a good chunk of them were seemingly created from various time-based workflows. We need to look at this organizations business processes to determine if this is appropraite (64 assigned tasks per day per user?). Are these workflows critical? Are they appropriate? Do they align with documented business processes and objectives of the Organization? We may need to review and/or document the business processes, reduce tasks to a "reasonable" level, and update the triggers, workflows rules, and app configs (such as Vertical Response) appropriately.

Job #3 Monitoring - Stay Vigilent: As already mentioned, Salesforce.com does not provide an automated email to warn System Administrators when they are nearing storage capacity. We've already done quite a bit of work in this area, designing applications that do automated daily backups, tools that render that data available for viewing (for Orgs that need 24x7 access to their data, even during scheduled maintenance outages), automated attachment archiving, and automated data archiving (deleting records from Salesforce based on certain thresholds -- like Dead Leads > 12 months inactivity, Closed Cases > 2 years, etc.). We may look at designing a similar solution for this client, if it becomes necessary. For now, they can continue managing the backups and archives (deletes from Salesforce) manually.

The good news in all of this is that data storage issues, once identified, are easy to fix. Keep an eye on your storage consumption, and do some trend analysis on the amount of data you are loading to Salesforce.com, and how long your storage is likely to last. Then consider what archiving policies you might need to put in place, or consider purchasing additional space. Keep an attentive eye on it throughout the year.

Wednesday, July 1, 2009

Landing Your Next Developer Gig on the Force.com Platform

Excerpt from an email I received this week:

"Hey JP, I notice you tweet about some Salesforce jobs occassionally. I'm looking to make a change. I've spent the last year doing a lot with Salesforce, including the Force.com API through ASP.NET / C#, custom objects, custom fields, workflow rules, email alerts, custom web-to-lead, and Salesforce.com Administration. I also do a lot with PHP, MySQL, XHTML, CSS, Javascript, and ASP.NET. If you know of any opportunities, drop me a line at ..."

Actually, it was a series of tweets DM'd to me, but I just appended them all together. I get 2-3 emails, tweets, or phone calls like this every week.

I wrote this blog for all you aspiring Force.com developers out there, looking to make a change or get plugged in to the Force.com development scene. Disclaimer: My interests are slightly self-serving: now I can just link this blog post in reply to all those emails, rather than reply to them each individually! #TimeSaver

First, take a moment and listen to @garyvee. This is one of my favorite clips by Gary, from his presentation at the Web 2.0 Expo last September.



Important Take-Away:

"Look yourself in the mirror and ask yourself, 'What do I want to do every day for the rest of my life?' Do that."

Working on the Force.com Platform is great, but please, Please, PLEASE don't do it unless it's something you absolutely love. Soon after you've started working with this tool, you're going to start pulling your hair out. You'll find yourself growling at governor limits, cursing Apex 75% test code coverage requirements, puzzling over the real differences between Apex and Java, and wondering why object IDs come in 15-char and 18-char flavors. Don't even get me started on the lack of VLOOKUP() functionality in workflow rules.

You'll hate it! Just like Gary hates answering the same question day after day after day ("Which white wine should I have with my fish?"). You're going to need every bit of passion and love for what you're doing to help you ride through these moments of frustration.

"You have to love what you do. Because let me tell you something ... doing what [we] do, sucks. Eighteen hours a day? [7 days a week?] ... It gets tough! But if you love it, you will win." - @garyvee

Developing in the Cloud, and on the Force.com platform in particular, is really fun and allows you to churn out some amazing stuff. But you will definitely be frustrated along the way, as you wrestle the learning curve. Love what you're doing, to get you through those frustrating moments. And then you'll be able to do it, ALL THE TIME.


Donate Your Talent to a Non-Profit
The philanthropy model at Salesforce.com is simply amazing. They have an organization, the Salesforce Foundation, which donates user licenses to qualified non-profit organizations all around the world. Developers have written custom applications specifically designed for these non-profits, to help them with volunteer management, donor management, membership / household tracking, and so much more.

With the help of Salesforce Foundation, these Non-Profits have the tools -- now they need you. to help with their deployments, customizations, and training.

If you're trying to break into the Force.com Development scene, consider donating some of your time to one of these Non-Profit organizations. They don't even have to be local! I'm located in New Hampshire, but I've been able to collaborate and design solutions for non-profit organizations in California, Texas and Colorado.

It's a great way to get some exposure working with the Force.com platorm, gain some references for future contracts, and do something wonderful for a worthy cause.

Later, after you become a wildly successful Force.com developer, I hope you'll come back to the Salesforce Foundation now and then. Donating just a small amount of your time (even just 1%) can make all the difference in the success of a non-profit organization!

Ready to get involved? Click here, or send an email to foundation@salesforce.com requesting more information.


Get On Twitter
If you don't know about Twitter, you have to get plugged in to it. Now! Twitter is a micro-blogging service, which I've talked about previously. It's very powerful, because it lets you tap in to a huge network of Salesforce.com Employees (Program Managers, Developers, Community Managers, etc.) as well as other Consultants, Salesforce Partners, ISVs, Customers, Power Users, Administrators and more.

I use TweetDeck to manage my Twitter communications. All the folks who tweet about Salesforce.com are in a TweetDeck group, so I can monitor their Twitter stream during the day more closely than all the other folks I'm following. Not a day passes that I don't learn something new from this talented group of people! Twitter is a fantastic learning tool. Use it to learn, use it to teach, but definitely use it.

I also have a TweetDeck Search filter set up for "SFDC", "Salesforce", and "Force.com". I use that filter to find new developers and Force.com evangelists to follow. It also gives me a chance to see the many Salesforce.com related job postings that companies and recruiters are posting on Twitter every day.

Get on Twitter, and open yourself to a whole new way of learning.


Plug In to the Developer Community
Salesforce.com has a tremendously strong developer community. Tap into it here: http://developer.force.com/

I've had a couple Salesforce.com Developers / Consultants contact me, and ask if I was able to pick up a contract for one of their clients. This happens when they are already fully loaded with projects, but don't want to turn their existing client away. The only way to be part of this network is to reach out and connect with the community.

Log on and participate in the message board forums. Learn from and/or help others. If you have a question or problem, put it in front of your peers in the community. For best results, include your code samples, as well as screenshots and images. Of course, it always helps to send out a Tweet, with a shortened URL link to your question on the Developer forums.

You'd be surprised at how helpful the community is. They'll help get your question answered and your project moving forward. Be sure to pay the community back, by looking at other questions that have been asked, for which you might have answers.


Connect on LinkedIn
There are a ton of LinkedIn User Groups out there, full of developers and technology experts on the Force.com platform. A lot of job opportunities get shared in those LinkedIn groups, as well. Update your LinkedIn profile, and get plugged in to these groups.





Get to Dreamforce
Dreamforce is the annual user conference and vendor expo, sponsored by Salesforce.com. It's 4+ days of powerful keynotes, roadmap discussions, break-out sessions, tech talk and more ... all centered around the Force.com Platform.

At Dreamforce you will meet other developers, make friends, and win clients. If developing on the Force.com platform is something you're at all interested in, this is a "must do" event. Get more details here: http://www.salesforce.com/dreamforce/DF09/


Bid on ODesk
Looking for some short-term contracts for your reference portfolio? Check out the Force.com Jobs Group at oDesk! "Whether you're a skilled developer looking for that next job, or a customer or partner wanting to find and hire developers to work on small integrations and freelance projects, this is the place to be."

Check it out: http://www.odesk.com/groups/salesforce


Contract Partners
In addition to oDesk, there is an entire industry designed around connecting Consultants and Freelance Developers with the Companies who need their services. If you're looking to pick up a few projects, to start building your customer reference portfolio, you may want to look into this more. A couple companies that I've heard mentioned regularly are:

- Hire On-Demand
- ForceBrain Salesforce Consultants

Check them out!


Develop Apps
Of course, you don't need to have existing clients. You can start working with the platform today. Developer accounts are free, and you can start building applications right away. Want a real challenge? Sign up for the Developer Challenge, and put your programming skills head to head with some of the best of the best!

Details here: http://blog.sforce.com/sforce/2009/07/announcing-the-forcecom-cloud-developer-challenge.html


Welcome to the Cloud and Good Luck!

Tuesday, June 30, 2009

Force Monkey, Inc. (?)

Over the past few months, I've been working with an increasing number of Salesforce.com developers and customers, helping them navigate complex CRM deployments on the Force.com platform. Despite the dismal economy, I'm busier than ever. In fact, I've been so consumed with an increasing number of projects, contracts and clients, that I've decided to incorporate my practice.

This isn't the first company I've founded. In my college, I started a small "business" with 6 close friends. It was a gaming company called LIONE Rampant, and we ran it quite successfully for seven years. As we grew older, finding girlfriends and wives, we decided we were getting too old for that "silly gaming stuff". We sold the company -- to some of our then-customers -- and went off to get "real jobs". These new owners, in turn, ran the company for seven years and sold it to some of their customers. It delights me to see that a business venture I created has "stood the test of time", and is still operating more than 20 years later, even if I'm not directly involved with the business. Not many companies can say that, gaming or otherwise.

I don't game any more (well, maybe a few FPS and MMO hours, here and there). Instead, I spend a lot of my time developing applications, helping companies get more from their technology investments, consulting on best practices for operational management, process improvement, and CRM deployments -- particularly on the Force.com platform. I've decided it's time to put more formality in my business practice.

I'm researching the the different legal structures, and trying to determine the best one for my practice: sole proprietorship, LLC, C-Corp or S-Corp. The business entity types are all familiar to me from long-ago days, when I was researching how I should incorporate LIONE Rampant. That company was founded as a C-Corporation, but I'm leaning toward an S-corporation for this current venture.

I reached out to my Twitter network, asking how they managed their own consulting / software development companies:



As always, they were helpful and eager to share.

Jeremy Ross (@jeremyross) operates his business as a C-corporation. That means his business is taxed at the corporate rate, and there is the risk of double taxation when paying out dividends to shareholders. Those can be minimized, but it seems like more overhead than I'm willing to adopt.

Scott Hemmeter (@arrowpointe) is the owner of ArrowPointe (http://sfdc.arrowpointe.com/). He's published several Force.com applications, making them available through the Salesforce AppExchange. He also provides consulting services on the Force.com platform. From our past conversations, I feel his business model is closely aligned to what I'm looking to do. Scott started as an LLC, but changed to an S-corporation, because it has some tax advantages over the LLC.

Uncle Sam considers LLC Owners to be self-employed, which means they must pay a 15.5% "self-employment tax". The entire net income of the business is subject to this tax. In an S-corporation, only the income that is paid to the "employees" is subject to the employment tax. Other income, paid to the owners as a distribution, is not taxed. I don't mind paying my "fair share", but if I can find a way to reduce my taxes, well, that's just more money I'll use to help stimulate the economy!

With an S-corporation, there is a bit more overhead: I'll have to form and work with a "board of directors", for starters. There are more record keeping rules to keep up with. I'm familiar with those burdens, having maintained the books and organized 7-years of LIONE Rampant BOD meetings. It sounds like a lot of work, but it's really not.

I've a bit more research ahead of me, and I'll probably talk with a CPA before I formally file this week. I must confess, I'm excited about the prospects of my new venture.

Are you managing your own consulting practice? I'm curious about your operations, and the legel business entity that you've adopted. Please share your comments below.

Monday, June 29, 2009

What's On Your Summer Reading List?

It's summer time, and I'll be spending a lot of time pool-side with the kids. Here's my summer reading list (many based on recommendations from you!):

  • Art of the Deal, The
  • Attitude 101, by John C. Maxwell
  • Cash Flow Quadrant
  • Covert Persuassion, by Kevin Hogan
  • Dog Eat Dog, and Vice Versa
  • Eat That Frog
  • Getting Things Done
  • How to Win Friends and Influence People, By Dale Carnegie
  • How to Talk to Anyone: 92 Little Tricks for Big Success in Relationships
  • No B.S. Time Management for Entrepreneurs
  • Presentation Zen, by Garr Reynolds
  • Selling the Invisible, by Harry Beckwith
  • Selling to Big Companies, by Jill Konrath
  • Richest Man in Babylon, The
  • The Millionaire Next Door
  • The Way to Wealth
  • What To Say When You Talk To Yourself
  • When I Say No I Feel Guilty
  • Think and Grow Rich
  • The Way of the Superior Man
  • Dan Kennedy's The Ultimate Sales Letter
  • CopyBlogger
  • The Psychology of Influence
  • How to Survive Office Politics
  • How to Climb the Corporate Ladder
  • How to CYA
  • Do It Now
  • Getting to Yes
  • Difficult Conversations
  • Never Eat Alone
  • Is That Your Hand in My Pocket

What are you reading?

Tuesday, June 9, 2009

It's really nothing personal, but I don't want to Stay-in-Touch



Do you have users that create contacts in Salesforce.com, but don't need the "Send Stay-in-Touch" pop-up messages?

Sales professionals and account teams may benefit from the "Send Stay-in-Touch" pop-up feature, because it prompts them to periodically check-in with their contacts and keep the contact information up-to-date.

However, other users groups in your organization may need the ability to create Contacts, but have no interest in the feature. Support teams, for instance, who might deal with customers on a "one-and-done" basis may need to create a contact to associate with their Case, but not need to do periodic follow-ups with that contact after the case is fully resolved.

The "Stay-in-Touch" pop-up feature is enabled by default across all profiles, but you can easily disable it in the User Profile (click to enlarge):

Sunday, June 7, 2009

Is it a Lead, Account, Opportunity or Contact?



Inspired by my recent Twitter conversation with New York Private Investigator, Michelle Pyan (aka @michelle_lpi)

I've worked with a few clients who, for various reasons, have a lot of trouble with Salesforce.com terminology. Often it's because Salesforce.com has roots in Salesforce Automation, and these users don't come from a traditional sales background.

That's the power of Salesforce. It's such a powerful platform, and it can be customized for any business, and just about any application.

Yet many new users stumble with the Salesforce terminology right out of the gate. They're eager to get started, to get their data added to Salesforce -- and get stuck asking, "Umm, is it a Lead, an Account, an Opportunity or a Contact?"

When explaining Salesforce.com to new users, I'll often use the fish model:

Lead = Something swimming in your favorite fishin' hole.
Contact = Fish.
Account = School of Fish.
Opportunity = Fishing rod.
Closed/Won Opportunity = Lunch.
Closed/Lost Opportunity = The one that got away.
Campaign = Planning and preparation for the big fishing trip.


Since the third grade, the fish is about the only thing I can draw that people will recognize it for being just that: a fish. As I describe these terms, I'll sketch them out on a whiteboard. The visual presentation delivers a lot of "Ah-ha!" moments, and users walk away with a clearer understanding of how to enter data into these standard Salesforce objects.

Do you encounter a similar struggle with your new Salesforce.com users? What tricks do you use to bring clarity on these terms?

Wednesday, June 3, 2009

Why Analytics Help



Lately, I've been getting a lot of requests to help organizations with data analytics and reporting aspects of their CRM solutions. I'm very encouraged by this, because it means companies are using their CRM for more than just managing customer relationships better. They are also using these tools to understand and improve their own business processes better!

A methodical analytics process is important, because it forces you to (1) define goals for your organization, (2) monitor and track performance against these goals, and (3) drive continuous process improvement based on objective, measurable results.

Let me share some of the results from the “Great Dashboard Clean-Up Project”, which I’ve talked about in past blogs.

On this project, I've worked with a number of cross-functional areas -- but this post will focus on work done with Support team. Our Customer Support organization receives high accolades from customers with respect to our response and handling of cases. It's really nice to get this unsolicited feedback from Customers, but the division manager wanted to track the teams’ performance with more objective data.

Together, we defined some Key Response Areas (KRA) for his team:

Time to Respond: After a Customer contacts us (through email, phone or web), how quickly does the support organization respond to that Customer?

Time to Restore: If the call is related to an operational issue or problem with our product “in the field”, how quickly does Support restore that equipment to full operational service?

Time to Resolve: How long does it take for the Support team to fully resolve (close) a Customer case?


We set goals for each of these KRA. This was very easy, as the organization already had internal, implied Service Level Agreements (SLA) documented. We simply “fine-tuned” the definition of those metrics, and published them to Customers:

Time to Respond
o Email / Web – contact and/or reply to Customer within 24 Hours
o Phone – if unable to answer immediately, call back within 15 minutes

Time to Restore
o Sev-1 (Critical Priority) Cases – Restore service within 4 hours
o Sev-2 (Urgent Priority) Cases – Restore service within 6 hours
o Sev-3 (Standard Priority) Cases – Restore service within 24 hours

Time to Resolve
o Sev-1 / Sev-2 Cases: Close within 7 days
o Sev-3 Cases: Close within 14 days


Here’s where things got a little tricky. While we had customized our Salesforce.com CRM system heavily to support our business needs, there was no customization centered around many of these SLA metrics. For instance, we could easily count the number of cases received from each Customer, and even identify how those cases originated (email, phone, web) -– but we had no fields tracking if phone calls were missed / returned within 15 minutes, or if email / web inquiries were responded to within 24 hours. We had Case-related fields tracking when a case was opened and closed, but for operational problems in the field, we had no date/time fields tracking when service was "restored".

Fortunately, Salesforce.com excels in this area. It was very easy to add some custom fields tracking all these SLA metrics. We also added some workflows and apex triggers that automatically populated the fields based on various conditions.



With these metrics in place, we created reports and dashboards to benchmark the Support Organization's current performance. We immediately saw that we were, in fact, doing very well across these metrics. Phone calls were answered (or callbacks returned) within 15 minutes 96% of the time. Email and web based cases were responded to within 24-hours 70% of the time. Operational issues were being restored and resolved within SLA almost 90% of the time. This all validated the compliments and feedback we had been receiving from Customers directly. But it was just the starting point for our project.

Now that we were measuring the data, we could easily zero in on the exception / failure cases. Why did we fail that SLA? What changes could we put in place to prevent us from failing in a similar way next time?

We’ve had this program in place since January, and the results (from our Support Operations SLA Dashboard) speak for themselves:



Across every metric, across every SLA, our Support Team has steadily and consistently improved in it's performance. All of this is through our CRM business analytics and service improvement program.

How about you? Are you getting the most from your CRM?

Tuesday, May 5, 2009

Force.com Sites



Have you seen the stuff that developers are building with Force.com Sites? Check it out by visiting the Sites Gallery: http://developer.force.com/sitesgallery

Force.com Sites is a new feature offered by Salesforce.com. It was announced at Dreamforce'08 (where Salesforce previewed the LincVolt website), and it remains in Developer Preview mode. Force.com Sites allows companies to build websites fully integrated with the custom databases and applications they've already deployed on the Force.com platform.

The site showcased in the image above, for instance, is GameCraze. It was developed by EDL Consulting, and won the category of "Best Visual Presentation" for the recent Force.com Sites Developer Challenge. It doesn't look anything like the Salesforce.com UI that you might know -- but it's running on the same technology.

Most impressively, the site was built in less than one week. Admittedly, it's only a shell, not a real video game website, but it is a great example of what a team of developers can quickly crank out using Salesforce. With a bit more work, the site could be integrated with the standard/custom Salesforce objects that track customers, suppliers, game store inventory, and online sales. The "Holy Grail" of integrating your front-end website with your back-end database is all built into the concept behind Force.com Sites.

Why is this so important? Think of all the headaches a company might normally go through to build their corporate website or intranet:

- purchasing, installing and configuring web servers, firewalls, database servers
- purchasing, installing, licensing backend databases
- purchasing and installing software applications for building and managing their web content
- annual maintenance fees for all of those things

If EDL had been designing the GameCraze site using traditional methods, the purchased hardware wouldn't even arrive in the time it took them to fully deploy this website on Force.com. Before they went public, their upfront costs would be in the tens of thousands of dollars, pushing back their ROI and break-even. But Force.com sites is "pay as you use", meaning they can build and deploy their web store very quickly, and with minimal up front costs.



Today, Sites is only available as a Developer Preview (the rest of us call that "Beta"). That's one of the reasons you see only a dozen or so sits currently showcased on the Sites Gallery. While many of these have been built by the design teams at Salesforce.com, I'm really looking forward to seeing what John Q. Publicy is currently building, and watching the Sites Gallery grow.

If you'd like to learn more, or even jump into the Customer pilot program, you can check out the Sites FAQ

Saturday, May 2, 2009

Why I Do This



A great many people have asked me why I blog, why I Twitter, why I Facebook, why I Flickr -- why I do any of it. My wife asked me that question as I sat down to write a blog entry one night. My boss asked after noticing TweetDeck running on my laptop. My Dad inferred the question when he commented that while doing some online ancestry research, my name was coming back again and again while his spider bot searched for the surname "Seabury". And truthfully, Dad answered the question without even asking it.

We live in the era of the Social Web. If you spend any amount of time doing contributing content to the web, then you have effectively created a digital identity. Every time you create or even reply to a blog post, add comments to a message forum, upload or mark a favorite video, interact on Twitter -- all of this information is stored, archived, indexed -- and therefore viewable to the public and subject to their interpretation.

Eight years ago, before blogging was trendy and when the web didn't have a "2.0" after it, an office mate jokingly had everyone Google their name. We sat around the same terminal, and watched as people typed their name and pulled up the search results. Many of us didn't have any results returned at all, others had a few links, but they were of other people with the same surname. When I typed my name, I was surprised - no shocked - at the return results.

The return results didn't just fill the page - they filled several pages. Mostly articles that I had written for our Customer Support center, which frankly I didn't realize were viewable to the outside world. I was, then, web-naive.

It's only been in the last few years that I've come to see Google for what it is: my online resume. I don't mean to be so possesive about it, but that's what it is. Everything I do on the web is now out there in the public domain.

It's important for me to be proactive in managing this tool, the internet, as a way of marketing myself. Not because I'm looking for a job today, but because I might be looking for a job some day (and the day you're looking for a job, it's kinda too late to start branding yourself).

There is a risk of putting so much of yourself "out there" on the web for others to see -- but with risk comes reward. My social media connections through Twitter, Facebook and this blog have been incredibly helpful to me. I've learned from them more than they've learned from me. I can get answers on technical questions from this network far faster than I can through traditional channels (support calls into understaffed support centers). I've been invited to speak at user conferences, been asked to join review boards, and have received unsolicited job offers -- all very flattering, but attributed entirely to the fact that I am "doing this".

The web is not just database of information buckets for you to search. It's not just your online news medium. The web is a tool for you to market yourself, brand yourself, and make your identity known by a far wider circle of influencers than you might be exposed to in your daily work and social life.

Don't shy away from it. Take advantage of it!

Tuesday, April 7, 2009

We Live in Exponential Times

My dad shared this YouTube video with me not long ago. It's a little dated (is MySpace even relevant anymore?), but I found it fascinating.



There is a lot of fear in our country right now. Uncertanity about the economy, uncertainty about the world, uncertainty about the future.

Let it go.

Yes, we live in exponential times. That simply means we have exponential opportunities ahead of us.

Stop thinking, "This is what is happening."

Start thinking, "This is what I am making happen." Then, go make things happen!

Thursday, April 2, 2009

Case Comment from Contact "Locks" Inline Editing on Case

We ran into an annoying little bug, and when we contacted Salesforce.com about it, they confirmed it is a known issue that occurs “sometimes”. Well, before we spent a couple hours chasing it, the bug had not been known to us. Here are the details, including several workarounds and a “fix”.

First, let’s describe how the problem appears to Salesforce.com Users. Your Customer Service Rep or other internal user opens a Case, and starts updating / changing fields using the Inline editing feature. When they save the record, they get an error message that the record was being updated by a Customer:



All of the edits they made to the case are lost, and they have to re-enter them.

As we look at the Case History, we see that the last Customer update was many hours ago.

In our configuration, Customers are able to create Cases through the Self-Service Portal, but they can’t actually edit them. So we were confused as to what was causing these Cases to get “locked” by the Customer contact. However, we did recently add a Case Comment Workflow, which changes the status of a Case from “Waiting on Customer” to “Investigating” whenever a Customer adds a case comment via the Self-Service Portal. This Workflow was added when Case Comment Workflows were introduced in XXX.

Here’s the workflow that we created:



When those filters are hit, a Workflow rule changes the parent Case.Status field from “Waiting on Customer” to “Investigating”.

Salesforce.com told us this behavior is seen “only occasionally”, although we found that we could reproduce the failure 100% of the time:

1.) Create a new Case, set the status to “Waiting on Customer”
2.) Login to Self-Service Portal. Add a Case Comment.

That’s it. At that point, the record is “locked” to inline editing. The first internal user to open the Case and attempt inline editing on any field will get the error message above.

Two Immediate Workarounds

1.) Use the Edit button instead of Inline editing. This wasn’t preferred by our users, since they’ve become very accustomed to the ease and use of the inline editor.
2.) Train your users to look for the “New Comments Have Been Added” bubble (see below) at the top of the case. If they see this icon, they should refresh the page in their browser before doing any inline editing. This refresh will clear the lock on inline editing.




A Better Way

The story would end here if it wasn’t for an interesting discussion I had with David Schach (of X2 on Demand fame: http://www.x2od.com). @dschach and I were chatting on Twitter the other day, then moved our conversation to the telephone (when 140-characters wasn’t enough to get our message across to each other). He was suggesting a solution to a different problem I had, but it turns out that idea has many applications – including a fix to this Inline Editing lock problem here.

The conversation was discussing a way to simulate Apex triggers on a Case Comment object. Recently, Salesforce.com added the ability to perform Workflows in Case Comments (which we took advantage of in the scenario above). However, there isn’t any method for directly adding an apex trigger on the Case Comment. Then Dave proposed this “Hacking a Case Comment Trigger” method.

@pauloveryjr and I tried it out with the usage case above. Rather than having a Case Comment Workflow rule that updates a parent Case, we can now have a Case Comment Workflow that sends an email to an “email-to-apex” application. In our tests, it works beautifully – it updates the parent Case.Status field without locking the record from inline editing.

It turns out this Case Comment Trigger Hack has a lot of uses! Until triggers are added to Case Comments, I think we'll be getting a lot of milage out of this technique. I'll document other use cases here on the blog. In the meanwhile, I hope this explains any peculiar inline editing locking behavior that you might have seen recently.

Tuesday, March 24, 2009

Adding an Anchored Logo to Your HTML Email Template

A friend and fellow Salesforce Geek wanted to know how she could insert a company logo as the header in an HTML email template, such that when the user clicked on the logo, their browser would navigate to her company's website. I tried to describe it in email, but I suspect not very well. I promised her I'd blog about it ... so here we are.


Disclaimer: As with most things in Salesforce, there are a dozen different ways to get from Point A to Point B. This is certainly not the only approach, just the first that popped into mind.

Let's do it by the numbers. First, I created a quick logo image:




Host the Logo Image

Store the logo image in a location where it can be accessed over the internet. For this exercise, I'm going to store the image on the Salesforce servers, under the Documents tab:

1.) Click the Documents Tab.



2.) Click the "Create New Folder" link (we're going to create a new folder to store email images)


3.) In the Document Folder Label field, type "_Images". Click tab and set the other fields to their defaults. Save.


NOTE: The underscore "_" character in front of the word "Images" is intentional. Folders sort in alphabetical order, and this will push your Images folder down to the bottom of the folder list. That's my personal preference, so that my Image folders don't get mixed in with my "real documents" folders.



4.) Now that you're in the "_Images" folder, click "New Document".


5.) Enter the logo name, unique name, description, and browse to the path where the image is located. Because we will be including this image on an external email template, set the "Externally Available Image" checkbox.



Creating the Email HTML Template

Now that the logo image is "hosted" in a public location, create the email HTML Template:

6.) Click Setup -> Email templates. Specify the folder (or create a new one), and click "New Template".


7.) Select the "Custom (without using Letterhead)" option. Click "Next".


8.) Set the "Available for Use" checkbox, give your new email template a name and fill in the description field.


9.) This sample HTML code starts with an anchored logo, then continues with the "form letter" that recipients can read:



<a href="http://forcemonkey.blogspot.com">
<img src="https://na3.salesforce.com/servlet/servlet.ImageServer?id=01550000000Nqqc&oid=00D500000007zyA"/>
</a>
<br>
<br>
Dear {!Contact.FirstName} ,<br>
<br>
Check out our new logo! Interested in the latest tips and tricks? Click the logo in the top left corner, and it will take you to our website!<br>
<br>
Best Regards,<br>
<br>
From the Force Monkey Troop


Let's rewind a little bit, to explain the HTML code:

The anchor tag, which starts with a href="http://.../" creates a link to the target website, referenced in the href arguement. In this case, I used the URL for this blug (http://forcemonkey.blogspot.com). Substitute your own target website after the href arg.

The image that we're wrapping the anchors around is specified in the img src="https://na3.salesforce..." tag. But what is that crazy long string after the "src" arg? That's the location where the image is stored on Salesforce servers.

To get this URL information for the logo you stored, do this (assumes you're on a PC):

1.) Click on the Documents tab

2.) Select your Logo image "document"

3.) Right click on the image. Click "Properties".



Copy the "Address URL" field to your text buffer. Be sure to capture the entire field, by holding the left mouse button down as you click from the left of the "https:" and drag the cursor downward until all characters of the field are highlighted. Press CTRL-C to copy to your text buffer.

4.) Open your email HTML template and press CTRL-V to paste it in the "src" arg of the img HTML tag.

Add the remaining HTML text for your email template, as necessary. Viola!

If the steps here are still just a little confusing, let me know -- I'll post a video blog of the whole process.

Tuesday, March 10, 2009

Support for Salesforce S-Controls To Be Discontinued


SOURCE: All credit to my information source: Sonny Cloward (@sonnycloward), Steve Anderson (@gokubi), David Schach (@dschach) and the Non-Profit Salesforce Salesforce Practioners Google Group.

Salesforce.com plans to discontinue support for S-Controls next year. The following warning announcement is displayed to Salesforce.com Administrators in the App Setup -> Develop -> S-Controls page:

"S-controls have been superseded by Visualforce pages. Salesforce will, sometime after January 2010, remove the ability to create and distribute new s-controls. Existing s-controls will be unaffected. For more information, see How Do Visualforce Pages Compare to S-Controls?."

The “end of life” date on S-Controls is a little vague, I suspect intentionally. Sometime after January 2010 could mean anytime that year, or any time in the following decade.

The announcement is problematic for some Developers. While VisualForce and Apex are great, there are certain governor limits of Apex that prohibit its use in every application. I have a couple S-Controls that I haven’t yet converted over to VF/Apex for this very reason. I have other S-Controls, admittedly, that I haven’t converted over for simply lack of time.

Note that existing S-Controls are unaffected. However, they can't be updated or distributed in packages after this EOL date. Developers must convert these S-Controls over to VisualForce pages. VisualForce allows developers to write javascript and HTML directly into their VisualForce pages, so it should be possible to simply copy / paste existing S-Controls into a VisualForce page. That means this end-of-life shouldn’t be much of an issue to most savvy Salesforce Developers.

On the other hand, I find that a lot of Customers don’t have in-house developer expertise. Their S-Controls are either part of an application they downloaded from the AppExchange, or were developed by a contractor. If you don’t have developers in-house, don’t panic! You’ve got plenty of time to inventory your S-Controls over the next few months. Evaluate these components. Are they crucial to your application? Are they likely to require change / updates? If yes, invest the time now into learning VisualForce (so you can convert them yourself) or contact your certified Salesforce.com partner / contractor / consultant.

Have any questions? Reply below!

Sunday, January 25, 2009

The Great Dashboard Clean-Up: Roles, Data Owners and Key Result Areas


In the previous blog entry, I commented on the problem: the Salesforce Dashboards I had deployed were not driving change in the organization. At least not to my level of satisfaction. From my vantage point, everyone was looking at the data, talking about the data, admiring the data -- but I didn't feel we were learning anything from the data. I wanted our Salesforce Dashboards to do more -- to influence changes in our business practices.

None of this implies that we aren't already running a highly effective organization -- because we are. Our product (SAFARI C3, a VOIP Media Switching System) crushes the competition with incredible performance numbers -- 99.999% uptime last month, and 99.996% overall for 2008. Our Customer Response Team wildly exceeds our competitors in number of categories: response time, restore time, resolve time, and Customer satisfaction. Despite our success, we do have areas were we can improve -- all organizations do. And that's what I wanted our Dashboards to focus attention on.

Step One: Identify the Roles of Your Target Audience
Identify who is using Salesforce.com and Dashboards in your organization. Group them by role. At my company, Cedar Point Communications, we've embraced CRM fully, so I have users from many different roles in the tool every single day: the Executive Team, Sales, Marketing, Customer Support, Account Management, Partner Management, Field Services, Project Management, Manufacturing, Software Engineering, Hardware Engineering, Technical Documentation, and Product Training.

Phew! That's a lot of different user groups!

For each department, I assigned a Data Owner -- usually the department/division manager, or someone they specifically assigned to work with me. Next, I had a group meeting with all of the data owners to outline the project objectives. I then scheduled follow-up one-on-one meetings with each of them individually.


Step Two: Define Key Result Areas for each Role
At the 1:1 meetings, I asked each Data Owner what their Key Result Areas (KRA) were -- what were they hired to accomplish?

From Brian Tracy's Blog:

Each job can be broken down into about five to seven key result areas, seldom more. These are the results that you absolutely, positively have to get to fulfill your responsibilities and make your maximum contribution to your organization. Your failure to perform in a critical result area of your work can lead to failure at your job. There is essential knowledge and skill that you must have for your job. These demands are constantly changing. There are core competencies that you have developed that make it possible for you to do your job in the first place. But there are always key results that are central to your work and which determine your success or failure in your job.

A key result area is defined as something for which you are completely responsible. This means that if you don't do it, it doesn't get done. A key result area is an activity that is under your control. It is an output of your work that becomes an input or a contributing factor to the work of others.


With Dashboards focused around KRA, business unit managers would be able to see, at a glance, how their teams were performing. Each Role / Dashboard Owner would see where their team excelled and what areas needed more attention. The goal was to create Dashboards that influenced process changes within the organization.

Next blog post -- we'll start with the Customer Support team.

Thursday, January 15, 2009

The Great Dashboard Clean-up Project



Ok, I’ll admit it: I created a monster. This post is my confessional, and also my pledge to atone.

Very early in our implementation of Salesforce.com, I wanted to show the power of Dashboards to my users. I downloaded the AppExchange Dashboard Pack 1.0. The application is free, and installs all of the many dashboards published by Salesforce Labs. The package had dashboards for every conceivable use: lead flow, marketing campaign metrics, sales forecasting, support KPI, sales / support rep performance tracking, document tab tracking, user adoption, data quality analytics … everything.

I downloaded the app, did a little tweaking (very little), and then published the dashboards to my users. When Summer’08 Release gave us the ability to email dashboards (as an HTML page) directly to users, I enabled that functionality for a few key managers and user groups, too.

Soon after, I saw copies of dashboards distributed at various meetings and screenshots of dashboard components included in PowerPoint presentations. Managers and executives looked forward to their daily, weekly and/or monthly Dashboard emails, and talked animatedly about them in the halls or at company meetings. I felt good.

Yet something was wrong. I couldn’t quite place my finger on what it was, but the monster was there, elusive. The users asked for more dashboards, more pretty graphs, charts, tables, and I appeased them. Today, we have more than 50 different dashboards and hundreds of reports feeding those dashboards. It's an absolute glut of information. And this monster I created now has a name: Data Admiration.

They come to the CRM tool, very excited about the volumes of data and information captured in our Salesforce Dashboards. They drink deep from the kool-aid. But none of these dashboards seem to drive any real change in the organization. Why not?

Reflecting on that question during my morning commute, I realized it's not the people, it's not the tool ... it's the dashboards. Those original dashboards that I pulled down from the AppExchange were developed as a proof-of-concept, a way of showing report and dashboard writers all of the graphical components and different techniques for using them. They were a learning tool, but I had implemented them as a business solution. And that’s the root of the problem. I have dashboards, but no real business intelligence architected behind them. The dashboards are colorful, they certainly detail a ton of information, but they aren’t oriented around the specific business intelligence needs of my user communities.

Understanding a problem is the first step in dealing with it! I chatted about the problem with the Big Cheese, and got the green light to focus on a complete overhaul of our existing dashboards. In the next few posts, I’ll walk through the process of this Great Dashboard Clean-up Project. Stay tuned!

How about you? How did you implement your Salesforce Dashboards? Are they telling you everything you need to know about your business / organization? We’d love to hear your comments!

Wednesday, January 7, 2009

No, Chicken Little, the (SaaS) sky is not falling



Yesterday there was a Salesforce.com outage that lasted somewhere between 30-40 minutes. In the 24-hours since that time, the blogosphere has been filled with various pundits spreading doom and gloom, saying this outage proves Cloud Computing is not a prudent business decision.

Sorry, Chicken Little, the SaaS sky is not falling. Cloud computing is here to stay. If anything, yesterday's outage is proof to me how much better off we are running our business in the clouds.

When the Salesforce.com outage started, dozens of IT engineers jumped into action, working to first isolate the problem and correct it. In the aftermath, today and for the rest of the week, dozens of technical teams will be working to understand what went wrong, how it went wrong, and what they can do to prevent it from happening again.

The best part? None of those people are on my company's payroll. It's a good thing -- I couldn't afford that many IT and support staff. Yet I am very thankful that they're on my "cloud", helping me run my business. I wouldn't be able to administer such an incredible CRM tool without their help.

When the outage started, I didn't call Salesforce.com; I saw that several folks on Twitter had already done so. I sent out an internal email telling colleagues "we are aware of the problem with Salesforce.com, and have people working on it right now." Yep, I had people working on it!

I switched our Support team over to our Salesforce Offline Viewer. It's a custom PHP application accessing a SQL server database that we designed several months ago. Through the Salesforce API, we update the SQL database every 24-hours with a complete copy of all transactions we've entered into Salesforce.com. The GUI isn't as pretty as Salesforce, but it contains all the data they need: Cases, Solutions, Contacts, Accounts, and various custom objects.

I then set up a "Salesforce" Twitter search on my TweetDeck, sat back, and watched for news that people were able to finally log in. I've never had to spend less resources and manpower managing a crisis.

This 40-minute service outage was a blip. Let me tell you about another recent outage at my company, this one not related to the services we have running in the Cloud.

A few weeks ago, we had a little ice storm here on the east coast. It knocked out phone lines and electrical power for hundreds of thousands of New England residents. Our company lost power for 4-days. The backup generator lasted for about 10 hours, and then it went offline, too. Everything was down: telephone service, electrical power, heat.

Employees couldn't communicate with each other over Blackberry or email, because the Outlook exchange server was down. Customers couldn't access our corporate website. All of our critical IT systems are redundant, with a co-lo on a completely separate power grid. Even that didn't help us, as this storm had knocked out both power grids (yes, we're moving the co-lo further away -- and let me tell you that is a huge project in itself!).

Every member of our IT and support staff began round the clock shifts, working to get our back-up generators back online, contacting utility vendors and facility managers, shutting down servers and equipment to protect from power spikes, etc. It was exhausting!

The one aspect of our business that was unaffected? Salesforce.com. We were able to communicate outwardly to customers via Salesforce. That allowed us to send a Mass Email to all Customers, providing them with alternate contact numbers for accessing our Customer Support staff. We modified the home page layout, to include status updates for all employees logging in to Salesforce from home.

The sales team, 90% of whom are remote, were able to conduct business as usual. After we altered the call routing for our main support phone #, the entire customer support team was able to work from home, too. They had full access to Cases, Solutions, and other information they use in Salesforce -- as if they were in the office.

The four-day service outage was seamless to our Customers, thanks to the Cloud. Thanks to Salesforce.com.

I compare these two outages -- especially the manpower and resources that went into restoring service fully and I know that Cloud Computing is the right model for our CRM service.

Perhaps all these blogging pundits have Cracker Jack IT teams, allowing all their in-house systems to operate with 99.999% up-time. If so, I hope they give special thanks to each and every member of their IT staff, and maybe a nice fat bonus at the end of the year.

Me? I work in a place called reality. And even though my company has the very best of IT folks, they are resource constrained. They do capacity planning, integration testing, and constant tuning of our many complex business systems. But Salesforce's IT team is bigger, and comparing the availability numbers between our in-house and cloud-based systems just wouldn't be fair.

So cheer up, Chicken Little, you've got people.