Saturday, February 28, 2009

XML Notepad: It just works

Up until this week, when I needed to hack an XML.Config or Sitemap file, I pulled out WordPad and went to town. After CRM complained about the file not being valid for a couple of goes I normally figured out where I'd gone wrong and all was good.

I thought there had to be a better way so I googled for xml editors and up popped XML Notepad.

It just works. If you have to mess about shuffling bits of XML around, it does the job nicely. revisited. Still an overvalued stock?

Back in September I reviewed some of the financial measures behind . See here for details:

Then in October I predicted the stock would hit the twenties from $58 the month before and $36.50 at the time of the post. See here:

So with Salesforce releasing their results for 2008, I thought it would be time to revisit.

Still worth a bottle of beer?
In October I asserted the stock was worth the price of a bottle of beer ($3.55). So what about now? Well I've revised my estimate up to, at best, $10 but this is still a lot below its current level of $28. Why the low valuation? Read on.

P/E Ratio
By my calculations, the P/E of Salesforce is running at around 100. This means if you invest $1, it will take, at the current performance levels, 100 years to double your money. Ouch. Short of a big turnaround in profitability, this isn't going to improve any time soon unless the stock goes cheaper.

Tangible Book Value
To their credit, Salesforce has increase the tangible book value per share. This is a measure of how much you'd get if Salesforce did a fire sale, based on the selling of their assets. The value has gone from $3.55 to $4.88 . Still well below the share price of $28

Revenue Growth
Finally we saw that billion dollar revenue we had been hearing about for so long. Well done Salesforce. However,  with a good economy and few rivals in the SaaS space, Salesforce manages to slow its revenue growth down by 10% each year and 2008 was no exception. The series as per my September post was (2005-2008) 84%, 76%, 60%, 51%. And their latest revenue growth figure? 44%. Nothing changing here. 2010 should give us growth in the 30s at best and I'm thinking maybe in the 20s now that Dynamics CRM is in the space and engaged in a price war and the economy is so poor. 

As per my September post, Salesforce consistently has single digit pre-tax margins. That is, they make less than 10% profit on sales. The latest result? 6%, the same as the previous year and actually a bit less if we look a few decimal places in. Nothing remarkable here and certainly no big turnaround needed to bring the P/E ratio to sane levels.

Free Cash Flow still in the negatives and a little worse than the previous year. Cash is king. No cash, no business.

Sustainable Growth
This has increased, based on the latest numbers to around 11% but still far short of their actual revenue growth so more borrowing or share issues will be in order.

A lot of the praise for Salesforce regarding their latest results focuses on their revenue growth. Revenue is not everything and their ability to generate profitability and cash is not improving significantly. For every dollar in increased revenue, costs are increasing at the same rate. Don't expect this stock to leap up any time soon and I think it will still continue its journey towards $20 and perhaps go past.

Tuesday, February 24, 2009

Sacking Unprofitable Customers and CRM

An emerging paradigm in the business management world is that of sacking unprofitable customers and on the surface it makes sense. If I have a customer who costs me more in non-chargeable action than they do in chargeable action then in keeping them I'm losing money.

However, I get nervous with this view. Here are a few reasons why:

How are you measuring your costs?
A typical example of an unprofitable customer is they buy small value items and then absorb lots of time getting support from the helpdesk, tantamount to training. On the surface, this customer is unprofitable. They bought an item for, say, $1000 and every month they take an hour of the helpdesk's time as new users phone up to get help on using the product. Whatever value we put on the hourly rate of the support staff member, the maths doesn't look good.

And therein lies the flaw. If you are going to use cost allocation arguments to justify the 'value' of a client, make sure the allocation makes sense. Ultimately cost allocation is an accountant's trick to generate a number for the profitability of a component of a business; in this case, the customer. A fundamental assumption of most cost allocation models employed is the business is running at full capacity.

Its absolutely true that the helpdesk function costs money to run. However, if I have one customer call one day and two the next, my helpdesk costs are the same but the one customer does not cost twice as much to service as the two that called the next day.

In other words, if the helpdesk has capacity, why not help a struggling client? It will generate a lot more goodwill with the client than playing minesweeper. Of course if the business is looking to reduce costs by downsizing the helpdesk, then sacking the squeakiest wheels makes sense as this will reduce demand on the helpdesk staff, as long as it is done correctly.

