CRM Goals

Events happening in the community are now at Drupal community events on www.drupal.org.
jtsnow's picture

It looks like there is a good start on the basic architecture for a Drupal-based CRM. I was in attendance at the CRM BOF in Copenhagen. There were a lot of ideas being tossed around there. I think it would be good to have a clear set of goals and definitions for what we are building.

What is our goal?

When someone says, "Let's build a CRM in Drupal," it could mean several different things. Is the goal to provide a set of modules that can be used to build a CRM? Is our goal to build a basic, but extensible core CRM module that people can simply enable on their site and begin using? Is our goal to build an API that is friendly for developers to use?

Right now, the technical stack of the CRM system looks like a collection of modules that will help someone build a CRM. I could build a simple CRM system in Drupal 6 with all the modules that are out there. It may not be as flexible as what is being proposed in this group, but it is still possible. Continuing with this approach would best serve people who build Drupal sites who need their CMS and CRM bundled together in one site. It would also server people who wish to build install profiles and Drupal distributions that are meant to be used as a CRM. The benefits of this approach are that it is quite flexible and it builds on top of . The cons may be that it is not a simple solution. It would be difficult to have a clean, simple API and the stack of modules used to create a basic CRM could be never ending.

What other options are there? Drupal's CMS functionality is mostly bundled into one place: the node module. Modules are then written to extend the core CMS functionality. It takes care of the most basic tasks of managing content: multiple authors, revisions, workflow (published/unpublished), storing data belonging to each piece of content, etc. The node module is extensible because of a well thought-out API. I propose that it would be possible to build a simple, core CRM module. It would only handle the basic requirements of a CRM. These may be storing information about contacts, segmenting contacts, and contacting contacts (printing mailing labels, sending email). The benefits to this are that it would allow more focus on a single API rather than a collection of modules.

I'm not sure which choice is better, but I'd like some open discussion on what exactly we are going to achieve.

Comments

You're right

chriscohen's picture

You're quite right when you envisage a single core CRM module. I think the strategy is (correct me if I'm way off) something like:

  • Only stuff that every CRM absolutely cannot do without should go in the core.
  • Other stuff should go into separate modules, but if it's stuff that most people will need (but not fundamental to every CRM), the supplemental module could be bundled into the main CRM download but not enabled by default.
  • The UX should not suck. If it's a pain to use, it's not going to get used.
  • Where 'the Drupal way' exists, try to stick to it, rather than re-invent the wheel.

Do feel free to add to this. Perhaps this might evolve into a wiki page or something at some point if there's a need for it.

Goals versus constraints versus targets

jp.stacey's picture

I think a goal needs to be a much higher level than this. "Stuff that every CRM absolutely cannot do without" sounds like a formal project constraint, but it's as generalized as a goal: who decides what a CRM cannot do without? I also think that Drupal CRM's goals should have nothing to do with module separation. That's a detail of implementation.

Maybe we need some formal methodology here: unfortunately, I personally don't know of any except by hearsay. If anyone has a tame Prince2-trained project manager to hand then please point him at this discussion :)

The best distinction I think we can make is to have goals as something inspirational, then have formal project constraints on the one hand and achievable targets on the other: constraints keep us on a particular path, and targets help us define milestones that make sense. Chris, I've taken your suggestions - and also some of the things which arose re: discussions of other CRMs at the BOF - and hopefully integrated them into what follows:

Mission: to build a native, functional, usable Drupal CRM alternative within a reasonable timescale and with final approval of as many stakeholders as possible.

Goals:

  • Simplicity: define a minimum feature set for first release and stick to that.
  • Extensibility: it should encourage and work with an ecosystem of extensions.
  • Usability: all key users should be comfortable performing their core operations.
  • Integration: a number of existing external CRMs should be integratable with it.
  • Maintainability: the community must trust in both support and also stability of APIs.
  • ... ?

Constraints:

These could change as we start specifying the work further, but include:

  • Any existing Drupal constraints: code quality, respect for existing hooks and doing it the Drupal way.
  • If an existing Drupal project can do it (e.g. Views, Profile2) then integrate with that instead.
  • Usability is defined by the success and "feelgood" factor of key user journeys, not by general accessibility of functionality to the user.
  • What counts as core should be relevant to the end user, not the developer. Out of the box, the CRM must be usable, not just functional.
  • API functions are sacrosanct after a release, and need to be documented to separate them out from functions that we might want to change later.
  • ...?

Targets:

