Tuesday, 25 December 2012

CRM 3.0 Performance Story

CRM 3.0 Performance Story

Microsoft CRM V3 was designed with performance in mind. We dedicated significant resource bandwidth and timeline to ensure that we tackle performance issues early and reliably. We laid out a performance plan during the engineering cycle, followed it closely, reviewed it frequently, revised it as and when necessary and adhered to it as part of our overall release criteria. In this blog, I will highlight some of the key aspects of this plan.

Performance Plan
With previous version of our product, we had a few known areas for improvement therefore our performance plan required dedicated attention to these areas. However that alone wasn’t sufficient, we needed to ensure that we could reliably measure key performance indicators and ensure that we don’t falter as product goes through engineering cycle. We also wanted to make sure that our partners and customers could benefit from our investments and plan their deployments with reliable performance characteristics.

With these broad goals in mind, we incorporated following elements to our overall performance plan.

  1. Depth Test – Address known problem areas
  2. Breadth Test – Establish a repeatable performance benchmark
  3. Stress Test – Identify and address product limits under stress
  4. Performance Toolkit – Leverage in-house work to help our partners & customers plan their deployments
Depth tests included targeted projects that addressed well established product areas where performance was a suspect and where key team members – program manager, developer(s) and tester(s) had targeted on-going investigations. A key element of the revised performance plan was to incorporate a breadth element – A CRM Performance Benchmark that exercised product features against a well known configuration and that provided results with-in acceptable degree of variance each time. The benchmark would allow us to measure product performance repeatedly, build over build and ensure that our performance did not worsen with any code changes.

The benchmark also would allow us to put product in severe conditions (low memory, high transaction rates, large databases, low network bandwidth….) and identify its limits.

We wanted to make sure that our performance investments were not adhoc but strategic that we could use ourselves in future releases and that we could share with our partners and customers so that they can plan their deployments with predictable and reliable performance characteristics.

The Benchmark
We set out to build a performance benchmark that reflected not only our product features but also how we envision our customers using our product on a regular basis. We engaged a third-party with expertise in performance benchmarking to help us establish such a benchmark. The end result was a measurement model that included following elements.

  1. Real world scenarios
  2. Organization profiles for test data-set and transaction rates
  3. Target response times and acceptance criteria

To model real world usage, we profiled our users in to various personas from Business Executives such as VP of Sales/Marketing who is primarily interested in reports; Sales / Marketing / Support Professionals who is working with Accounts & Contacts on various day-to-day activities; Receptionist who is primarily dealing with appointments; Administrator who is updating settings, customizing product etc… To identify scenarios we incorporated third party research data (partially gathered from our existing customers and partially from industry research) and we engaged each of our product feature area engineering unit team to estimate usage of their newly identified features and validate third party research data. As a result we had a collection of scenarios that had usage statistics across all personas.

A scenario consisted of end to end operation such as create an opportunity – that involved navigating to leads, opening a lead, updating the lead, converting it to an opportunity, updating it, attaching a note to it and saving it. Each discrete operation was identified as individual web test. Thus scenarios consisted of one or more web tests and they shared common web tests such as navigating to a page, looking up a particular record, etc…

We profiled our organizations and broadly classified them in three categories – small business customers who purchase our Small Business Server Edition and have very small concurrent user base (10 or less), medium size businesses who have 100 or so concurrent users and departments in large organizations who have 1000 or so concurrent users. We specified distinct deployment topology for each organization profile (a single small business server for the first, a dedicated CRM Server, dedicated SQL Server for the second and high-end SQL Server (64-bit edition) for the third). We also built the data set for our scenarios that provided depth of data that was realistic. For example an Account had to have a few contacts, a few activities, notes and account hierarchy (sub accounts, parent accounts…). Our performance test team built data population tools that could generate the random data samples as well as the depth based on specifications in an XML file (more details later in how you benefit section).

We set target response times for the scenarios (i.e. for each of the individual web test with-in the scenario) and were mindful of organization profiles, their transaction rates and the hardware topology. As the tests ran from build to build and the observed response times were not expected to be identical each time (network, I/O, number of times each web tests ran etc as contributing factors for the variance), we specified acceptance band that allowed a small degree of variance as below.

  • Green – 10% variance or 1 second absolute value
  • Yellow – 50% variance or 5 second absolute value
  • Red – anything worse than yellow
With all necessary elements in place, we had a credible benchmark that all we had to do was to implement and put it in regular use.