Word of Mouth and Rising Stars
There are companies that screen incoming calls, determine the 'value' of the client through questions and if it is too low, route them to a low priority queue. The idea being that the 'low value' client will either go onto the internet (a low cost alternative) or go somewhere else.

If our helpdesk is close to capacity, we obviously want to service our profitable clients (assuming we have a valid measure for such a thing) to retain them and if we happen to lose a few less profitable ones along the way, so be it.

The problem I see here is twofold. First of all, a 'costly' client today may not be costly in the future. In our previous example, the staff, who often phone up the helpdesk for assistance may, after a time, become intimate with the product and strong advocates, internally promoting the purchase of new versions or add-on accessories.

They will go onto forums, their blog, twitter etc. and sing the praises of the product's functionality (which, in reality, is probably no different to the competitor's but they just know how to use it) and they will also move onto other companies and encourage them to use the same product.

By pushing people into long queues or onto often poorly designed support web pages with poorly designed knowledge base search engines, client adoption suffers and no one will sing the praises of the excellent post-sales support or product functionality. If you are going to try and make a customer more 'profitable' make sure the methods you use and the experience of the customer do not reflect poorly on the business. Otherwise, word of mouth suffers, customer upskilling suffers and a client who is a dog today will never become the star they could have been.

Don't get me wrong, I've known plenty of 'tire kickers' in my time and I still have a few lurking around but if I have the capacity to assist them or direct them to useful information, it costs me nothing more and there is the chance they will either promote me to others or engage with me later down the track.

Routing customers to long queues is disrespectful and offensive but offering an excellent support site with an intelligent layout and functioning knowledge base search engine or wiki is an excellent way to service customers at a reduced cost. Even better, offer up a forum where customers can interact with each other and support themselves. Not only will the customers get access to a vast body of knowledge, you get frank and honest opinions on your products and where they can be improved.

When is a Good Time to Cull and How to do it?
A great time to cull is when you are over capacity in servicing clients. At this point you have two options; either increase supply or reduce demand. Increasing supply, in most cases, means growing the business. Reducing demand essentially means getting rid of clients.

In my case, I currently work for myself. My goal is to obtain 40 hours of billable work each week. Let's say we were not living in tough economic times and I was finding it very easy to pick up 80 hours of work a week if I chose. What should I do? I don't want to work 16 hours a day and if I hire someone else to pick up the additional work (growing the business) I have the worries of salaries, government red tape and, in my opinion, the most important aspect, reputation management. If I screw up, I only have myself to blame, if someone else screws up, I might not be to blame but it is my reputation that gets damaged.

So my strategy would be to reduce demand. The simplest way to do this is to raise prices and there is nothing wrong with doing it. For some reason people attach a stigma for charging more for a desirable service. I know many businesses that, despite inflation eating into their bottom line, refuse to put up prices even modestly out of fear of a mass exodus of their customer base.

Another option would be to reduce your service offering to the most profitable services. In doing this, you must be absolutely sure removing one service will not damage another. A classic example is the grocery store that refused to meet the demands of a large soft drink company and subsequently refused to stock their product on their shelves. What they realised after the fact was that people were not interested in shopping there unless they carried that particular soft drink. The store may have had thousands of products but in removing just one, they compromised the sales of all the others.

If you are planning to reduce your service offering, look after those customers left out in the cold. Find someone who can meet their needs who have a good reputation. Nothing is louder than a disgruntled customer with an internet connection.

How Do you Ensure you Don't Obtain Unprofitable Customers to Begin With?
Obviously this depends on how customers are generated in your business but in the case of a sales team, make sure the incentives drive the behaviour you're after. If you are rewarding your sales team for bringing in new customers, of course they are going to cast their nets far and wide. If you reward them based on an increasing commission rate, based on the size of a given deal, not only will the salesforce go for larger customers, they will also encourage smaller customers to bundle orders together.

In short, be smart and think about how you would 'work the incentives' if you were in your employees' shoes. This also applies to support staff. If you are rewarding for the shortest calls possible, your staff will pick up and hang up on every second call to reduce their average call times. If your support staff are there to generate satisfied customers, ensure their incentives drive this behaviour. Being hung up on three times in a row (its happened to me) does not give me a warm fuzzy feeling about the company I'm trying to talk to.

