Sonoma Partners Microsoft CRM and Salesforce Blog

MSCRM Database Maintenance and Configuration Tips Checklist

Today's blog post was written by Rob Jasinksi, Principal Developer at Sonoma Partners.

If you are running Microsoft Dynamics CRM On-Premise, you also have to maintain and support the database that it uses. In this post, I have put together a list of some basic best practice tips that you should consider for your local CRM databases.

MSCRM uses a database for each organization plus a general configuration database that all organizations share. The naming conventions are generally [OrgName]_MSCRM for the organization database plus MSCRM_CONFIG for the configuration database. This article will focus on the organization database, but the same tips and best practices can also be applied to the configuration database.

Configuration Tips

  • Have the database data files (mdf) and log files (ldf) on separate disks or volumes. Both files are heavily used during normal CRM use and having the files on separate disks will spread the disk I/O across both disks, giving better overall performance.

  • Change the database auto grow feature to a higher value from its default of 1MB. Growing a database can be I/O intensive and you want to avoid it when possible, especially during business hours. I usually use a value of 256MB so this happens less frequently. But if your database grows faster or slower, this value can be adjusted higher or lower. Another option is to turn off auto grow and schedule it to run only when needed and during off hours. However this requires monitoring and if you forget, the database will fill up and CRM will cease to function normally or not at all.

Rob jas 1

  • For the organizations strictly used for development (non-production) purposes, consider changing the recovery model to Simple. This won’t keep a history of transactions and avoid having the transaction log grow and fill up the entire disk. Since data is constantly flowing in and being deleted to re-test the log can fill up fast. For most development environments, usually daily full or differential backups are sufficient for most organizations (unless there is a specific reason not to, for example, to match production).

Rob jas 2

Maintenance Tips Checklist

  • Make sure regular backups are being done. This sounds pretty basic, but after installing CRM, it’s possible that no one actually setup a daily backup plan. You can check this by right clicking on the database and choose Reports -> Standard Reports -> Backup and Restore Events.

  • Defragment or rebuild the indexes on a regular basis. Over time as data is added, updated, and deleted from CRM this will cause the underlying indexes to become fragmented over time. This can cause performance issues and only get worse over time. You can see if your indexes need to be maintained by right clicking on the database and choose Reports -> Standard Reports -> Index Physical Statistics. This will generate a report listing every index in the database. The column on the right will display a recommendation if the index needs to be rebuilt or reorganized. If you see a lot of these, it’s time to defragment those indexes.

  • Make sure you run CHECKDB against the database on a regular basis. This will check the consistency of the database and find any problems that need to be looked at. It’s better to find any problems early rather later after it grows to the point where the database won’t even start anymore. In that case, you may have to restore from the last backup. Note: only non-data loss CHECKDB operations are supported by CRM.

  • Check the size of your database files and the amount of disk space you have left on a regular interval. I have seen many cases where a database continues to grow until it fills up the entire disk and cannot grow anymore. Resolving this issue can be time consuming and your system will be down the entire time, so better to catch early and fix.

  • Look for any table growing out of control in size, it may indicate a more serious problem in your CRM. It’s common to see some tables, like AuditBase and Activity[Pointer/Party]Base to grow large. But if you see the contact table growing to a million records and you think you should only have 50,000 contacts, it may indicate that many duplicates have made their way into the system and something that should be investigated as to how they got in there and how to clean them up. To get a report of large tables, right click the database and choose Reports -> Standard Reports -> Disk Usage By Top Tables.

Hopefully these tips will help keep your CRM database in top condition and perform at its best. If I get any feedback below to dive into specific topics in this post in more detail, I might write that up as a separate post later.

Topics: Microsoft Dynamics 365

Accelerate Your Dynamics 365 to Power BI Analytics Path

Today's blog post was written by Keith Mescha, Principal Architect at Sonoma Partners.

If you have tried to connect to your Dynamics 365 org via the OData API feed through Power BI, you probably struggled to make sense of how to build something useful from that experience. I’m sure you have read all the blogs out there suggesting the solution of syncing the data down to a SQL database and building your reports from there. It is often a decent solution but requires additional setup, configuration, licensing, and gets beyond the abilities of many Dynamics Admins. We do support that approach and have delivered several solutions using this method including for our own reporting needs. However, we also felt there is a need for a better, quicker option for customers.