Putting it all together
We experimented with performance and load simulation tools that we could use. An important aspect of our overall performance plan was to make sure that we could allow our partners and customers to reuse our work for their own configurations therefore an expensive off the shelf performance tool was ruled out. We looked in-house for available tools and found the Visual Studio Performance Tool to be a good starting point. Our test team had already built great data generation tools (tool also accommodated time element for appointments so that service scheduling scenarios had resources with pre-existing appointments in their calendars far more in number in near future than in distant – much like our real life work calendars). Our test team then diligently implemented all the web tests to mimick our scenarios. We brought scenarios on-line in groups first simple web tests, then we incorporated Outlook Client synchronization (simulated at the server), we then brought in reporting, service scheduling, marketing automation, bulk imports, workflow… Slowly and slowly we had entire benchmark online. We encountered issues for sure. Each time we hit a snag, we had corresponding feature team engaged closely. Reporting feature team, Service Scheduling feature team, Marketing Automation feature team, Workflow feature team all had their fair share of woos when we brought all these elements together and much to their credit, they identified and resolved issues timely and across feature boundaries to keep the benchmark up and running.

We published results on weekly basis and had the team excited about making the lights go green. Below is the screenshot of the actual report we published before the release of the product where we ran over 100 tests and most passing in green band.


Scenario (Test Script)
Goals
Build 5289
Build 5294
Build 5300
AccountActivityRollup
2000
897
3144
2602
… 
CreateEmail
10000
2677
8862
7492
CreateList
3000
228
377
408
DeleteContact
50000
1117
28313
7430
… 
DisplayAppointments
20000
9871
14301
17727
SalesHistoryReport
30000
0
29309
11192
SalesPipelineReport
30000
2609
21235
8201
SearchAvailability
10000
3352
0
12299
SyncToOutlook:DoPrepareSync
30000
11977
24837
22434
SyncToOutlook:SyncItemByTypeForContact
10000
712
728
900
SyncToOutlook:SyncItemByTypeForTask
10000
189801
4486
5679

How you benefit?
We have already released the performance toolkit. You can download it and start customizing it for your topology and project usage. For example you may choose to have lighter or heavier data set than we used in our benchmark. You may choose to alter the transaction rates and frequencies for different web tests. This allows you to model the environment to your taste. In our case, we chose to model Sales, Service, and Marketing activities evenly but your organization may be sales or service centric and therefore may choose transaction rates accordingly. With appropriate scenarios, their frequencies and dataset in hand, you can next determine your target hardware and run the tests to see the response times. With new generation of hardware machines you can enable/disable processors to see if a dual proc would suffice or you would rather have a quad proc. You can do the same to identify the optimal memory size.

Carrying over the work in future
We started the performance work as a planned milestone in V3 and therefore went through early fits and starts. It took us a while to get all elements – the plan itself, the scenarios, the tools, the reporting etc… in place. As we start building next generation of our product, we have incorporated this process in our engineering milestones. With V3, we have laid a good foundation that we continue to use and refine further. We are in the process of improving our benchmark to incorporate new scenarios, identify new topologies and workloads. We are improving our tools. Our product team is excited and fully on board with getting us all green builds.

Customization Prefix

Many people often forget to set the Customization Prefix when they customize CRM. When you create new entities and attributes CRM automatically creates tables and columns for you in its SQL Server database. It adds the Prefix to the names of those tables and attributes. CRM’s Web Services and underlying platform also uses these ‘schema names’ when referring to entities and attributes. The Prefix is designed to ensure a level of uniqueness amongst customizations and to help System Administrators understand the source of a customization. I highly recommend that all customers and partners set the Prefix of their CRM systems to something unique (like an abbreviation of their company name).

To set the prefix simple navigation to Settings > Organization Settings > System Settings. Then in the customization tab there is a single text box allowing you to set the Prefix.

Related Entity Data in Excel Spreadsheet

Related Entity Data in Excel Spreadsheet

The grids in Microsoft CRM 3.0 don’t have related entity information.  You can’t for example look at a list of opportunities and see the account rating or account territory of the opportunity’s potential customer on the same row. 

With the export to dynamic Excel feature in 3.0, you can actually edit the spreadsheet query in Excel and bring in information from related entities.

Here is an example.  Say you want to analyze your open opportunities by account territory.  Navigate to Sales > Opportunities > Open Opportunities in Microsoft CRM 3.0 and click on export to Excel button on the grid toolbar.  That will bring up the following dialog, choose Dynamic Worksheet.

Open the Excel spreadsheet (choose “Enable Automatic Refresh”). Now right click on the data and choose Edit Query:

