Dynamics CRM does an excellent job hiding complexities of the relational design, solid data model, and friendly and consistent UX. Quite frequently CRM customizers and developers are the ones who’s paying the price.
User advocate: We have a custom text field on the contact entity called Position but noticed that users type almost the same values over and over. We’d like to replace this field with a dropdown. I know CRM is very user-friendly when it comes to adding fields, that should be like 15 minutes job for you, right?
Me: 10 hours and 2 weeks elapsed. We can add it to the next sprint.
User advocate: WHAT?!
Me: Let’s see
|Task||Efforts (hours)||Elapsed time (days)|
|Identify the field, build the query returning all distinct values currently in that field, give the list to business to confirm and cleanup||0.5|
|Receive “go ahead” on the original list without any changes. Sigh. Identify misspellings and common abbreviations. Send summary with unresolved to business||0.5||1|
|Thumb twiddling for 2 days||–||3|
|Attend a 1 hour meeting regarding available values in this optionset as asked by business||1||4|
|Thumb twiddling for 1 days||–||5|
|Receive the final list. Create a table in Excel mapping old to new values.||0.5||6|
|Create the optionset field. Realize it’ll take the afternoon to type all values. Export the entity, modify XML by hand to add the values, import back.||0.5||6|
|Start exporting contacts + existing values. Realize that you have about 400,000 of those. Think about writing a workflow, cringe at the idea of handling the map in the workflow editor.||0.5||6|
|Write a piece of code iterating through the contacts and inserting the new value using the map.||1||6|
|Remember that you’d need to deal with inactive contacts and modifiedby will be affected. Advise business about the implications.||–||6|
|Thumb twiddling for 1 days||–||7|
|Receive go ahead including instructions to re-activate and update existing contacts. Modify the code.||0.5||8|
|Run the code in the sandbox. Modify 7 existing forms for the contacts replacing the field. Text search through the existing scripts. Find one reference, replace.||2.5||8|
|Recall that there are reports using the old field. Extract 15 reports from the report solution, do a quick text search. Find 3 reports affected, change the field reference in the query, alias it to the existing column name||1.5||8|
|Send email about testing the results. Thumb twiddling for 3 days.||–||11|
|Receive go ahead for production. Deploy solution adding the field. Run data update. Deploy second solution with forms and reports.||1.5||12|
User advocate: Ok, Mr SmartyPants, let’s add it to the next sprint.
Three weeks later after the successful sprint…
User advocate: I’ve heard CRM 2016 has this nice auto-complete feature. We realized we would be better off to allow users to type in the box and UI to come up with the suggested values. That should be like 15 minutes to add this to the existing dropdown, right?
Me: (╯°□°）╯︵ ┻━┻