To that end, we sat down and designed an accelerator for Dynamics to make this a reality.

Why is this a better option?

  1. You can use existing Dynamics system or personal views to auto create Power BI Queries. We don’t limit you to this as you can also augment those with other fields, but they serve as good starting point. Not sure what you need in your report, use advanced find get close and save that as a view and then build that out more later as you go.

  2. Options sets and lookup values are automatically mapped for you in the query. When hitting the OData API by default, you get the integer values and GUIDs of options sets and related records. This requires a lot of additional work to relink related tables and values which is tedious work that is hard to maintain over time. With this tool, we do that mapping for you based on the Dynamics configuration.

  3. All fields are renamed to the labels as you have defined them in your Dynamics configuration. This cuts down on a bunch of work typically required when pulling in data other ways as schema names are what usually comes over. No more typos or copy paste errors, and the reports you build will have the same field names as users see in Dynamics on forms and views.

  4. Also is using the well-documented FetchXML queries options in the WebAPI you are limited to the 5,000 record limit to you queries. Well we have written some sweet M code to overcome that limit paging. Best of all you can deploy this to the PowerBI Service and schedule updates of your data so you are not limited to just PowerBI Desktop.

*Currently this solution will work in PowerBI Desktop for Online and on Prem IFD enabled Dynamics orgs. However, if you deploy your pbix file to the Online PowerBI Service you will only be able to schedule data refreshes if you have a Dynamics 365 Online Org.

Overall the main goal here is to let you work in Power BI building cool charts and analysis to solve your challenging business problems and less time plumbing and wrangling your data into Power BI from Dynamics.

Here is a quick walkthrough of what this solution provides.

Once you install our managed solution into your org you can access the tool via the solutions area of Dynamics.

Keith 1

Upon launch, you can pick any entity and any view saved against that entity. In this example, we are using the out of the box Active Accounts view. After selecting that view I can chose additional attributes or even select the “All Attributes” option and pull all fields. I will caution that the more you pull, the slower and harder your data will be to work with in Power BI so the best practice is to be as selective as you can in building out a query.

Keith 2

One you have all the attributes you need you can click the Generate button.

Keith 3

At this point we present to you a screen where you can copy queries to the Power BI desktop application. The first item is the URL for the API of the org you are in. Be diligent with the version at the end of the query. Dynamics 365 is going to be V8.2. This serves as the anchor for other queries and should be created first in Power BI as other queries will rely on this.

Keith 4

Copy this URL into a Blank query in Power BI desktop and rename that query “CRMServiceUrl”. Casing is important here so be sure to make sure it’s put in exactly as seen here.

Keith 5

On the Accelerator page hit the Next button to move onto the next query which is the main data query for the Account view we selected. As you can see here there is quite a bit going on. What this step is doing is generating a FetchXML query using an OData Query against the WebAPI. This is returned to us as a JSON document which we use the M language of Power BI to parse into a table and then rename all the fields to the Labels as you have defined in your org configuration. Finally returning that into usable data set, essentially doing all the heavy lifting of pulling your data out of Dynamics for you so you can focus on building reports.

Keith 6

Paste that query into Power BI as another blank query and rename it “Accounts.”  Notice that this query is referencing the URL we created in our first data set.

Keith 7

This point you should have a valid data set with fields that match your labels on the entity as setup in Dynamics. You will need to follow the auth prompts and login to your org to refresh the data.

Keith 8

You can build whatever reports you need at this stage in Power BI. If you want to pull other related data from Dynamics, you can do that and model the relationships in Power BI as needed.

Keith 9

Here I have created a simple chart counting the number of accounts by City. I then deploy that solution to My Workspace on At this point I can go into my deployed data set and schedule a refresh for my data.

Keith 10

From here I can enter credentials for my org. Note that the data refresh will use that account when making the calls to the API so if be sure to use an account that has the rights to read all the data.

Keith 11

