{"id":11313,"date":"2008-07-15T12:08:49","date_gmt":"2008-07-15T09:08:49","guid":{"rendered":"https:\/\/mamchenkov.net\/wordpress\/?p=11313"},"modified":"2008-07-15T12:08:49","modified_gmt":"2008-07-15T09:08:49","slug":"migrating-ms-dynamics-crm-to-sugarcrm","status":"publish","type":"post","link":"https:\/\/mamchenkov.net\/wordpress\/2008\/07\/15\/migrating-ms-dynamics-crm-to-sugarcrm\/","title":{"rendered":"Migrating MS Dynamics CRM to SugarCRM"},"content":{"rendered":"<!-- google_ad_section_start -->\n<p>I&#8217;ve been a bit quiet for the last couple of month.\u00a0 That&#8217;s because I was leading an ambicious project at my new job &#8211; migration of a Microsoft Dynamics CRM version 3 to SugarCRM Community Edition version 5.0.0.\u00a0 There were only three people involved, non of us could afford to work full time on the project, and we only had three weeks to do it.<\/p>\n<p>Read on for a story on why it took us longer, how we did, and if it was a success at all.<\/p>\n<p><!--more--><\/p>\n<p>First of all, a little background.\u00a0 The company that I work for now is in financial services sector.\u00a0 CRM is one of the two vital systems, with trading platform being the second one.\u00a0 All processes are tied into CRM &#8211; registrations of new clients, incoming and outgoing money, email tracking, and so on and so forth.\u00a0 The system has been installed about a year ago and has accomodated data for a few thousands of clients.<\/p>\n<p>Another important bit to know is that CRM is used quite a lot 24 hours a day, 5 days a week.\u00a0 Some data is coming in over the weekends too, but there are no real users who access the system.\u00a0 Also, since the company is working with global clientele, weekend is really between 23:00 of Friday and 23:00 of Sunday.<\/p>\n<p>By now you probably have this question in your head: &#8220;Why migrate?&#8221;.\u00a0 What is so wrong with the existing system that it needs to be replaced so fast and so furious?<\/p>\n<p>The company was preparing for a huge expansion.\u00a0 Firtst of all, there was a take over of another company scheduled later that month.\u00a0 That meant an almost sudden expansion of a few thousands of clients to a few tens of thousands of clients.\u00a0 Secondly, a huge marketing campaign was starting up.\u00a0 Thirdly, a few key processes were about to be change (the way new clients were registered).\u00a0 Fourthly, there was a huge need for automation and extended functionality.<\/p>\n<p>With all that, there was a very limited in-house expertise for the existing system.\u00a0\u00a0 SugarCRM had this nice advantage of being implemented with LAMP stack (Linux, Apache, MySQL, PHP), which was way more familiar to most of the IT people in the company.\u00a0 And all the source code was there.<\/p>\n<p>Another big reason for a change, was realization of how tied in the MS CRM is into company&#8217;s network.\u00a0\u00a0 While considering the upgrade of the MS Dynamics CRM to version 4, most of the people were horrified of the upgrade path.\u00a0 In order to upgrade the CRM, we first had to upgrade our MS Exchange server.\u00a0 Which meant that we had to upgrade the operating system of the machine.\u00a0 Which meant that we had to upgrade the hardware of the server.\u00a0 And MS Exchange upgrade was strongly suggesting upgrades of quite a few other bits and pieces of software and hardware.\u00a0 Seemed like a really complicated and dangerous thing to do.<\/p>\n<p>One thing I wanted to note separately, was how easy it was to sell SugarCRM to the management.\u00a0 An open source stack meant that we were could be in full control of the system.\u00a0 Independent software pieces meant that we could replace and upgrade them separately.\u00a0 Fully web based technology aligned very well with many other company tools.\u00a0 The brief demonstration of SugarCRM got them totally convinced that the system is mature enough and can handle everything the company needs, and more.\u00a0 The fact that SugarCRM could be easily installed on a laptop in just a couple of minutes helped.\u00a0 The nice look and selection of themes in default out of the box installation helped.\u00a0 The selection of modules in out of the box installation helped.\u00a0 And the possibility to install the system with plenty of sample data helped too.\u00a0 Overall, it took me less than two hours to convince the management that the system is good enough.\u00a0 And I wasn&#8217;t even trying hard.<\/p>\n<p>So, what&#8217;s with the timing?\u00a0 We were given three weeks.\u00a0 In fact, it was two weeks for migration and one week for user training.\u00a0 We had to create a full replica of the existing system.\u00a0 Migrate all the data and implement all the functionality to support all the company processes.\u00a0 It took us three weeks to do it.\u00a0 Because we had no time to train the users, and because the company was on the doorstep of a large take over, we had to suspend the CRM migration efforts.<\/p>\n<p>It took the company about three weeks to integrate all the new data.\u00a0 Also, quite a few processes were changed.\u00a0 And the company grew plenty of new staff in all departments.<\/p>\n<p>When the question of the CRM migration was important once again, we had to face quite a few changes.\u00a0 Much much much more data than we originally tested with.\u00a0 A lot of changes in the ways things were handled.\u00a0 More users.\u00a0 And more automation was needed.\u00a0 The replica of the old CRM was of no value anymore.<\/p>\n<p>It took us about three more weeks to adjust our installation of SugarCRM to fit the new requirements.\u00a0 Even now that the migration is officially over, we still have quite a few things to fix and improve.\u00a0 But that&#8217;s going to be a live process from now on.<\/p>\n<p>The project was very challanging for the company, the team, and me personally.\u00a0 It was a complex thing technically, politically, and socially.\u00a0 For me personally, it was also quite a new management experience.\u00a0 I&#8217;ve been doing some project management before, but never had to deal with such magnitude, and especially in such tight deadlines.\u00a0 The good thing though was that I had to pick my own team.<\/p>\n<p>Here are a few things that I&#8217;ve learned and a few things that I think are important to share.<\/p>\n<p>Technology-wise, thanks heavens for CSV (file format for comma separated values).\u00a0 This was the backbone of the whole migration process.\u00a0 Here is how it works.\u00a0 MS Dynamics CRM has a very limited exporting functionality.\u00a0 Getting things directly out of the database don&#8217;t make sense at all.\u00a0 For example, our specific installation had more than 220 tables, all linked to each other.\u00a0 On top of that there were almost 400 views and something around 60 stored procedures.\u00a0 There was no way that we could analyze these structures in any meaningful period of time.\u00a0 So we did an export with entity by entity method.\u00a0 Gladly, there weren&#8217;t that many entities.\u00a0 There is a way to list all entities in tabular form, with columns upon columns of entity values.\u00a0 The only sensible format to save that list was in HTML.<\/p>\n<p>Because we had huge sets of data, MS CRM couldn&#8217;t handle the listing properly.\u00a0 So we had to come up with search criterias to separate the listings into smaller chunks of about 10,000 records each.\u00a0 Now, I&#8217;ll give you a second to imagine an HTML file with a table, which has around 10,000 rows and anywhere from 100 to 500 columns.<\/p>\n<p>The way to handle these HTML files was to load them up in MS Excel.\u00a0 It should also better be a newer version of Excel, that can handle more than 256 columns.\u00a0 MS Excel is wonderful at pasing those HTML tables, but it doesn&#8217;t offer much help in saving them in CSV.\u00a0 CSV in MS Excel is weird.\u00a0 So, what we ended up doing was using MS Excel to convert HTML tables into older version of Excel, so that we could open them up in OpenOffice.\u00a0 OpenOffice is wonderful at saving CSV.\u00a0 You can pick and choose delimeters, quoting symbols, etc.\u00a0 The point is to make CSV files which can be parsed by PHP.<\/p>\n<p>Here are two things to remember.\u00a0 First, older Excel formats can&#8217;t work with more than 256 columns.\u00a0 The trick we were using was the sheets.\u00a0 Copy data of the extra columns into another sheet of the same file, and it will be much easier to process later.\u00a0 Second, if you will do several exports of data from MS CRM, remember that columsn won&#8217;t necessarily be in the same order.\u00a0 In fact, chances are that columns won&#8217;t be in the same order.\u00a0 The way go about it is to use hashes, or, sorry, associative arrays.\u00a0 Take the first row, of data, which has the column titles, build an index array out of it, and then go through data rows, assigning values to appropriate keys.\u00a0 Don&#8217;t use indexes for data, or you will have to inspect the order and adjust your SugarCRM importing scripts on every export.<\/p>\n<p>Another technical issue is the deployment process of SugarCRM.\u00a0 We are still in the mess with this and haven&#8217;t solved it properly.\u00a0 We used Subversion for the version control of all the files.\u00a0 But it&#8217;s not enough for SugarCRM, since some of the modules are bulit with its own Studio, and loaded with its own Module Loader.\u00a0 When this happens, the database is modified, and a few local files are changed also.\u00a0 We sort of have it working now, with plenty of magic and strict procedure involved, but it&#8217;s far from perfect, requires too much manual labour, and is very prone to problems still.\u00a0 If you have any suggestions for this one, please let me know.<\/p>\n<p>Something else worth noting, is a very unpleasant behavior of SugarCRM in terms of usage tracking.\u00a0 Surely, there is an option to not send anything, but somehow I find it always sending way too much stuff out.\u00a0 And the worst part is that these things are hidden, and written in a way that makes them hard to find.\u00a0 have a look in <em>include\/utils\/mvc_utils.php<\/em> and in <em>include\/utils\/tracker_utils.hp<\/em> .\u00a0 These are the two ugliest places.\u00a0 There is another one which deals with update notifications, which I think I found, but didn&#8217;t have time to cut out yet.\u00a0 I am really surprised to see these in an open source project.\u00a0 And then again, I&#8217;m glad to have all the sources and being able to remove this stuff.\u00a0 Who knows what goes on in closed source applications&#8230;<\/p>\n<p>In terms of project management, I&#8217;ve learned to talk to people a lot.\u00a0 Talking to all the people all the time was the bigger part of my participation in the project actually.\u00a0 I think I&#8217;ve spent close to 80% of time just talking.\u00a0 I was talking to the members of the team, trying to figure out the best ways to approach problems.\u00a0 I was talking to people who were supporting MS CRM installation, trying to get as much as possible from them regarding the details of the running system.\u00a0 I was talking to each user and each user group trying to see what they were using, how they were using it, and what they wanted and needed from the new system.\u00a0 I was talking to the management a lot, trying to figure out where the company was going and what would be the changes in the near, intermediate and far away future.\u00a0 I was also talking to a lot of\u00a0 people outside of the company, trying to see how similar problems were solved there, how they managed projects of this magnitude, how they were dealing with their users, developers, and managers.<\/p>\n<p>I know that many projects take a lot of talking, but in this one we had practically no documentation of the existing system and process, and we had very tight deadlines, so talking ended up being a very effecient way of getting information.<\/p>\n<p>Also, talking helped a lot in extending deadlines where needed, and in keeping users calm.\u00a0 Somehow, people are taking delays and system limitations very much easier if they know why those limitations are in and when there are problems will be solved.\u00a0 Sometimes I had to go into technical details explaining why certain things weren&#8217;t working or were working different from the previous system.\u00a0 Sometimes I had do a totally non-technical talk showing to people which other departments exist in the company and how they interact, and how things are prioritiezed and why.<\/p>\n<p>As I said, I did a lot of talking.\u00a0 More than during any other project that I ever handled.\u00a0 Of course, I was blessed with excellent teammates who were handling the technical parts of the project.\u00a0 One person was doing everything and anything about SugarCRM.\u00a0 Another one was working on all the exports, figuring out other systems and getting stuff off of them.\u00a0 He also helped a lot with integration of SugarCRM with the other company tools.\u00a0 Great guys both of them!<\/p>\n<p>Now, this pretty much covers the migration process.\u00a0 But since the SugarCRM saga in our company is just started, expect more stuff posted.\u00a0 In the mean time, if you have any questions regarding any aspect of this migration, feel free to ask in the comments.<\/p>\n<!-- google_ad_section_end -->\n","protected":false},"excerpt":{"rendered":"<!-- google_ad_section_start -->\n<p>I&#8217;ve been a bit quiet for the last couple of month.\u00a0 That&#8217;s because I was leading an ambicious project at my new job &#8211; migration of a Microsoft Dynamics CRM version 3 to SugarCRM Community Edition version 5.0.0.\u00a0 There were only three people involved, non of us could afford to work full time on the &hellip; <a href=\"https:\/\/mamchenkov.net\/wordpress\/2008\/07\/15\/migrating-ms-dynamics-crm-to-sugarcrm\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Migrating MS Dynamics CRM to SugarCRM<\/span><\/a><\/p>\n<!-- google_ad_section_end -->\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_links_to":"","_links_to_target":""},"categories":[1,18,133,62],"tags":[1539,859,580,2076,688,1538,17],"keyring_services":[],"class_list":["post-11313","post","type-post","status-publish","format-standard","hentry","category-general","category-programming","category-sysadmin","category-technology","tag-crm","tag-experience","tag-management","tag-microsoft","tag-migration","tag-sugarcrm","tag-work"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":11326,"url":"https:\/\/mamchenkov.net\/wordpress\/2008\/08\/03\/innodb-is-better-for-sugarcrm\/","url_meta":{"origin":11313,"position":0},"title":"InnoDB is better for SugarCRM","author":"Leonid Mamchenkov","date":"August 3, 2008","format":false,"excerpt":"After SugarCRM was deployed, we were experiencing some lock ups.\u00a0 Not frequent or dangerous, but annoying.\u00a0 About once a week or every ten days or so, SugarCRM would lock up and won't answer any queries at all.\u00a0 Not even the login was possible.\u00a0 A brief investigation showed that somehow it\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":8827,"url":"https:\/\/mamchenkov.net\/wordpress\/2005\/04\/14\/managing-customer-relations-with-open-source\/","url_meta":{"origin":11313,"position":1},"title":"Managing customer relations with open source","author":"Leonid Mamchenkov","date":"April 14, 2005","format":false,"excerpt":"If you are looking for CRM software, make sure you try SugarCRM. It is professionally done piece of software which is available both as a commercial option and free software. Free version has practically all the functionality of the commercial one. Commerical version features more reports and statistics, interface translated\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":11210,"url":"https:\/\/mamchenkov.net\/wordpress\/2008\/05\/29\/toolbox-wordpress-cakephp-sugarcrm-rt\/","url_meta":{"origin":11313,"position":2},"title":"Toolbox : WordPress, CakePHP, SugarCRM, RT","author":"Leonid Mamchenkov","date":"May 29, 2008","format":false,"excerpt":"Over the last couple of years I've been working a lot with these four applications - WordPress, CakePHP, SugarCRM, and RT.\u00a0 Each of these is beautiful in its own way.\u00a0 Each of these tools is an Open Source Software. Each of these tools has a large community. Each of these\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":25961,"url":"https:\/\/mamchenkov.net\/wordpress\/2016\/03\/20\/single-sign-on-sugarcrm-roundcube-multiple-php-sessions\/","url_meta":{"origin":11313,"position":3},"title":"Single Sign-On with SugarCRM and RoundCube Using Multiple PHP Sessions","author":"Leonid Mamchenkov","date":"March 20, 2016","format":false,"excerpt":"I am currently involved in an interesting integration project at work. \u00a0As part of it, we need to create a single sign-on process between\u00a0SugarCRM (version 6.5.20) and RoundCube (version 1.1.4) webmail application. \u00a0RoundCube webmail is being displayed within the iframe inside the SugarCRM user interface, so it would help if\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":26232,"url":"https:\/\/mamchenkov.net\/wordpress\/2016\/07\/13\/sugarcrm-cache-directory-it-is-not-a-cache-directory\/","url_meta":{"origin":11313,"position":4},"title":"SugarCRM cache directory \u2013 it is NOT a cache directory!","author":"Leonid Mamchenkov","date":"July 13, 2016","format":false,"excerpt":"Here is a useful reminder from a few years back - \"SugarCRM cache directory \u2013 it is NOT a cache directory!\". \u00a0 Unlike most modern day web applications, which use cache\/ folder for temporary files, which are safe to delete, SugarCRM keeps a bunch of stuff in there, which, if\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":11339,"url":"https:\/\/mamchenkov.net\/wordpress\/2008\/08\/19\/sugarcrm-deployment-efforts\/","url_meta":{"origin":11313,"position":5},"title":"SugarCRM deployment efforts","author":"Leonid Mamchenkov","date":"August 19, 2008","format":false,"excerpt":"Since we started working on SugarCRM in the office, one of the hardest tasks that we had was solving the deployment issue.\u00a0 On one hand, SugarCRM comes with some really nice GUI tools, such Studio and Module Builder.\u00a0 On the other hand, the system is large and complex and should\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/11313","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/comments?post=11313"}],"version-history":[{"count":0,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/11313\/revisions"}],"wp:attachment":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/media?parent=11313"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/categories?post=11313"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/tags?post=11313"},{"taxonomy":"keyring_services","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/keyring_services?post=11313"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}