Click OK to this dialog and then OK again to the dialog afterwards.


That should bring you to the Microsoft Query editor.  Now click on the SQL button on the toolbar to bring up the SQL statement editor.

Notice that you can modify the SQL statement to bring in more data into the spreadsheet.  So for example, to bring in the Account Territory information of the Potential Customer, edit the SQL to be the following:

SELECT         opportunity.name as 'name',
opportunity.estimatedvalue as 'estimatedvalue', opportunity.estimatedclosedate as 'estimatedclosedate',
opportunity.customeridname as 'customeridname',
opportunity.opportunityid as 'opportunityid',
account.territoryidname as 'territory'
FROM             FilteredOpportunity as opportunity JOIN FilteredAccount as account
ON opportunity.accountid = account.accountid
WHERE          (opportunity.statecode = 0)
ORDER BY   opportunity.name asc

Click OK and OK again to the dialog that pops up.  You should now see the added account territory column (territoryidname) in the query editor:

Now click on the Return Data button which will return you to your spreadsheet.  Note that you will also get the opportunityid column appearing which isn’t there before.  Feel free to delete this column and label the territoryidname column in the spreadsheet.  The result should look something like this:


Now you’re ready to analyze your opportunities by the territory of the potential customer.  For example, the following chart created from the data in the spreadsheet shows how much estimated revenue is in each of the sales territories:


(Here I created a pivot chart on top of the data in the spreadsheet list).

Monday, 24 December 2012

Simple Sales Process

Simple Sales Process

Scenario

Bikes Corp has implemented MSCRM 3.0 in order to ensure profitable customer relationships and happy customers. Bikes Corp. sells all kind of bikes to institutional buyers like government, schools etc. Charlie is the owner of the business. Kevin is the sales manager and Nancy is the super salesperson.

Business Process

Bikes Corp has implemented the following sales process:

Step1 à Assign all bigger than 5 million dollars opportunities to Kevin and all remaining opportunities to Nancy.

Step2 à Automatically apply the following sales methodology to each new opportunity:
           
First Stage: The owner of the opportunity makes a phone call to the customer to gather requirements and buying intent. At this time probability of sale is expected to be 25%. All activities for first stage need to be completed within 2 days.

Middle Stage: The owner of the opportunity submits an RFP to the customer. At this time the probability of sales is expected to be 50%. All activities for middle stage need to be completed within 5 days.

Final Stage: The owner of the opportunity closes the deal. At this time the probability of sale is expected to be 75%. All activities for final stage need to be completed within 5 days.

Opportunity Closed: The owner of the opportunity logs the deal into the system. At this time the probability of sale is expected to be 100%. All activities for this stage need to be completed within 1 day.

It should be noted that the opportunity might be lost in middle of any of the sales stages specified above. In that case, the salesperson closes the opportunity as lost. That pushes the opportunity out of sales pipeline.

Step 3 à Notify the opportunity owner each time a new opportunity is assigned to them.

Step 4 à Notify the task owner each time a new task related to the opportunity is assigned to them.

Step 5 à Charlie wants to ensure that things happen on time and owner’s manager is notified each time an activity is not completed by due date.

Workflow Configuration à

Please download the salesprocess_v1.zip file. Unzip it on your machine and follow the instructions in readme.txt.

Ensure that the following workflows are activated:

  • Step 1 à Opportunity Assignment (opportunity entity, workflow rule)
  • Step 2 à Sales Methodology (opportunity entity, sales process)
  • Step 3 à Assignment Notification (opportunity entity, workflow rule)
  • Step 4 à Task Assignment Notification (task entity, workflow rule)
  • Step 5 à Incomplete Task Escalation (task entity, workflow rule)

Process Visibility à

MSCRM 3.0 UI makes the sales process related information available to people in the following manner:

Status of an opportunity à
Click “Sales” on main menu and select “Opportunities” in left navigation pane. A list of opportunities shows up in the right pane. Select the opportunity of interest and double click on it. The opportunity form opens up. Click on the “sales process” tab in left navigation bar. The sales process shows up as follows:
 
Sales Pipeline Report à
Click “Sales” on main menu and select “Opportunities” in left navigation pane. A list of opportunities shows up in the right pane. In the right pane click on reports icon and choose sales pipeline report. The sales pipeline report shows up as follows:
 

NOTE