Choose Oauth2 as the Authentication method, which from we have found is only currently available with Online orgs. We have tried on IFD enabled orgs and do not get the Oauth2 prompt to allow us to configure the refresh. You will be prompted to enter your credentials on a few other pages not show here. After this step is complete your data will start refreshing on the schedule you set.

Keith 12

You can check the Refresh history from the dataset area in

Keith 13

From here you can keep on building out additional queries by using our solution then copying those queries into your Power BI desktop file. After you make changes deploy them to the Power BI Service for use in dashboards.

We have made this Dynamics Managed Solution available on our website for you to try out.

*Please make sure that you have downloaded and are always using the latest version of Power BI Desktop when using this solution.

If you'd like to view this in solution in action, you can watch our demo video here.

We are happy to assist in your BI projects and have a team of data professionals ready to assist you as you extend your Dynamics system to other O365 offerings like Power BI.

Topics: Analytics Microsoft Dynamics 365

Form Script Wars: Revenge of the Events

Today's blog post was written by William Dibbern, Principal Developer at Sonoma Partners.

A long time ago, in a Dynamics 365 environment not that far away...

An odd bug in a client's pre-existing codebase popped up recently where we found that the same event handler was firing twice occasionally. An easy to digest scenario to replicate this would be if every time the phone number field changed, a field containing a phone number revision count was incremented by one. What would happen in this scenario is that after a record had been created, if you then changed the phone number field, the revision field would increment by two instead of one.

Dibbs 1a

What was the underlying issue? The event handler was firing twice because it was actually being attached twice, as the handler was being attached to the field in question through code, in the form load event handler.

Dibbs 1

You see, the form load event can indeed fire multiple times in the lifecycle of a form, but only twice at a maximum, and only in one situation. When you open a create form, the form load event fires. Then, when you save the record and it switches to an update form, the form load event fires again. This is the only time this happens. Therefore, if you were to open an existing record, this issue would not be reproducible.

What all of this means is that you can't count on the form load event to fire only once, but you also can't lean on it to fire every time the user saves. We therefore must account for this inconsistency and leverage other methodologies if we need to do something every time the user saves.

Don't worry young Padawan, we can fix this!

Dibbs 2a

You bet Ani! Just keep reading...

I will teach you everything I know, and you will become a far greater developer than I could ever hope to be...

So how do we solve this conundrum?

Dibbs 2

One possible solution you might think would to use the event registration dialog in the form customizations. In other words, use the Dynamics UI to register the events. While this is not an altogether horrible idea, we would not recommend this approach. Why is that, you ask? There are many benefits to registering your events in code, such as:

  1. You can see all of your events that are registered on that form, all in one place (you don't need to go to the Dynamics environment to see what's attached to what).
  2. You can leverage source control to more easily see how event registrations changed over the lifespan of the codebase.
  3. Registering your events in code should feel natural, when developing using JavaScript outside of Dynamics, we attach our events in code. We almost never attach them in the presentation (HTML) layer. Consistency, woo!

Given all of those benefits, we need to look for another approach. Good thing there is another! Let's instead use a variable to track when the events have been attached. So, the process would be to check a variable like isFormLoaded before attaching events, and if it's false, go ahead and attach your events but then be sure to set isFormLoaded = true when you're done.

Dibbs 2b

Yep, it's that simple. Just remember to scope your variables appropriately so as to not leak that new isFormLoaded variable of yours to the global scope so that we can dodge another potential bug!

Dibbs 3

Take this information and use it wisely, young Padawan. With this knowledge, prevent many bugs, we shall.

4dibbs 3

Topics: Microsoft Dynamics 365

Taking Your Process from Demo to Reality

Today's blog post was written by Kristie Reid, VP of Consulting at Sonoma Partners.

If you have seen a demo of the leading CRM systems lately, no doubt you have seen some type of visualization of a sales or service process. This feature is usually a hit with any audience. But if you’re the administrator who has to implement what the business is getting so excited about, you may be cringing and asking how you are ever going to implement what you are seeing.  I can assure you, the technical implementation of a process flow is not that hard. But gathering consensus for what that flow should be and taking the business requirements and tactically implementing them can prove to be a bit daunting. 

