courtly
courtly
courtly
courtly

Upcoming Events

San Francisco CiviCRM Meetup - February 8th, 2012
February 8th, 2012
Come meet others from the Bay Area who are interested in, using or developing (more...)

UK usergroup - London meetup
February 8th, 2012
Come and meet others from the UK that are using CiviCRM or are interested in (more...)

London user and administrator training
February 23rd, 2012
A comprehensive two day hands on training course covering the configuration, (more...)

CiviCRM London sprint Feb 2012
February 27th, 2012
Following the CiviCRM training here in London, we will have a CiviCRM code (more...)

UK South West - CiviCRM Meetup
March 20th, 2012
Come meet others from the Area who are interested in, using or developing for (more...)

[Bristol, UK] user and administrator training
March 21st, 2012
A comprehensive hands on training course covering the configuration, (more...)

San Francisco user and administrator training
March 29th, 2012
A comprehensive two day hands on training course covering the configuration, (more...)

CiviCRM Usability, Test and Code Sprint - San Francisco (March 2012)
March 29th, 2012
This usability, code and test sprint is targeted at CiviCRM users and (more...)

CiviCon 2012 San Francisco Bay Area - April 2nd 2012
April 2nd, 2012
CiviCon is THE annual event bringing together the people who use, develop, (more...)

CiviCRM Documentation, Test and Code Sprint - after CiviCon San Francisco (April 2012)
April 4th, 2012
This sprint is targeted at CiviCRM users and developers who want to work on (more...)

CiviCRM Components

Tools for engaging your supporters...

CiviContribute


CiviEvent


CiviMail


CiviMember


CiviReport


Application of Civicrm to Support Office and Campaign operations of a State Legislator

Not Just a Contact Database

These optional components give you more power to connect and engage your supporters.

  • civiCASE

  • Case management for clients and constituents.

  • civiEVENT

  • Online event registration and participant tracking.

  • civiMEMBER

  • Online signup and membership management.

  • civiMAIL

  • Personalized email blasts and newsletters.

  • civiREPORT

  • Report generation and template management.

December 4, 2009 - 17:33 — Will Brownsberger

I am member of the Massachusetts state legislature. I represent 40,000 people, 25,000 of whom are registered voters. I run for re-election every two years.

During the non-campaign seasons, my small (one-paid staff plus volunteers) legislative office handles an average of roughly 30 email conversations and roughly 5 new constituents per day. We work on a range of constituent and legislative issues and I run an issues discussion website based on Wordpress at willbrownsberger.com.

Until recently, my office used a constituent relationship management and campaign system offered by a Massachusetts vendor, Sage Systems. Sage is a back office system. I began reassessing my systems earlier this year. I wanted to do two things: Improve my constituent service system used by legislative staff. Improve my campaign system and allow broader online access to support decentralized grassroots campaigning.

I put a small group of volunteers together and we considered a range of options. Fortunately, one of us had run across Civicrm. We are very happy with the progress we have made, but we are still working. The CRM is fully implemented and the public end of the new site is taking form at mywillbrownsberger.com.

I'm grateful to the Civicrm community and post this account of our experience in the hopes that it is helpful to others. Over the next couple of weeks, we will post the routines that we use in batch processing and will certainly contribute any modules that we develop as time goes on.

