A few weeks ago I had a client of mine ask me about how complex it would be to develop a custom CRM application similar to the one being provided by highrisehq.com
What he essentially wants to do is provide external sales reps within a specific industry access to use this CRM application for managing all of their contacts, clients and communication/tasks.
The key difference between highrisehq and this system is that he wants to allow each of these sales reps the ability of "sharing" data with one another. Now what I mean by this is the following:
Lets assume there were two separate CRM account users within the system, each of these accounts have thousands of contacts and hundreds of relationships (linking companies to contacts, contacts/companies to projects, and contacts to messages/tasks/notifications).
Now... what he wants to do is allow both of these sales reps each with their own independent accounts to be able to share information with one another.
My thought was that the first thing which should happen here is a "share" request be initiated through the system by one user to the other user. Upon this share request being accepted both accounts now have the "ability" of sharing info with either other.
My thought was that once these accounts are linked that user can now show up as a "sharing user" and show up in all areas where you would normally set the view/edit permissions for individual users.
Where things get complicated in my view is how to show the "activity stream" for example because essentially now the system is not just showing all the activity for my account but also all the activity for external accounts for which the user has been granted access.
Furthermore... if a user has lets say 100 accounts he is sharing information with is there anything I can do to ensure the system does not slow to a crawl?
What is the most logical, best and least expensive db logic which should be used to create these relationships so a query on a single account returns data at the same speed as when having to access data from multiple accounts?
Any other key aspects which you guys feel should be considered or are "must have" features?