Step 1: Defining the Process Stages

If your company is like many that we work with, they have many teams who serve similar functions (for example, multiple sales regions). Those teams often think that they work very differently and cannot agree on a single process. That may be true. However, what we often find is that the foundation of what those various teams do to accomplish their goal is the same. But how do you get them to see that?

One approach that we use to find that common ground is the facilitation of Brown Paper Sessions. It’s exactly as it sounds. We throw large pieces of brown packaging paper on the wall and step through the various stages that the team walks through to achieve their goal using post-it notes. I know, it sounds silly for a technology company to be using paper to facilitate complex discussions with large groups of people but here are the benefits:

  • Brown paper and post-its are not intimidating (how many people use Visio on a daily basis?).
  • Post-its are not permanent. This allows the discussion to flow naturally and unstructured if the group you are working with does not think linearly. Post-its can be moved around as other thoughts come out.
  • Post-its are interactive. Post-it notes can be written and moved around by audience participators, not just the facilitator.
  • Brown paper makes for fantastic art! Okay, not really, but it can stay up and instigate conversation after the facilitation session is over (just remember to tape the post-its so that they don’t fall off).
  • Finally, the other option, typically Visio, is painful to watch someone manipulate in real time.

Krisite blog image 1

Step 2: Validation and Buy In

Once you have the first process on paper (yes, brown paper), bring in other teams to validate that the process works for their groups as well. Have them work from the same paper that is still on the wall. We usually find that this is where the magic happens. Often the subsequent teams to review the process once defined find that there aren’t as many differences as they originally believed. You may find that there are times where it does not, and that’s okay. Add their variances directly to the paper on the wall.

Repeat this process with all groups who need to buy in to what will be implemented in a system.

Kristie blog image 2

Step 3: Additional Details

As you are defining the main process, add the additional information that would be needed. For example, in Stage 1, what data must be collected? In Stage 3, what notifications must be sent to communicate the progress of the process? What data do users or managers need about that process?

Kristie blog image 3

Step 4: Document, Document, Document

Okay, now you can use Visio! Time to take the brown paper off the wall and put it into electronic format (don’t forget to take pictures before removing the paper). Be sure to document key decisions made and to provide more details around the meaning of each step. Let’s be honest, even the people who were in the room making these decisions will forget what was said in a few months.

Step 5: Implementation

There is a lot of technical information available as to how to implement processes in a CRM application. Again, people reviewing CRM systems love the visual process flows available. However, not all process can be handled in chevrons. Make sure to follow best practices here. Also, as part of this implementation, don’t overlook the power of reporting that is available to show the effectiveness of the process being put in place.

Step 6: Leadership, Communication, and Training

Adding a process to any system without proper sponsorship, communication of the what’s and whys, and training on how to use the process will not have the results that you’re hoping for. We cannot stress enough how important the consideration of Change Management is. I also always recommend that a CRM system not be the reason new processes are put into place. That gives your users one more thing to blame on CRM. The reality should be that this process change is being put in place, here is why. CRM is just a tool to support that process change!

If you need help with business process documentation, redesign, or implementation, give us a call!

Topics: CRM Best Practices

Dynamics 365 Demo Video: Outlook Add-In for Phone and Desktop

Today's blog post and video were created by Bryson Engelen, Sales Engineer at Sonoma Partners.

The Dynamics 365 Outlook Add-in for Phone & Desktop allows you to create new records from your email inbox (Lead, Account, Contact, Opportunity), track emails against existing records (including pinned and recently viewed), and see high level details about each recipient and the D365 record the email is tracked against.  In addition, replies can include information coming from D365 like email templates, Sales Literature, and KB Articles and they can be followed so the opens, replies, clicked links, and opened attachments are tracked.  Many of the same capabilities are available for your calendar, and all of this is available in the web and desktop versions of Outlook and in the iOS version of the Outlook mobile app.

To learn more, watch the video below:

Topics: Microsoft Dynamics 365

New Salesforce Lightning Requirements for ISV's