Over the past few months, we have migrated to Civicrm in the following major stages:

  1. In August, we converted our contacts and activity records to Civicrm. Staff immediately felt that the user interface for routine activity tracking (calls, emails, case work) was much smoother. Response time was much better too -- we invested in a pretty high quality virtual private server.
  2. In September, we converted our bulk email processing to Civimail from Lyris (which was the product associated with Sage) and we were able to close down the old system. This was a hard technical climb for us, lacking familiarity with email servers, but we were able to get a working configuration going on our virtual private server. The control afforded by the VPS was essential. We are very pleased with the tight integration between civimail and the rest of civicrm which gives great flexibility in list selection.
  3. In October, we began refreshing voter lists in the system. This was a major data processing task. We had to match voter lists to the existing set of contacts, which were basically an accretion of old voter lists that Sage had allowed to accumulate. We wanted to preserve contact records to which we had added activity records, ratings (ratings like 'supports Will', does not . . .), etc. over the years, but also to have a fresh accurate voter list that didn't have a lot of long departed people on it. We created a custom table that has all of the fields of the voter list and then in a number of careful passes purged departed voters, matched the voting list table to the contact table, deduped old to old, new to new and old to new. We only used the civicrm import function for the final step of storing new contacts for people on the voter list that didn't match any existing contacts. The rest we did with direct SQL queries. (Import/update is too slow -- it seems to do a huge amount of CPU processing, suggesting some bad joins). Finally, we have in place a contact table that has all of our old value-added data, but no deadwood, with the voter list data hanging off it as a custom field group.
  4. Additionally, we have uploaded publicly-available voter history data -- which recent elections they voted in -- in a custom field group.
  5. In November, we turned to householding. For efficient campaign and constituent mailing, good householding is essential. We took the following approach.
    • We wrote an address parser to populate the postal fields that are present on the civicrm_address table.
    • We obtained property lists from our local assessors offices and parsed them into the same address format. We stored an intermediate table of housing units, in which each record corresponds to a single housing unit -- this involved splitting records on the property list according to their property class (single family, two family, etc.). We took the approach that the housing unit list should be conservative -- we would not engage in any guesses that would lead us to listing any spurious units.
    • We then stored the housing units in the contact table as records with contact-type household (names like "two-family: 123 main st apt 2")
    • We then linked individual type contacts to household type contacts using the member of household relationship records based on strict address matching (including a unit number in any multi-unit building). The strict address matching we required meant that only about 85% of our individuals were linked to households, but it assured that we weren't creating bogus households comprised of people in different apartments with the same street address -- this was a problem we had experienced in direct address matching using only the voting lists without the housing unit check. We are developing a routine that will update custom greetings appropriate to each household and unmatched individual for mailing purposes.
    • The address parser, the household relationship routine and the salutations routine (which is in progress) will all as nightly batch processes that recreate all relationships. This will support the batch addition of new voter data as time goes on and is, of course, easier to write than a real time update. The first two are fully in production.
  6. Over the past few weeks, we have activated the fund-raising system of Civirm and used the profile subsystem to create volunteer forms which are now accessible at mywillbrownsberger.com.
  7. Over the months to come (before a re-election campaign heats up in the Spring of 2010), we hope to develop and stabilize a distributed data entry system that will allow supporters to login, search for voters, recruit them and record the results of their canvassing. The system as we have it now is perfectly adequate for a precinct captain to control data entry. We have only 14 precincts, so civicrm/drupal database segmentation would be workable. But we want to allow people we don't know to pitch in and so we need to preserve a full audit trail of activities, rather than allowing users to overwrite a single report of canvassing results.
  8. We are very pleased with the geocoding functionality which works like a charm and will be a part of our canvassing system
  9. We initially implemented Civicrm as in the Standalone version, but found that there were a number of small security related bugs (ACL caching seemed a little flaky). We bit the bullet and took on the Drupal environment and are very pleased with the front end Drupal has allowed us to get started on at mywillbrownsberger.com.
  10. One important issue for us, to comply with campaign finance and ethical rules, was to segregate legislative from campaign functions. Drupal security and theming allows this nicely. Legislative users see a completely different site, showing only the Civicrm backend and only those functions that they should have access to (no fundraising). They log in through a portal on the discussion website to special page-themed login page and are never exposed to the campaign front end.
  11. For those who are interested in mind-numbing details, most of our more detailed development notes are visible at mywillbrownsberger.com/forum. If we opening ourselves to some kind of security vulnerability by anything we've posted, we hope you will let us know! We'll brush up and post the batch routines we have developed some time over the next weeks.

    Happy to answer any questions. My email is willbrownsberger@gmail.com.

( categories: )

Comments

Great post!

Will

Thanks for the great post!

Households are definitely one of those areas where people wonder when they are best used and your case study will definitely help them understand that. It also makes it pretty clear that there is work to be done on making Households as easy and flexible as they might be.

It is also good to see how you have approached the issue of campaign vs representative functions.

Andrew