Where Does CRM Fit in All of This?
The profitability of a customer is determined by their requirement for chargeable and unchargeable action in regards to your company. An accounting system generally only considers the chargeable actions i.e. goods purchased, service plans obtained etc. but it does not measure the unchargeable sales visits, support call volumes etc.

Most CRM systems have three primary modules:
  • Marketing (the activities performed to generate demand)
  • Sales (the activities performed to generate sales)
  • Support (the activities performed to keep customers satisfied post-sale)
These three modules cover a good fraction of the effort undertaken by a company in obtaining customers, selling to customers and maintaining customer satisfaction. If set up correctly, the chargeable and non-chargeable activities can easily be separated out and compared. While I am sceptical that the full costs of a customer can be accurately measured, given a company is rarely running at capacity, if any system can do it, it is the CRM system and certainly a correctly configured CRM system will be able to tell you the customers who are likely to be less profitable than the others in terms of the ratio of chargeable and non-chargeable time allocated to them.

More importantly, it will show you the nature of the activities they are undertaking. With this information, you can look to change their behaviour in a respectful way and make then profitable. alternatively you may find that the reason for their activities is a fundamental problem with your business. This article on Sprint's 'firing' of 1000 customers highlights the point.

Putting customers into little boxes of profitability is a complex and potentially dangerous activity. If you feel it is appropriate, make sure you have as much information as possible on your customers and their interactions with your business, as can be provided by a CRM system. Otherwise you could end up being the most efficiently run business in the world; one with no customers.

Monday, February 23, 2009

Push and Pull Marketing, CRM and Social Networking

What is Push and Pull Marketing?

Marketers often talk in terms of 'Push Marketing' and 'Pull Marketing' when describing their marketing communication. For the rest of us this is what they are talking about:

To summarize, if we think of a cola manufacturer who sells their product through independent cafes, if I give the cafes a larger margin on each can of cola, the cafe will 'push' the product more. If I do a promotion where every can of cola has a chance to win $10,000 and promote this on bill boards etc. the customer will demand the cola from the cafe.

So, at a really high level, 'Push Marketing' is where the seller tries to convince the customer to buy the product whereas 'Pull Marketing' is where the customer tries to convince the seller to sell the product to them.

The distinction gets murkier when there is no intermediate distributor as any direct conversation with the customer will have push and pull elements. For example:

Salesperson: If you buy today, you get 50% off (push in that the seller is trying to convince, although conventionally defined as pull as it has a 'call to action' for the customer)
Customer: I definitely need one but it has to be white. I need you to sell me one in white at the same discount (pull)
Salesperson: OK I'll sell you one in white at the discount, if you also buy a second one at the same price (push/pull)
Customer: Deal

CRM as a Push Marketing Tool

CRM systems are primarily built for push marketing. Here is why.

The traditional foundation of CRM systems is Sales Force Automation (SFA). That is, it manages the activities of the sales folk and the resulting sales opportunities generated therein. As time passed, CRM systems incorporated Marketing and Support modules. Generally the marketing module is focused around mass communication (mail merges) to the contacts in the CRM system and the support module was there to allow the support staff to manage their activities in regards to resolving customer issues once the sales team had sold a product to a customer.

The big problem with this is the CRM system is focused on who the individual users immediately speak with. In our cola example, the sales folk speak to the cafes. They populate the database with cafe contacts. The marketing team, if they are to use the contacts in the system, will be focused on push marketing, as defined above. There is nothing stopping the marketers engaging in pull marketing but the CRM system is going to be of limited help except in maybe managing high-level costs and activities. 

Support users are more interesting. In the case above, the support team, presumably would be speaking primarily to cafe owners but it is equally possible that they would speak primarily with customers, depending on the type of business. For example, in the case of a whitegoods manufacturer, the people phoning them up could well be the end user rather than the department store.

The support users will therefore be populating CRM with either the same cafe contacts we already have or end users who have already purchased and had reason to call the support desk. There is the possibility of pull marketing here as the marketers could target the end users in the CRM system the support staff have entered but it is also fair to assume that the most satisfied end users and therefore those most likely to be upsold to would be those that have not contacted support to resolve an issue and are unreachable through the CRM system. 

We could market to the 'unknowables' as a whole, but this is the antithesis of CRM where the relationship is king.

How Can We Make CRM Systems More 'Pull Friendly'?

Traditionally, it would have been very hard to achieve this. The body of unknowable end users would be difficult to access without a distributor giving up their customer lists. While this is possible it involves all sorts of privacy and logistical implications.