Unless you've been living under a rock, you know that Salesforce launched a new user interface and design system called Lightning at Dreamforce 2015. As an ISV, you might be thinking "yeah I know we need to eventually update our app to Lightning, but we can wait a little longer before taking action". Well Salesforce recently shared some new information about Lightning adoption and NEW ISV requirements that should make you rethink (and accelerate) your Lightning timeline!

Lightning Adoption

Salesforce conducted more 50,000+ org Lightning readiness assessments so far, and customers appear to be accelerating their use of Lightning. 



New Lightning Requirements for ISV's

Salesforce took advantage of customer momentum behind Lightning to put NEW requirements on ISV's in the Salesforce ecosystem:

  • All new apps that enter into an agreement on or after March 1, 2017 must be Lightning Ready. Lightning Readiness will be a prerequisite for entering the Security Review process.

  • Salesforce stated a goal to make all existing apps Lightning Ready by February 2018You don't want your ISV app to block your customers from switching to Lightning...Salesforce would NOT like that.

  • Starting in the Summer '17 release, Salesforce admins will be able to (with a new user permission) block users from manually switching back to the Salesforce Classic interface.

So if your app isn't already Lightning is the time to start taking action to update your app! What does it mean for your app to be Lightning Ready? Salesforce makes the requirements simple to understand - 100% of your end-user use cases must work as expected in Lightning Experience. For example, for a document generation solution the app must work for all users who need to generate documents. To help ease your transition efforts, administrator use cases (such as app setup and configuration) do NOT need to run in Lightning Experience to be considered Lightning Ready...although Salesforce strongly recommends that they do so.

If you're an ISV that's been putting off your Lightning readiness, now is the time for you to take action. As a Salesforce PDO (Product Development Outsourcer), Sonoma Partners can help you get your app Lightning ready as quickly as possible...and our ISV best practices will make sure that you save time and money getting to market. Please contact us to setup a time to talk about getting your app Lightning ready!



Topics: Salesforce


Today's blog post was written by Angel Shishkov, Principal Developer at Sonoma Partners.

OCR (or Optical Character Recognition) technology has been quietly getting better over the years, while everyone has been distracted with voice recognition (Hey Cortana! Cortana? Hey? Oh, fine, I’ll just click it). Generic solutions exist that can do character recognition and specialized solutions exist for more specific tasks, like reading receipts. CRM can also benefit from OCR, especially for getting that digitized paper data into structured CRM entities.

I will demonstrate how OCR can be used in CRM by setting up a simple integration between CRM and an OCR API.


A theoretical customer uses paper forms to send in requisition orders for equipment. The forms are very basic and contain the equipment serial number or SKU, the amount to be requisitioned and the name of the person requesting the equipment. The equipment exists in CRM as native Products and the people exist as native Contacts. A custom entity called Requisition was created to store the SKU, Amount and Requisition By fields for each request.

The current requisition process works as follows:

  1. Requisition form is filled in and printed/scanned.
  2. Requisition form is attached to an email and sent to a CRM mailbox.
  3. A CRM user receives the email and opens the attachment.
  4. A CRM user manually creates a new Requisition record and enters the information from the attachment.


We will build a custom integration with an OCR service called OCR.Space. This is a web service API, making it ideal for use from within CRM Online, and it has a free pricing tier so we can experiment with it without obligation to buy.

We will have a plugin that fires on new Emails. It will use the OCR.Space service to read the requisition form attachment and then automatically create a new Requisition record in CRM with those values.

The new requisition process will work as follows:

  1. Requisition form is filled in and printed/scanned.
  2. Requisition form is attached to an email and sent to a CRM mailbox.
  3. Email arrives into CRM and fires a custom plugin.
  4. Custom plugin reads the email attachment and sends it to the OCR service to be interpreted.
  5. Custom plugin reads the values returned from OCR and creates a new Requisition record with those values.

Everything on the CRM side will be automated, with no manual work.


The custom plugin will fire on Email create, check if the email was a requisition, based on the address it was sent to, or the subject line, or something else, and read the attachment from the email. Attachments are retrieved from CRM as Base64 encoded strings, which is perfect for calling the OCR.Space service with.

