Saturday, September 15, 2007

Code for Change recruiting for the fall semester

Code for Change is looking for a fall intern in the Denver, CO area. The ideal candidate is a computer science student with strong programming skills and experience with web applications (PHP and MySQL specifically).

While we got a lot done this summer, there's still more work to do on CiviCRM. As a Code for Change intern, you'll give progressive organizations an even better open source option for one of the most important pieces of software they use to help create social change.

The internship is part time (20 hours / week), runs until the end of the fall semester, and pays a $1,500 living stipend. If you or anyone you know is interested, apply here!

Wednesday, August 22, 2007

Code for Change is over (for now)

As of last Friday (August 17), the first Code for Change summer has officially come to a close. We set out to turn CiviCRM into a better system for helping organizers spend more time organizing and less time shuffling things around on their computers. CiviCRM is a constituent relationship management system, but that's just a nerdy way of saying that it's a program to save you from spreadsheets-pasted-into-Outlook hell when it comes to keeping track of and in touch with all of your contacts. I'm pretty excited about what we got done.

Code for Change is my brainchild, so I'm a little biased. However, other people seem to think it's cool too. The basic idea behind Code for Change is that by putting a little effort into an existing open source project, we get a lot more out of it than if we wrote something ourselves from scratch or paid someone else to modify an off-the-shelf system. We hired some computer science interns--current students and recent grads, downloaded the source code to CiviCRM, and set about turning it into a system that everyone can use (from large, complex organizations all they way down to my mom who sends out a regular newsletter to her home-based business contacts). In the true spirit of openness, all our work is open source and is planned to be released with the CiviCRM 2.0 release later this year.

