tags:

views:

594

answers:

3

My organization is in the final stages of aquiring CRM 4.0 for use as a general purpose software development platform. The company who is selling it to us has convinced upper management that CRM will solve all our productivity problems and make software development as easy as point and click. (They don't read Brooks.)

Having resigned to the fact that I can't stop CRM from being foisted upon us developers, I have been doing research on how to manage the complexities of large scale CRM development.

I have so far identified the following complexities that need to be addressed:

  1. CRM seems wholy incompatible with basic configuration management practices.
  2. Keeping the black box CRM database in bidirectional synchronization with external LOB systems is both very hard and critical to project success.

What other complexities must I take into account when building a large scale CRM application?

What limitations does CRM have as a development platform?

Edit: This topic provided additional insight: http://stackoverflow.com/questions/190839/

+1  A: 

Transaction Support

If your application require transaction support from the underlying platform, Dynamics CRM is not the correct choice. The reason is because currently Dynamics CRM SDK web service doesn't support transaction.

The reference thread is here : http://stackoverflow.com/questions/1037160/does-mscrm-web-service-support-database-transactions

Since you would like to utilize Dynamics CRM as a platform, that means all the business logic should utilize Dynamics CRM SDK Web Services as data access layer. But imagine without the transaction support and you're invoking a series of web service calls as a unit of work, and one of the web service calls fails. That means you potentially will encounter data integrity issue.

Configuration

Usually i create a custom entity called Configuration, which will store all the necessary related configuration for the current CRM application. After it has been created, you can use Dynamics CRM SDK Web Service to read all the necessary configurations from the Configuration custom entity

hadi teo
+2  A: 

I've worked with MS CRM 3.0 and now 4.0 here's my take:

  1. Whenever possible focus on standard best practices. Don't get overly confused by what CRM is doing or wants you to do.

  2. Don't be afraid to break what's "supported" by MS. With some caveats on 2 major factors - will your company let you think outside the box to solve problems and do customizations/integrations that are not officially supported? - and are you comfortable enough with .Net, SQL, javascript etc to weave through their code and implement what you need?

    I have sometimes banged me head 100 times trying to do something in a "supported" fashion when one small tweak to a js file here or a small db modification there gave me what I needed.

  3. If constant data integration with other LOB apps is critical you should consider a 3rd party tool like Scribe (http://www.scribesoft.com/). It's not cheap but can basically get you 90% of the way when it comes to integrating with your other LOB apps.

  4. As a general rule, MS CRM is great at contact management - doing things like tracking appointments, doing mail merges, etc. Could you use it as your core HR system - probably. Finance system - maybe a bit more difficult. The further you go from it's core competency of performing contact management the more custom work you'll have to do. The more custom work you have to do the more you should consider if MS CRM is the right solution to that problem.

brendan
We are trying to break a single, monolithic "everything system" (hr, finance, logistics, etc) into multiple, loosly connected, sporate systems talking over a clearly defined service layer.1. Is building an HR, logistics, or finance system wise on MSCRM?2. Is it possible to get two or more MSCRM stacks to share information with each other, and external systems in an SOA? Or does MSCRM want all connected entities to be in the same server/database?
Ryan Michela
brendan
Re: #2, I would stress for people to really, really, really try to stay supported as much as possible. Mucking with pages and javscript files is going to lead to clients not being able to upgrade/implement rollups or being able to contact MSFT support. If you absolutely HAVE to make an unsupported change, first check three more times to make sure there's not a supported way to do the same thing, then make sure the change is documented, and there's an easy way to back it out when/if you need to deal with MSFT support.
Matt
To Matt's point - if you're a consultant I would definitely avoid unsupported customizations for a client. That's just a good rule of thumb having nothing to do with ms crm. And he's definitely right in the sense that you should make 110% sure there isn't a supported way of doing it and document your changes thoroughly.
brendan
+1  A: 

I know you're likely well underway into your deployment of Dynamics CRM, but just a few quick tips:

  • I'd avoid making unsupported changes purely because it becomes too hard to track the changes eventually. Since Dynamics CRM allows developers to make C# Plugins and access to web services, it's usually unnecessary to make unsupported changes for anything non-trivial. Plus you run the roulette of having to hide changes from MS if you have to call their support. I know many people will include external javascript files (jquery, etc) and other somewhat benign changes, but try to mentally stop yourself when an unsupported edit involves anything non-visual.

  • Look into the phrase Microsoft Dynamics Xrm, there are several books on the subject that are excellent, http://www.thecrmbook.com/ is particularly good because it comes with some nice custom code to use with your CRM.

  • Source Control your customizations xml's and don't let people touch the database, also, Google Halan CRM tool, and use it for scripting out CRM customizations and javascript files. Easier than writing custom powershell scripts to do the same job.

npeterson