These could be anything, really, but I think after the first couple of milestones they really have to be user-oriented e.g:

  • Model layer defined in the core architecture complete
  • Maintain basic contacts and address details
  • Export contacts as a vCard, with the ability to easily add (and administer) extra export-format modules
  • Handle new activities and scheduling future reminders
  • ...?

Targets will really come down to satisfying specific and specified user functionality and how we go about doing that. This bit really needs more spec based on use cases, so any work people can do to get use cases out of clients (or elsewhere) would really help.

This all neatly separates out three sets of ideas: 1. what the project wants to achieve 2. how we go about doing it 3. how we know it's done.

Shall I stick this on a wiki page and anyone can fiddle with it?

Another Major Goal

zorbtrauts's picture

Modification: The Drupal CRM API must be robust and easy to use.

+1 to that!

jp.stacey's picture

+1 to that! The APIs are really important in the long term because we want to not have to do all the work ourselves! I think the project will ultimately stand or fall on how easy it is to integrate with it. Third parties will forgive a fair few gaps in a project if they can build and then distribute their own bridges for those gaps.

I've rewritten the extensibility goal to reflect that. I've also added to the API functions constraint to stress usability, and I've added a new target - and expanded an existing target - to stress that we want to be able to build basic modules through the APIs to really call the APIs "done." See http://groups.drupal.org/node/92294

To borrow your node module

joachim's picture

To borrow your node module analogy: the reason we're building this with a collection of modules is the same reason that before you can install Drupal's blog module to have a simple blog, you also need Drupal's system, user, and node module. These provide the base that blog module sits on top of.

I propose that it would be possible to build a simple, core CRM module. It would only handle the basic requirements of a CRM. These may be storing information about contacts, segmenting contacts, and contacting contacts (printing mailing labels, sending email)

Some of that would probably sit above the Party module in the planned stack. Feel free to add that to the wiki page. Though for sending emails there are already good modules, such as simplenews and messaging -- we should make sure we interoperate with those rather than reinvent. Something like mailing labels would just be a nicely themed View the module would provide.

Sorry, +1 to jtsnow's

jp.stacey's picture

Sorry, +1 to jtsnow's original point about a simple, core CRM module. I do think, though, that that has to sit on top of a number of generic components, some of which simply don't exist yet in the D7 module space. I think the architecture shows a good road map for this, but the CRM will probably sit roughly where Joachim suggests.

Methods of contacting

pingers's picture

Methods of contacting contacts is definitely outside core... sure, provide the API to contact, but actual implementation of a means of contact sits outside core.

again, flexibility

zorbtrauts's picture

I agree. It should certainly be possible to use core Drupal CRM alongside a Drupal email solution... but someone should also be able to connect it with Mailchimp, Constant Contact, or some other 3rd party app if that is what will work best for them.

On the present approach with multiple modules

jalneal's picture

The idea of building a lot of small modules that achieve particular tasks seems to utilize the model that has made Drupal such a successful project. The unique thing about Drupal that makes it so extensible is the fact that you can combine so many different functions using the framework that Drupal has laid out. If the CRM project is nothing more than a bunch of modules though, then when someone was to pick between CiviCRM and DropCRM, Civicrm would appear very attractive, because it's already set up. That said, I think there should be some real consideration to branching out the Drop CRM project into 4 major components:

  • One group focuses on module development and making sure that the modules provide the needed functionality;
  • One group that focuses on building a Drop CRM distribution that works on adding modules together and building features for different components of a CRM that can be used in the distribution. This would include the pages for each feature: Things like contacts, accounts, tasks, etc.
  • One group that focuses on the UI and theming, that focuses on how to make the site most usable.
  • One group that focuses on documentation, testing, (including maintaining a demo/platform site) and feedback. Feedback would include not just giving opinions, but researching other project capabilities such as CiviCRM and SugarCRM, and finding out what businesses and other less technical users like and don't like.

At the end of the day, Drop CRM could have all the functionality of CiviCRM or the like, but as a distribution it leaves it incredibly extensible, allowing those of us who are contributors and consulants to continue evolving the distribution with more add-ons, theme enhancements, etc. If it was just a big CRM module, most contributions would still depend heavily on developers and coders - nothing wrong with that, but its a smaller pool of resources. Further, as features develops, in the future e-commerce and other solutions that create mashups of more lightweight modules could easily be used to extend such a CRM site, or some of the CRM modules could go on to be used for other purposes doing their more basic tasks. If anyone is not familiar with distributions, check out Drupal Commons (Acquia), Atrium (Development Seed), Openpublish, and/or Open Scholar to see exactly what kind of capabilities you can get from mashing up a lot of simple modules with 2-3 created for a specific project.

CRM API

Group organizers

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds:

Hot content this week