The OCR.Space service accepts an HTTP “POST” submission with an “apikey” parameter in the header specifying the API key we are provided when we registered. The image file to read is sent through a “base64Image” parameter in the message content.

The service returns a JSON object that describes the text which was read from the image. The service documentation for the request and response parameters can be found here:

Here is an example (oversimplified) Requisition Form that would be attached to an incoming email.

Angel 1

First, we will create some classes to hold the deserialized JSON response. They are decorated with [DataContract] and [DataMember] so we can deserialize the JSON string into them using a DataContractJsonSerializer. 

Next, we set up the base plugin that will read the email attachment. That is standard CRM work, so I will omit it here. Finally, we create a method to take the email attachment as a Base64 string, send it to OCR and create a new Requisition record from the results.

Here is what the code does:

  • Start with the URL to the OCR service and the API key. These can come from the plugin configuration or a config entity.
  • Construct the data payload for the POST request by adding the “based64Image” parameter and the “apikey” in the header.
  • Submit the request and retrieve the response from the OCR service.
  • Deserialize the response JSON string using a DataContractJsonSerializer into the classes we created earlier.
  • Read the text returned by OCR and split it up into lines. Find the lines that start with “Product”, “Amount” and “Requisition By” and parse out the values following the line labels.
  • Fill in each parsed value into the appropriate attribute on the new Requisition record.
  • Call the OrgService to create the new Requisition record.


Automating processes in CRM through OCR can save a lot of repetitive, manual work that is prone to data entry errors. While OCR is not perfect and will make the occasional mistake, it tends to be very good when the input image is clean, in a standard format and uses a consistent text font. If you are looking to build an OCR integration for your CRM system and need some help, give us a call. Thanks for reading!

Topics: Microsoft Dynamics 365

Effective Project Sponsorship: The Key to Boosting CRM End-User Adoption

Today's blog post was written by Scott Hinton, Principal Consultant at Sonoma Partners.

I'll never forget the project sponsor I worked with on an implementation a few years ago. I had read the research, but experiencing a great sponsor firsthand made all the difference. The importance of effective project sponsorship is no mystery to change management practitioners. The difference between an engaged sponsor and one who is going through the motions is night and day and can directly impact the level of CRM adoption speed and ultimate utilization. This article highlights my experience working with an exceptional sponsor from "ACME" and includes seven practical tips outlined by phase to increase sponsor effectiveness and overall CRM adoption levels.

Seven Sponsorship Tips

During the change management Prepare Phase, there are several key sponsor-related activities. These include assessing project sponsorship, sponsor education, building a sponsor roadmap, and creating a change coalition.

1. Assess project sponsorship

The change practitioner assesses the readiness of the sponsor and project governance first. This uncovers sponsor capabilities, expectations, and the organization's legacy of project sponsorship effectiveness. Assessing governance is important to understand where the project sponsor role fits in the organization and the project governance maturity. This information allows the change practitioner to match the sponsorship approach to the organization and CRM project.

ACME's Sponsor Mary collaborated on developing and socializing a project governance organization chart. This gave committee members greater clarity on the various players and committee functions and demonstrated sponsor commitment.

Scott hinton 1

2. Educate the sponsor

Many sponsors don’t fully understand their role or appreciate the impact they have on project success. The project manager, change lead, and other key project team members are certainly change success enablers, but effective sponsorship is paramount to meeting project objectives. Sponsor education early in the project is vital. This allows the change lead to play a trusted advisor role and build rapport with the sponsor. Trust is key to discussing those shadow issues below the surface that could inhibit project success.

Mary was receptive to learning sponsor effectiveness fundamentals and encouraged performance feedback and ongoing coaching. 

3. Set clear expectations

The change practitioner and sponsor need to be aligned on role expectations and priorities. The sponsor roles and responsibilities also need to be formalized in the organization. In many cases, this is accomplished through an executive sponsor email introduction of the sponsor to demonstrate senior leadership commitment and give the project and sponsor greater credibility. Creating a sponsor roadmap is also important at this stage. It outlines expectations for the sponsor, change management checkpoints and meetings with the steering committee and key stakeholders. Meetings with business leaders improves awareness, alignment, and project engagement.