·        The sales process described above is for illustrative purposes only. Sample rule example in the attached zip file can be extended to address more sophisticated business requirements using MSCRM 3.0 Workflow Manager.
·        The rules related to notification/ assignment and escalation are shown for opportunities. Similar rules can be created for other entities (e.g. – leads, cases etc.) as well by following the examples in the attached zip file.
·        It is recommended that you test the workflow rules in a test environment before you put it in production.

Why You Should be Using Leads

Why You Should be Using Leads

The CRM Lead entity is a transactional style entity which contains individual, organizational and sales pipeline information. One of the advantages of combining these three types of record into a single entity is: de-normalization (ie. All the table is together in one ‘flat’ table – like a single Excel sheet). The advantages of this approach are simple: It’s super easy to import an excel spreadsheet of leads into CRM and sales process efficiency.

The Import advantage is obvious: take a sheet of leads from an event/survey/promotion etc and upload into CRM.  It’s critical that ordinary users can conduct this import without worrying about complex data relationships (eg. Accounts/Contacts/Opportunities). If you have to send your leads to a data analyst to upload then you run the serious risk of lead ‘aging’. CRM’s lead upload functionality is essentially ‘idiot proof’ and I highly recommend to CRM administrators to open it up to their sales staff or at least their sales managers.

The process efficiency advantage is more interesting in my opinion. By keeping the lead entity extremely simple it is much easier for sales qualification teams (eg. Telesales) to work these records.  By not having to worry about full scale Contact, Account and Opportunity records you can quickly sort through the leads to find those which have real potential. In most sales cycles the most drastic ‘drop off’ occurs during lead qualification. This is an area where CRM Customizers need to avoid the temptation to overcomplicate things. The easier it is for leads to be created, uploaded and worked the more likely it is for sales people to participate in the leads process.

The leads entity does contain Personally Identifiable Information (names, emails etc). Many companies are becoming increasingly concerned about the management of such sensitive data (from big data warehouses to Access databases stored on desktops). Consider making lead data anonymous after your qualification process is complete (ie. After the lead has been converted or closed). Over on my personal blog I’ve posted a sample CRM Workflow Rule to manage such a process:  http://www.philiprichardson.org/blog/post.aspx?id=30 

CRM Content Alert for Sandbox

CRM Content Alert for Sandbox

Lets discuss about a feature we have in our Microsoft CRM Sandbox so that those of you who haven’t discovered it, will be able to leverage this capability of the Sandbox to your benefit.

What’s Microsoft CRM Sandbox?

It is a GotDotNet project created for Microsoft CRM users to share knowledge with other Microsoft CRM administrators, customizers, users and developers.

Here you’ll find unique downloads that you can only get here, posted by members of the site which includes members of Microsoft CRM Team! You’ll also find a well managed message board where members of the community share information plus an array of other useful functionalities.



What feature am I introducting today?
The “New Content Alert” feature on the Sandbox. See highlight below:

What does it do?
1.        We, the Microsoft CRM Team, will post to this message board whenever there is new content pertaining to Microsoft CRM.
2.        By subscribing to the topic of interest to you (i.e. you want to know whenever a new whitepaper is released for MS CRM), you’d receive email alerts.
3.        That way, you will ALWAYS be up to date on the LATEST information and updates for Microsoft Dynamics CRM!

Where is it?
1.        Go to http://codegallery.gotdotnet.com/crm
2.        If you scroll all the way down, you’d see in the box labeled “Messages”, a list of all the message boards we have.
3.        Announcements New Content” is the one we want.

What do I need to do?
1.        You’ll see several threads on that page (i.e. Downloads, Marketing, Whitepapers)

2.        Click on the topic that you’d like to be alerted about.
3.        Click Subscribe.
4.        You’re DONE!
5.        Now sit back, relax and get ready to receive alerts.

Navigation in Outlook Made Easy

Navigation in Outlook Made Easy

In my last post, I showed you how you could personalize the Workplace. The Workplace is also configurable for the Outlook client, though perhaps doesn’t organize as nicely, since we rely on the Outlook folder structure to provide the navigation. Quite simply, the alphabetization of the folders doesn’t always yield the most desired organization.
One way around this is to use Outlook Favorites (in v. 2003). As you can see below, I’ve added Accounts, Contacts, and the Workplace folders to my Favorite Folders list.


To add items to the Outlook favorites you can right click on the desired folder and choose “Add to Favorite Folders”. You can also drag and drop to add, as well as organize the Favorites. A few additions here will save you a good deal of clicking and scrolling of the folder list.

Another possible route is Shortcuts.

But as a general observation, in Outlook 2003, these tend to be out of sight, and so out of mind.

