It’s a know fact that CRM roll-out may cost twice or even thrice more than CRM solution to be implemented. Even worse the chance to fail is very high, unless you create a detailed program of implementation and invite integrators with a good reputation (that will not give a 100% chance of success though). Generally, pains of CRM implementation resemble the pains of BPM roll-out. In case of BPM, risks may be decreased with building the value up step-by-step and implementing “behind the scene” initiatives. In case of CRM it’s generally counted as not a very good practice (however IBM Global Service uses this approach), but until concepts and benefits of CRM are understood thoroughly, quick wins achieved by “denormalized” CRM components (that normally cover one process or just a part of it, whereas leading CRM products may be adjusted to any process of a company more or less painlessly) can be a good start.
Path of stepped roll-out is usually taken by the companies that don’t have much experience in CRM (and probably tied to ERP system that they want to extend with CRM features). With the means of their own development department (or delegating development to the offshore/nearshore) they sequentially, with small steps, cover different areas of CRM (mostly operational) with the components that offer the clearest ROI. Home-made CRM solutions have the following disadvantages among the others:
- single solutions introduce a lot of code duplication;
- architecture is not flexible and changing requirements may be crucial, as those applications are mostly developed in a very short time frame under the pressing of marketing or sales departments (value and behavior comes first);
- maintenance is painful as quantity of spaghetti-code grows over time;
At the same time, it’s hard to predict, which area of the solution under development requires the highest flexibility, and making all parts of the system too generic and flexible can also add complexity to design and affect performance (generic solutions that, say, may work with different databases will never work as fast as those that uses all tricks of a specific database). Another point is the human factor – if you leave developer alone with the program, it will definitely create another framework.
Solution of my choice that can address all the mentioned problems and requirements is Service Component Model (aka Service Component Architecture). Key concepts of SCA are:
- service (also called “asset”) – independent reusable functionality;
- component – composition of services (1+ services) that address a particular horizontal (technical) or vertical (business, domain) problem;
- assembly – complete system assembled of independent components and assets;
- orchestration and choreography – define behavior and ways of communication within assembly;
- event – way of intercommunication;
- storage – single place where assets (components) are stored to reuse lately;
Many specialists think of SCA (and SOA) as the equivalent to implementation of WS-*. WS-* stack certainly has the most technologies to realize SCA (WSDL, UDDI, SOAP, WS-BPEL, WS-CDL), but conceptually, complete SCA can be achieved with REST, CORBA, while in-box (or better say in-container) SCA may be implemented with Spring Framework. Dependency Injection paradigm (used for orchestration and choreography) keeps assets decoupled, and defines relationships between assets in components and content of the assemblies. System availability may be later achieved with REST-services (over service interfaces) and Spring Integration engine.