Mary was always available for weekly checkpoints and followed up with task owners. She also dedicated resources to the project in the form of a core and extended project team.

4. Facilitate change coalition building

Successful change management does not happen in a vacuum. The change practitioner can architect the change but ownership must be spread across the organization through a coalition comprised of "change agents" from all levels within the organization. The coalition, commonly called a "Change Network," raises the visibility of anticipated changes, builds support ahead of the actual change, and provides end user feedback to the sponsors and project team. According to Kotter, the coalition must have the right composition, level of trust, and a shared objective. They state: "In our studies, when we have found people making large scale changes very successfully, we’ve always found what I call a 'guiding coalition' driving the process." The sponsor is responsible for ensuring the coalition is effectively supporting the change.

Mary headed the governance committees but she shared change leadership responsibility throughout the coalition by keeping members abreast and engaged and seeking feedback. 

During the Manage Phase, sponsor coaching and active and visible sponsorship are crucial. 

5. Ensure active and visible project sponsorship

Sponsor engagement directly impacts project success and the most effective sponsors are the face of the change throughout all project phases. According to Prosci, "A positive leader who actively guides the organization through change and participates visibly throughout the transition is the greatest predictor of success." Active participation includes communicating directly and candidly to all impacted users and avoiding delegation of sponsor duties.

6. Coach on proactive resistance management

A degree of project change resistance is inevitable. The level is reduced when the sponsor understands and proactively manages resistance. This includes addressing resistance head-on and establishing feedback loops to uncover root causes. Resistance occurs at all levels of the organization and managing leader resistance effectively is critical as they set the tone for adoption and lead by example through their communications and behaviors.

As the project enters the final or Reinforce Phase of change management, the focus is on recognizing success, transitioning the responsibility of change management and ensuring performance can be sustained.

7. Recognize Behavior Changes

Once the project launches, effective sponsors model desired behaviors and ensure the organization is recognizing and rewarding user behavior changes to sustain and build performance improvements. It's also important for the change lead to fully transfer change management responsibilities to the sponsor or another designated individual. Mary was in attendance at project launch events and sustained positive momentum by sending companywide and project team emails highlighting success stories. In addition, she maintained the governance committee post-launch to review results and identify ongoing improvement opportunities.

It was gratifying to learn that ACME had a very successful launch. There is little doubt that Mary's effective project sponsorship was a major contributor.

Topics: CRM Best Practices

Dreamforce 2017 Security Review Deadline for ISV Apps

Dreamforce_15_cloud_logotype_RGBEveryone knows that Dreamforce reigns as THE most important cloud computing event of the year, and Dreamforce 2017 will take place November 6 to 9 in San Francisco. As an ISV in the Salesforce ecosystem, Dreamforce obviously marks a key milestone event for your business...anyone who is anyone in the Salesforce world invests a ton of time, energy and money into the event.

When we speak with ISV's about Dreamforce, they frequently express a desire to make sure that their latest and greatest app goes live in the AppExchange before Dreamforce starts. With thousands of ISV's all rushing to go live for Dreamforce, this demand creates a significant backlog in the Salesforce security review process...which requires manual/human intervention.

With this ISV crush coming, Salesforce publishes key dates and guidelines for ISV's who want to have their app live by Dreamforce 2017:

  • Submitting an app by the deadline (before August 25, 2017) means a partner will receive one test by Dreamforce. Retests before Dreamforce are not guaranteed. It is a best practice to submit your complete offering as early as possible to ensure that there is time for any unexpected delays like a failure.

  • Offerings in the queue must have everything in place, including a complete set of fully configured test environments, clean security reports, and other required documentation and collateral. Offerings in the queue with incomplete test collateral submitted after the published deadline are not guaranteed a Security Review before Dreamforce.

  • Offerings should not be submitted before they are complete. Unfinished offerings will be rejected.

Salesforce_appexchangeAssuming you must have a totally 100% complete solution completed before August 25th to hit the Dreamforce deadline, that means ISV's have about three months from today to build out their solution. Whether you're upgrading your app to be Lightning Ready, or if you're building a brand new app...three months isn't a lot of time to hit the Dreamforce security review deadline