There you go, two ways to save a click or three!

It's your Workplace - Personalize it!

It's your Workplace - Personalize it!


In my last post, I introduced the new navigation model in 3.0 and the Workplace concept. Let’s take a look at how you can personalize your navigation experience in the browser client:

 

At the bottom of the navigation area of the Workplace, there is a “Personalize Workspace…” link providing access the “Workplace” settings in the Personal Options dialog (also available from Tools/Options). When you click this link, you’ll see:


From this dialog, the user can select additional groupings of CRM application pages as they apply to their role or job function. For example, clicking Sales, adds a “Sales” group to the Workplace with Marketing Lists, Leads, Opportunities, Quotes, Orders, and Invoices.


In a way, it’s like favorites or shortcuts, where the initial set of “favorites” are selectable from a set of options that can be configured to match the organization’s roles and desired application usage patterns. In a future posting, we’ll detail the inner workings and how your system admin can customize these groupings and the entire navigation pane in general. But, for now, let’s stick to end user personalization of the out of box options.  

One more note: The “New Record” menu button on the toolbar is tied to this configuration. The records that appear in the New Record button are filtered to the records that are listed in your Workplace.

Why blog about this? Well it’s been my observation that users don’t personalize their Workplace. I’ve observed them jumping back and forth between the Workplace and Sales areas, when a few clicks of the mouse could bring the relevant pages into the Workplace… Why not? Some admit to not having noticed the “Personalize…” link.

Why not just have a “Personalize your CRM experience” when you start CRM for the very first time? Maybe this would be a good idea – we had something like this spec’ed out, which certainly would have addressed the discoverability issue, but it found itself on the cutting room floor. In retrospect, I wonder if it would have been better to have all of the groups selected by default and let users turn off the clutter if they wanted…

Why didn’t we just build favorites? First of all, the concepts aren’t mutually exclusive. Perhaps we’ll add favorites in a future release. Second, favorites are valuable, but can be a bit tricky to get right in terms of ease of use and the manageability experience. And third, in Outlook you have Favorites…

There you have it. It’s Your Workplace: Personalize It!

Saturday, 22 December 2012

Microsoft CRM's Navigation UI

Microsoft CRM's Navigation UI

The New Navigation UI
Did you notice that we redesigned the navigation model for V3.0? I’ll bet you did. In 3.0, we adopted the ever popular Outlook style navigation pane (a.k.a. the Wunderbar).

Today, I’d like to introduce the Workplace concept and describe how it fits into our overall navigation model. The focus of this post is primarily the browser client. We’ll talk about navigation in Outlook another time.

A History Detour
In earlier versions of CRM, the primary navigation was presented in a navigation bar at the bottom of the application window – it looked at bit like the Windows Taskbar.


This bottom navigation bar, grouped the application functionality into top level areas. Secondary navigation was presented in a left hand pane, where you find the “pages” of the application (e.g. Accounts, Contacts, Activities, and so on). As we started to add functionality to the system, it became very apparent that there were some real shortcomings in this design. In addition to a series of structural and organization problems, it came down to aesthetics: too many items in the navigation bar looked bad.

We looked at a lot of design alternatives before finally settling on the Outlook style navigation pane. This is a good design approach for a variety of reasons, not the least being familiarity. More than this, it places all of the navigation elements in a single column, eliminating the awkwardness of the bottom, then side, then top flow of user interaction.

Ok, simple enough? Well, we weren’t quite satisfied with a simple lipstick fix -- as we considered the redesign, we looked to our user research studies of existing CRM customers; some findings emerged:
  • Users work in a limited number of places
  • There are a lot of pages that specific users don’t need – they’re clutter
  • Users in different roles use different parts of the application (perhaps, stating the obvious).  
From these, the concept of a single Workplace was born.

A Workplace Tailored to Your Needs…
The vision for the Workplace:
  • Provide a role based collection of the relevant work areas
  • Provide the user direct entry points into the parts of the CRM application that user needs to access frequently
  • Increase discoverability of areas,
  • Eliminate unnecessary clutter in the left navigation.

How does it work? Out of the box, there are two groupings in the Workplace: “My Work” and “Customers”. These are “built in” groups that all users receive by default. In addition, the user can personalize the Workplace by selecting additional groupings of CRM application pages that apply to their role or job function.

Wrapping it up
The Workplace in a nutshell:
  • Role based: Organized around your work
  • Provides direct entry points into work
  • Increases discoverability of main areas
  • Allows getting to important places fast