However, in the new world end user buyers advertise the fact on the internet all the time and communicating with them directly or indirectly could not be easier. In a world of forums, blogs, twitters, facebook groups and so on we not only have individuals telling us what they have bought, their thoughts on it and what they would like to buy next, they also cluster together to share thoughts making them an even easier target.

These conversations, interactions and clusterings is what Brent Leary refers to as 'Social CRM': has started to get the idea on how to tap this with their service cloud:

but this is merely support-focused, not sales-focused.

Imagine the potential of tapping into all the conversations going on regarding your product. 
  • Who is 'product-curious'? 
  • How to improve it? 
  • What products work well with it? 
  • What the next generation of it should contain? 
Imagine doing the same for your competitors products. Its all out there but requires effort to sift through, manage and interact with.

CRM needs to be able to tap this limitless supply of information, present it to users in a palatable format and allow them to interact with it. By my thinking, a good place to start would be with products. Using the products as a 'hook' the CRM system could fish for all related conversations and relationships. A nice tree view of conversations of various forms could then be presented to the user. Additional key words could then refine further depending on the requirement and eventually the user could trawl through, looking for gold.

Only when CRM is managing and interacting with both the conversations had by contacts directly with the organisation and those had without the organisation will CRM be truly managing customer relationships.

Thursday, February 19, 2009

Doing a 'null' search in CRM

One of the shortcomings of Advanced Find in Dynamics CRM is the inability to do a 'null' search. What I mean by this is the ability to pose a query like 'show me all accounts which have never had a phone call created for them'. If we were asking 'show me all accounts with  a phone call due this week' we have no problems but asking CRM to return records where related records don't exist simply can't be done.

Here are a few simple workarounds to this issue.

Using Workflow
You can get around this, relatively simply, using workflow. Let us take the example above. First of all create a bit field on the account form to store whether there has been a phone call created or not. Now all we have to do is create a workflow that triggers on the creation of a phone call activity and updates the account field we've created.

We now have a field we can search on to tell us whether a phone has ever been created and therefore if the account has ever had a phone call created against it.

In the case where we want to know whether or not there are phone calls in progress, we would need to resort to a counter to keep track of all the phone calls added/removed/completed. For details on this see the following post:

As with the counter, you will need to consider all events that could meet your criteria and whether you can capture them through workflow.

Using Excel (method 1)
It is easy to export all the accounts from CRM into Excel. It is also easy to export all accounts linked to an activity via the activity's regarding field where a compulsory field, such as when it was created contains data and where the activity is a phone call.

We now have a list of all accounts and all accounts with a phone call against them. Using a vlookup we can easily compare one list to the other and find the gaps. If you're being really fancy, export the two lists out as dynamic worksheets, combine them into one workbook, add in your vlookup filter and then all you have to do is open up the Excel file to get the results.

Using Excel (method 2)
When you export to Excel as a Dynamic Worksheet you can modify the query Excel uses. See here for details

In this case you'd modify the SQL query to do what Advanced Find cannot, that is return accounts with no phone calls attached. Again this can be saved and opened at will.

Using SRS Reports
Although a bit of overkill in my opinion, you could create a report to bring back the information you need. Personally I'd use one of the Excel methods above and add this in as a report if I was thinking of going down this route but the option of an SRS report is open to you.

Notifying Users of Events in CRM

A common requirement for a CRM systems is to notify various users of circumstances or events in the CRM system. For example, if a salesperson gives a substantial discount to a customer, the head of sales may want to know about it or if a support issue has been outstanding for a number of days, the head of the support center may want to escalate the issue.

Dynamics CRM provides a number of ways to do this. Three common ones are:
  • Creating an activity / sending an email via workflow
  • Populating a view for a user to periodically review
  • User generated reports (or reports periodically sent to a user via email) and dynamic Excel reports