From June 4 to August 17, we hacked away at it. We had a lot of help from others in the CiviCRM developer and user community, and their contributions were invaluable. Here's what we all accomplished:


  • We made CiviCRM a standalone system. This means you no longer need Drupal or Joomla to use it. (Those are web content management systems, and not everyone who wants to use CiviCRM uses those.) For people who just need a CRM, this makes it much easier to get CiviCRM up and running and doesn't put a lot of unnecessary CMS functionality between you and your contacts.

  • We added OpenID logins. OpenID is a pretty cool new technology that allows you to use one login for all systems that use it. No more having to remember umpteen different passwords for every system you have to login to.

  • We added support for complex groups and organizational structures. The organization I work for, U.S. PIRG, is a national network of state-based organizations. This means we need a system that can keep all its data separate for each state, but still allow those of us who work centrally for all the organizations (I'm an online organizer, for example) to aggregate that data when necessary. Other organizations (such as political parties) have similar geographic and departmental structures that they need a CRM system to model. CiviCRM is now pretty powerful in this regard. You can put groups inside other groups (inside other groups, inside...) and you can affiliate groups with organizations and sub-organizations.



I'll be working over the next few weeks to actually roll out CiviCRM as the new system that U.S. PIRG uses for its online organizing, so we'll be eating our own dog food. If you want to give it a try now (instead of waiting for the official 2.0 release), you can download a preview release of CiviCRM Standalone here.

And we're not done there. We're looking to hire an intern for the current fall semester and another in the spring to continue working on CiviCRM. If you or anyone you know is interested in applying, let me know.

Cross-posted at Future Majority

Thursday, August 2, 2007

Code for Change at YearlyKos

I'm in Chicago at YearlyKos, currently in a panel on building a grassroots funding culture for progressive infrastructure. In other words, small donations to fund all kinds of progressive work, not just political candidates and parties. That's an interesting idea for funding Code for Change... I'll have to think about that some more.

I'm excited about talking to people about Code for Change and the work we're doing here at YearlyKos. I've already had one person stop me to ask what Code for Change was all about when he overheard that we were working on CiviCRM. So there's definitely enthusiasm out there for open source software that helps build the progressive movement.

One thing that I haven't heard much about from the panelists is the idea of not just raising more money for progressives, but also encouraging progressives to be smarter about what they spend that money on. One of the goals of Code for Change is to show the progressive movement that open source software is a better "third way" for getting the software that we need to help us build progressive infrastructure. It's the flexibility of writing your own code combined with the ability to get up and running quickly by not re-inventing the wheel that you get when buying an off-the-shelf solution. Not only that, but you don't have to spend anywhere near as much money on it, nor is it totally on your shoulders to keep the code maintained and build new features.

I believe progressive organizations, bloggers, candidates, and individual activists should aggressively adopt open source software solutions, and they should find ways to not just be a consumer in that community (which there's nothing wrong with, per se) but to also contribute back to the community. It's been our experience in Code for Change that when we engage those communities and start working with them to add features that a particular organization needs (in this case, U.S. PIRG), those contributions are enthusiastically embraced and become official features of that software.

This is the software equivalent of a broad, small donor base that amounts in a huge funding source. It's just a smarter way to get software developed for our movement, and we need to get that word out. I'll be working on doing just that here at YearlyKos.

Tuesday, July 31, 2007

Poor, neglected blog

Wow, it's been awhile since we posted to the blog! We've been coding like crazy lately, but that's no excuse. So here's an update on where we're at:

We just released CiviCRM Standalone v0.5, which is a very cool release. Not only does it continue to improve on the cool features we created for previous releases (such as the ability to use it as a standalone system, the OpenID login system, and the nestable groups), but it also adds a much easier installation system. We think you can get this release up and running in 15 minutes or less on a Windows, Mac OS X, or Ubuntu Linux computer. So give it a try!

I'll be traveling to YearlyKos this week, and I hope to meet up with folks who are interested in Code for Change, open source, and non-profit technology in general. If you'll be there too, let me know!

Today the CiviCRM folks merged our changes into their trunk. What this means is that the cool features that we've been putting into our CiviCRM Standalone releases which eventually find their way into the bonafide, official, 100% all natural CiviCRM 2.0 release. The plan is to have that out by the end of 2007. That's very exciting news, and was one of the major goals of the Code for Change project.

We're not done yet, though. So stay tuned for more updates on new features and more releases.

Sunday, July 15, 2007

More on CiviFeatures: CiviMember

Much of this information can be found in further detail at http://wiki.civicrm.org/confluence/display/CRMDOC.


Membership Summary


When you first open up the CiviMember page, you will see a membership summary, which allows you to:

View all members of the organization. For each, gives type of membership, start and end dates, the source of their membership (e.g. payment, donation, check), and status: whether the membership is current or expired. For each member, there are links for View, Edit, and Delete.

At the top, shows aggregate data about memberships by type.


There are two options under the CiviMember menu, as well: Find Members and Import Members.

Find Members

There is a robust search function for members, allowing search by all fields: membership status, membership type, start and end date, source, member name, email address. You can search by OR criteria as well, to get contacts who are either of one membership type or another, for example.


Find Members leads to the following features, among others:

Export Members:

You can choose members as search results from the Find Members feature, and export them to CSV files, viewable in spreadsheet applications such as Excel.

Email Members:
You can select a group of members as search results to send an email to.


As for Import Members:

Import Members

Import member data stored in CSV format.
Field mappings: the order in which the comma-separated values in a file are stored in data fields is known as a field mapping. These can be saved for a given source file.

The Import Members feature also has built-in error correction. For instance, an email address field will correct invalid email addresses.

Saturday, July 14, 2007

Nestable Groups in CiviCRM

One of the perpetual problems U.S. PIRG runs into with off-the-shelf software is that most of it assumes one of two usage scenarios:
  1. A single organization with no need to isolate any sets of data from any others beyond a simple user-by-user permissioning system (if your lucky). This is the most common.
  2. Multiple organizations with the need to access the software from many different locations, but with complete isolation between the organizations' data in the system and no easy way to combine it. This is less common.
Unfortunately neither of these scenarios fits U.S. PIRG (and lots of other organizations). We have a national lobbying office in D.C., many state-level organizations across the country, and a few centralized departments that work with most or all of them. So we really need a hybrid of the two options above. People in the state groups shouldn't have to wade through other groups' data to get to theirs (not to mention that an errant "delete all" command or security breach in one of those offices shouldn't affect other groups' data). But at the same time, the central departments need to be able to routinely work with aggregate data across all the groups.

Here's an example: Let's say we have a group here in Colorado called CoPIRG (we do). They have a list of online activists, a list of media contacts, a list of current staff, a list of alumni, a list of student activists, a list of donors, a list of issue experts, and so on. They want to keep all that under the CoPIRG umbrella without it getting all mixed up with other groups' data (potentially even other groups in Colorado; this would be very confusing).

Now let's say we have a centralized online organizing department (we do, and I work in it). What if we want to send an action alert to everyone on every online activist list across the country? We need to be able to quickly combine the CoPIRG online activist list with the Florida PIRG online activist, the CalPIRG list, the Maryland PIRG list, etc.

Most software makes this kind of flexibility awkward at best, downright impossible all too often.

Which brings me, at long last, to the subject of my post. We are working to support this kind of functionality more readily in CiviCRM by making groups nestable. I'm using the word "groups" here to refer to CiviCRM's feature for combining contacts into logical groupings. Making them "nestable" means you'll be able to put groups inside groups inside groups inside groups...

Here's how this would play out in the example above:

CoPIRG would be a CiviCRM group. So would CalPIRG, Florida PIRG, etc. Each of these groups would have a nested sub-group called "CoPIRG Online Activists," "CalPIRG Online Activists," you get the idea. We would also have a top-level group called "National Online Activists." Each of the "XXPIRG Online Activists" groups would also be sub-groups of this. (We're supporting multi-parent relationships between the groups.)

CoPIRG staff would have read/write permission for their whole group (and thus any sub-groups of it as well). The staff in my department would have read/write permission for the entire National Online Activists group. This keeps our data isolated when it needs to be, but combined when necessary too.

We would then repeat this setup for the local and national media lists, alumni lists, donor lists, etc.

Obviously this is nowhere near the only usage scenario nestable groups will enable CiviCRM to support. The new flexibility, especially when combined with the new permissioning system being planned for the 2.0 release (also when nestable groups will make their debut), will make CiviCRM a much more flexible system overall.

We already have the basic functionality working. The main thing left to do is implement an intuitive widget to create and edit group nesting relationships. We're hoping to get this out the door in the next few days as CiviCRM Standalone v0.4. Stay tuned!

Friday, July 6, 2007

CiviContribute

CiviContribute enables you to collect and track and create reports on contributions from members. With customizable collection pages and many Payment Processors to choose from it's easy and secure. Offline contributions can be imported using the import feature of CiviContribute. Searching the data is easy with the search tool and there are a wide number of criteria to choose from for searching including Contributor, dates and contribution form used. You can create contribution pages by copying previous contribution pages or one of the example pages, as well as creating pages with a 6 step wizard.
Collect, track, report -- CiviContribute takes care of your constituent contributions.