Most ISV's find that working with a Salesforce PDO (Product Development Outsourcer) like Sonoma Partners helps:

  • Drastically reduce the product development timeline by leveraging our best practices and pre-built IP
  • Significantly increases the chance your app will pass the Salesforce security review on your first submission

So if you're an ISV already in the Salesforce ecosystem (or considering joining the ecosystem), please contact us and we can help make sure that your app is live and ready in the Salesforce AppExchange when Dreamforce hits this November!



Topics: Salesforce

CRM Platform Selection Tip: Don't Count the Features

Today's blog post was written by Kayla Silverstein, Marketing Specialist at Sonoma Partners.

We’ve all evaluated products based on features. You’re on Amazon, trying to decide whether 3G or 4G makes more sense for your Kindle or you’re on a hotel website, deciding whether it’s more important to have a free breakfast buffet or to be walking distance from your conference venue. We  have constant access to information that allows us as consumers to evaluate products and make informed decisions on our purchases. When it comes to making your CRM platform selection, we’re here to tell you that the features listed “on-the-box” should be largely overlooked.


We see prospects make this mistake over-and-over again, comparing and selecting their platform based on an itemized list of features. Perhaps advertised as “latest and greatest,” a CRM feature list can include any combination of the following: mobility, multi-channel support, campaign management, remote access, ease of integration, integrated analytics, and marketing automation. If you were to simply search for a “CRM Features Checklist,” you could easily compile a list of dozens of “must-have” capabilities for your future platform.

We strongly recommend you evaluate differently and throw the features – for the most part – to the wind.

Here’s why:

They update rapidly.

Organizations typically adopt CRM platforms for at least 3 to 4 years before considering a switch or upgrade. Every year, Salesforce and Microsoft push hundreds of upgrades. Salesforce’s big updates happen three times a year, one in spring, one in summer, and one in the winter while Microsoft will push several updates throughout the year. The platform you purchase today could evolve massively in a single year…so why get invested in the platform’s specific features as they stand today?

The fundamentals are essentially the same.

At their core, most enterprise CRM platforms are largely the same. More important than anything is to assess whether these platforms are meeting your team’s requirements for your CRM program as a whole. Is it providing your sales/marketing teams with the ability to better target customers? Does it allow you to optimize information shared across departments? Does your tool provide analytics to segment, analyze, and run reports on your business? If so, you’re sure on the right track. Access to singular features that differ between platforms will not be the  be-all-end-all of your implementation.

So, how do you decide?

There are a lot of other factors that go into making your decision; so many, in fact, we wrote an eBook on it. To get you started, here are just a few of what we consider the most important CRM evaluation criteria:

Make sure you understand each vendor’s plan and strategy.

Evaluate the vendor’s history as a company and the overall direction of their software. Inquire into their management team. What are they doing to stay innovative? Any acquisitions on the horizon? These are all key indicators as to the quality of their platform and the ability for it to meet the needs of your organization as you implement your project.

Evaluate which platform offers the greatest possibility for user adoption.

So many CRM programs fail due to the lack of adoption by its users. Don’t let this be you! Examine which platform your users might be more familiar with. Maybe your organization has previously invested in Microsoft products before, and there is already a corporate bias in favor of their systems. In this case, Dynamics might make more sense over Salesforce. These can all be critical things to evaluate to inform your investment decision.

Ensure you have the right skills on your staff.

Different platforms require different skills. Dynamics 365 requires different technical experience than Salesforce. Which is your team best suited for? What internal support would you be able to provide your team? Both Dynamics and Salesforce offer a variety of resources to support adopters – which vendor’s materials will identify most with your organization?

At the end of the day, choosing the right CRM platform for your organization can be a confusing decision. It’s very easy to feel a bit information-overloaded, but trust in the process and stay informed on how you should be evaluating vendors, and you will find success. Want some more good news? If you’re going with a name brand platform such as Salesforce or Dynamics 365, both are built with advanced capabilities to allow for customizations to fit the specific needs of your organization.

And as always, if you would like a second opinion in making your CRM platform selection, let us know. We’re more than happy to help.

Topics: CRM Best Practices