With the CRM Accelerators, we also have another way to notify users, through an RSS feed ( Essentially the RSS feed is linked to a CRM view and passes the contents of the view directly to an Outlook folder.

The choice of method depends on a number of factors, some of which I'll highlight below.

Volume of Notifications
If a lot of events are going to trigger a notification, some methods are better than others. For example, the sales manager may want to know the new accounts or contacts that have been created in the system in the past week. Depending on user activity this has the potential to run into hundreds.

Obviously an email or task for each account creation would be a bad idea. No one wants their inbox or reminder window cluttered with hundreds of messages simply passing on the fact that CRM has a new account. The problem could be mitigated with Outlook rules in the case of email and with a registry hack in the case of Outlook activities ( but it would be better to deal with the issue at the source from a manageability perspective. In this case the other notification 'channels' provide a better option. A view could be created for the manager to review as he desires or a report could be generated for him to review as desired or that could be sent weekly showing the results for the past seven days.

The RSS feed may not be a good option given the nature of RSS feeds. RSS adds entries but cannot delete entries. Therefore, in the example above, as time goes on, the contacts created more than a week ago will not disappear from the list.

While views and reports are great for distilling large amounts of information in a digestible format, there is no guarantee a user will log on and view either in a timely manner. Sometimes information needs to be communicated to a user as quickly as possible. 

A common example for this are for service level agreements (SLAs). If a company guarantees that a customer service representative will call a customer back about their issue within 24 hours of it being raised, it can be costly if there is not a way to let someone know that a specific issue has been outstanding for almost a day.

Any notification method that requires a user to 'pull' the information i.e. perform a series of actions to access the information at a time of their choosing, is no good in time-critical situations and a 'push' method is needed. In this case, email and RSS are great choices as they feed the information to the right user almost immediately. Activities synchronizing down to Outlook could also be used but we are generally trained to action emails before tasks and appointments.

Richness of content
CRM systems contain a lot of information. Sometimes you need to sift through literally thousands of pieces of information to see the big picture (see for an example of extracting intelligent information from large data sources). A common CRM example of this is in reviewing products in high or low demand or in seeing if specific product lines cause more support issues than others. Not only can a company have thousands of products, the CRM system may also be storing thousands of sales opportunities and thousands of support cases.

Most CRM notification methods are quite poor at this. CRM views cannot show aggregate data i.e. counts or sums of records, and therefore neither can RSS feeds. They are also limited in their ability to convert data into graphical formats. Emails and activities generally communicate information about just one record in CRM and are also therefore limited in their capacity to communicate rich information to a user.

The best option here are reports. Both SRS reports and Excel exports provide the ability to aggregate large amounts of CRM data into useful and insightful information to guide the business. For details on using Excel for reporting go here:

Simplicity of Generation and Maintenance
This often overlooked consideration for CRM customization is equally important when considering the notification channels that the system is going to employ. Sometimes a user is not sure what they want to know about but they want to be able to put it in place quickly when it becomes clear. Similarly sometimes notifications are a 'work in progress' and need frequent adjustment.

An example of this is workplace monitoring. Often managers, empowered with a new CRM system, feel the urge to monitor their employees every step of the way. Soon they realise they are receiving a lot of information for little gain and want to reduce the monitoring.

If it is clear from the outset that a notification or a particular set of notifications are overkill or going to need frequent adjustment it is ethical to ensure the ease with which this can be done is considered. A consultant should be paid for adding value to a business, not for solving problems of their own creation.

In this case empowering the user to define and adjust their own notifications is the best option, if practical. Therefore, views and RSS are a great choice.
Notifications are a common component to a CRM system. Rather than employing a 'one size fits all' approach, consider the strengths and weaknesses of the options available to you and your customers will thank you for it. Better yet, educate your customers on the options and let them be part of the process on how the system will talk to them. The relationship between the user and CRM is at least as important as the relationships CRM is there to manage.

Wednesday, February 18, 2009

The Awesome Power of Network Analysis

While CRM technology is a wonderful thing which, if its set up right, lets salespeople manage their days more efficiently and effectively, lets managers get a better picture of their operations and lets customers be treated at least consistently, there is a point where the users of a CRM system ask themselves a very simple question:

"So what are we going to do with all this information we're now capturing?"

In fact this question can be thrown at most modern business application tools. The obvious answer is Business Intelligence, a fancy way of saying business report generation. This post is about a powerful but still underutilised technique that falls into this camp called 'Network Analysis' or more specifically 'Link Analysis'. Here is the wikipedia article for those interested.

The only industries I know of that have used link analysis to its full effect are government intelligence agencies and pharmaceutical marketing companies. Essentially the method consists of looking at interactions between people and concluding information in regards to those interactions. For example, if I'm a drug company that wants to promote my latest drug to the medical community, I can either send information to every doctor in the phone book or I can work out which ones are the ones the other doctors go to for information and just send them the details. Similarly, if I am a government intelligence agency trying to disrupt communication in an organised crime ring, if I can find out the people who everyone else go to for information, knock those people out and suddenly no one is talking.

So what relevance does this have to CRM given the lack of drugs or criminal activity involved in the average implementation? Lots!

In a CRM system we capture email interactions, company hierarchies, company-company relationships, salesperson-contact relationships and so on. All of these are fair game.

For example, a customer could be playing two salespeople off each other. Such activity can easily be picked up with this technique. You may want to know who customers go to or other members of staff go to when they need to know something. Again, this can easily be discovered and while some of these things could be determined with an intelligently crafted query to the database, you can go further to ask things such as which support staff consistently work together to solve customer issues?

So lets see an example. First of all, I recommend downloading NodeXL from codeplex.

This is an Excel 2007 template which allows the magic to happen (apologies to the 2003 folk).

You can import your own data from another workbook (spreadsheet), such as one exported out of CRM, use Outlook as the source or even point the spreadsheet to twitter. Essentially you need to populate the Vertex 1 and Vertex 2 columns in the Edges workbook to make it work. When you have your data in there, press the 'Read Workbook' button on the right-hand pane and a graph will appear. You can change the layout type to something that makes sense and if it is too cluttered, you can use the 'Tie Strength' column to weed out the weaker links (the higher the tie strength, the stronger the link).

My plan was to use the CRM VPC demo for the data source for this blog but the data is so sparse in it that there is really no point, so I pointed the spreadsheet towards my Outlook pst and after filtering the tie strength to a manageable level I got the following.

So what are we looking at? Well basically the little dots (vertices) are email addresses and the links and emails sent to or from those email addresses. So the big spot in the middle is my current email address. Other big vertices represent things like work email addresses, close friends, work colleagues and so on. Through literally thousands of emails, the graph quickly shows us the important people in my life. 

Similarly, collaborations are quickly shown as triangles/quadrilaterals etc. In this graph, they are typically of the type (employee 1, employee 2, client) or (employee 1, client stakeholder 1, client stakeholder 2). All excellent information to know when re-engaging with a customer to determine who will likely want to be 'in' on the project.

Finally, the arrow directions tell us the flow of information i.e. who was sending the emails to whom. For the main spot in the middle, the links above the spot are typically newsletters and the links below are typically one-way communication ranging from my wife's work email address (she is not allowed to send personal emails from work) through to unsubscribe requests.

CRM is all about communication and the management of that communication. Network/link analysis allows us to divine information about those communications not readily discernible through other methods. Download NodeXL and have a play one afternoon and I guarantee you'll think of half a dozen different uses for it in your business before the siren sounds.

Leon's Quick and Dirty Workflow Counter

Ask anyone who has played with Dynamics CRM 4.0 for a while how to show the total number of subrecords against a parent (for example total number of calls/contacts/closed meetings etc.) and they will tell you to go scripting.

Being adverse to scripting of any kind I thought I'd have a play and to this end I present my record counter using only workflows (two of them in fact).

So let's say we want to count the number of contacts against an account. First of all we need a place to store this counter, so we create an attribute against the account. We can set this to be a number or a date, both witll work, although we get more flexibility with numbers.

Now, we need to initialise the attribute, so our first workflow gets triggered on the account creation and sets the counter field to something that makes sense i.e. 0

Now we need to increment the counter when a contact gets added, so we add a second workflow against contact creation which updates the Parent Customer (Account) and using the dynamic value form assistant on the right of the form we set the value of the counter to one more than its current value. For number fields, you have the option of incrementing/decrementing or multiplying through the Dynamic Value Form Assistant in the workflow update form.

And there you have it, a counter which will count the number of contacts added to an account. Obviously if you were to use this, you'd need to capture more events than just contact creation as contacts can be reparented etc. but you get the idea. The decrementing may come in handy for situations where you are, for example, counting the total number of active calls against an account and decrementing when a call is closed.

You could also use this for scoring accounts or contacts if you use such techniques. For example, if an account gets 10 points for every closed-won opportunity against them. Perhaps they lose 10 points for every closed-lost opportunity against them etc.

I recently used this to create 12 monthly appointments, one being scheduled immediately after the previous one is completed. The counter worked nicely to determine when to stop the appointments from being created.