Time Flies in the Cloud

May 4, 2012

Wow!  I just realized that it’s been several months since my last post and I’m overdue.  A lot’s been happening, both for Citizen Schools in general and the technology function specifically.

For Citizen Schools, the most exciting event is that we’re opening in Chicago this fall in two schools.  As a district, Chicago Public Schools is very excited about Expanded Learning Time (ELT) and we’re getting a great reception from schools, parents and funders.  If you live or work in Chicago, we are on the lookout for staff as well as volunteer Citizen Teachers to teach apprenticeships there (as well as in our other locations).  Reach out to me and I’ll be happy to put you in touch with our staff in Chicago.

In the Tech function, it’s been crazy busy the last few months.  Our fiscal year begins July 1, so there’s the usual round of budgeting and other annual planning tasks necessary to get ready for the new year, but additionally, we made a big decision in February that has the potential to profoundly impact Citizen Schools:  we’re dumping Microsoft Exchange and moving the entire organization (450 + users) to Gmail and (eventually) Google Apps.  And we’re doing it now.  Not in six months or a year, but this spring, with a go-live date of June 21.

As with many  non-profits, we’ve been running Exchange (MS Exchange Server 2003) in-house for a number of years and it’s been a relatively stable environment for us.  As the mailstore continues to expand, it’s easy to add storage.  User maintenance is pretty straightforward.  In the four years that I’ve been with the organization, we’ve had minimal downtime.  So why change?

A few good reasons:

  • We needed to upgrade from Exchange 2003 to a newer version:  With Exchange, you don’t just upgrade, you migrate from a server running one version to a new server running the next one.  We’ve got limited Exchange Server competency, and none in Exchange 2010.  That means either spending the time and resources to get up to speed on the new version, or hiring consultants to do the job for us.
  • Running Exchange in-house has become a business continuity risk:  Of our 450+ users, only about 60 actually work in our HQ office where our ‘data center’ is located.  In the event of a power or internet outage at that location (which seems to happen periodically), the entire organization grinds to a halt.  We’re not in a position to have redundant power and connectivity, so something needed to be done
  • Integration of email to Salesforce:  Although there are several applications that will do synchronization between Outlook and Salesforce, they all require installation and support on the client-side.  None of them were as easy as we needed them to be for our end-users.

Why Gmail?  Pretty much a ‘no-brainer’:

  • Google Apps for Education is free for up to 3000 users.  A hosted Exchange solution was going to be substantially more expensive.
  • An increasingly familiar interface for staff.  Almost everyone has a personal Gmail account, and many of our younger staff already want to forward their exchange email to their Gmail accounts.
  • It’s ‘born cloud’.  In contrast to a hosted Exchange environment which is simply remotely accessing someone else’s Exchange platform, Google is built for the cloud from the ground up.  As we migrate, we’re not connecting Outlook to Gmail – we’re moving 100% to the web interface.
  • Salesforce integration.  There are a couple of great tools out there for integrating Salesforce directly into Google Apps.  We’ve chosen CloudFactor by Appirio, which makes it easy to create leads and contacts, and to log calls and meetings in Salesforce directly from Gmail.  We think this will be a game-changer for user adoption around activity-tracking in Salesforce.

In order to do this migration this quickly, we knew we needed help (as we knew we would for an Exchange migration), so we’re partnering with cloud consultancy Appirio to give us the benefit of their experience.  We’re about half way through the project and so far it’s been AWESOME!  They know their stuff, the price was reasonable and the approach has been spot on for our needs.  I’m really looking forward to getting through to go-live with them.

The second thing that’s been keeping us busy has been an exercise in fire-fighting and rapid Salesforce application development.  Part of Citizen Schools’ business model is our two-year Americorps fellowship.  Our teaching fellows are young educators who are the backbone of our school-based program.  Because of the duration fo the fellowship, we have a new cohort to hire every year of several hundred staff.  We currently use Taleo for our recruitment management, and it became clear this spring, that Taleo was unable to give us the reporting and tracking that we need to manage against goals as well as to link important characteristics of our recruits to their eventual performance as staff members.  As a result, we’ve taken on bringing the core data from Taleo into Salesforce and developing the reporting and analytics within Salesforce.  In the last four weeks, we’ve designed and implemented a data model to support our needs, the business processes to manage data import (still quasi-manual using Demand Tools) and the dashboard and individual reporting to allow regional and national Talent management to know where they are against targets and to develop strategies to hit them.

It’s been a great reminder of the flexibility and power of the Force.com platform and a major reason why I love working with it – being able to deliver significant business value in a short period of time is transformational.

So that’s what I’ve been up to in the last couple of months.  I’m going to try to get back to a more regular posting schedule soon.  If anyone has any requests or questions, please let me know.

Oh and by the way:  Sounds like the Blackbaud Convio merger is due to close today:  boo!


The Convio-Blackbaud Merger – One Customer’s Perspective

January 20, 2012

Convio and Blackbaud have been bitter rivals in the fund-raising and constituent relationship management software arena, particularly for medium to large size customers, so Tuesday’s announcement that Blackbaud was acquiring Convio came as something of a shock to the non-profit technology world. There’s been a fair amount of commentary and speculation online over the last few days from bloggers, vendors of competing products and consultants who work in this space (see this post on NTEN for a link to some), but I haven’t seen much posted from actual customers so far. As a result I thought I would try to provide a perspective from someone who’s been a customer of both companies, using their flagship products. This isn’t to say that those other perspectives aren’t important – I just want to round them out a bit.

From Blackbaud’s perspective, the acquisition makes a lot of sense: they bring their primary competitor into the fold, gain a better foothold in the cloud and SAAS-based services(on top of their prior acquisitions of eTapestry and Kintera Sphere), supplement their service-offerings (from Convio’s online marketing/email services) and solidify their position as the ‘goto’ vendor for non-profit solutions. For Convio as a company, the benefits don’t seem so clear: the Common Ground/Luminate products have been direct competitors to Blackbaud’s Raiser’s Edge and Enterprise CRM products, capitalizing on the native capabilities of the Force.com platform to deliver added value for customers.

As I’ve posted elsewhere on this blog, when I joined Citizen Schools four years ago, we were solid Blackbaud customers with both their Raiser’s Edge and Financial Edge packages installed. In 2011, we left them completely (or so we thought), by migrating our constituent management and fundraising to Convio’s Luminate CRM package built on top of Salesforce.com and our financial systems to Coda from Unit 4. We’ve been live on Convio for about three months at this point and are generally satisfied with what we’ve got.

Tuesday’s news honestly has me concerned. When choosing a software vendor and product, I’m not just evaluating the current set of functionality against my requirements and budget, but am also looking at the company’s past and potential future. When we decided to leave Blackbaud, it was in part because neither their past nor their future was that compelling: The Raiser’s Edge is built on ten-year old technology, required substantial in-house resources (financial and staff) to host, support and enhance, wasn’t responsive to the changing needs of end-users and wasn’t scalable from a financial perspective. Neither was there a clear roadmap for the future – the promised version 8 of Raiser’s Edge had been talked about since at least 2006 (and still hasn’t materialized) and there seemed little understanding of the importance of mobile and social tools. It seemed that growth through acquisition rather than innovation was the strategy.

Convio seemed the opposite: by building on top of Salesforce.com, the Common Ground/Luminate product has mobile, social and agile as part of it’s DNA and leverages the best-of-breed multi-tenant SAAS architecture to avoid the supportability and maintainability headaches of on-premise software. Yes, they too have a (short) history of acquisitions, but they have also showed a commitment to integration (of their analytic and online marketing tools) that seems to be more of an afterthought for Blackbaud. It’s still an expensive product, but the value that we’d be getting and the future value that I saw coming down the road, combined with our already substantial use of the Salesforce platform made it a choice worth making.

Now though, I question some of that future value. After having spent millions (my guess) developing it’s enterprise CRM product and more millions in acquisitions (including Convio), what incentive does Blackbaud have to invest heavily in the ongoing development of the Common Ground and Luminate platforms, particularly if they cannibalize sales of their other products? Very little, I suspect. Instead, leverage the online marketing and new analytics platforms and integrate with Raiser’s Edge and/or Enterprise CRM. Common Ground and Luminate will likely remain as offerings for customers who want a true cloud solution (which Blackbaud has thus far proven unable to deliver), but I expect little in the way of additional enhancement there, which is ironic, because the capabilities of the Salesforce platform are where real value is going to be added over time (Salesforce touch – access on any device anywhere, Chatter providing context on data and enterprise social collaboration, an open development platform to allow individual organizations to quickly customize to meet their needs, and deeply discounted through Salesforce’s commitment to getting great tools in the hands of non-profits).

So what does it mean? Consolidation happens and we have to roll with it, though we may not like it. This feels like a real opportunity for smaller competitors to jump in. Affinaquest, Sage and CiviCRM as well as other, open-source or custom products all have opportunities here, particularly as Blackbaud digests it’s newest meal. I know that if I were still in my decision-making phase, the decision to go with Convio would not be nearly as clear as it was 9 months ago. I’d be looking for alternatives that can offer not only the basics of fundraising and CRM, which are becoming increasingly commoditized, but that also satisfy the mobile, social and agile imperatives that are increasingly critical to non-profit success, whether it be in technology or achieving the mission.

I’ll be watching carefully to see what comes next.


How Salesforce.com Enables Non-Profits to Manage All Constituents in One Database

December 21, 2011

I read a post on the Idealware blog today that had the title ‘Multiple Constituent Groups, One Database? How to Track Everyone Who’s Anyone to You’ that laid out a nice method for analyzing the relationships between different groups of constituents and then went on to conclude:

‘The vision of a single database is attractive, but the reality might be neither practical nor cost-effective for your organization. Should you track all your constituents in the same system? Only if it makes sense for your particular situation. At the end of the day, that’s not easy to know.’

I’m writing this post to rebut this argument from the perspective of a non-profit that is moving to do exactly that – create a single database for managing multiple groups of constituents – and some suggestions for how and why other non-profits should consider doing exactly that.  In fact, I would argue that your default position should be to use a single database and only consider having an additional one(s) in extreme circumstances.

Back in June, I posted about how we’re currently using Salesforce.com at Citizen Schools and laid out the different types of constituents that we’re tracking in the system (current staff, volunteers, staff alumni, current students, student alumni, leads for potential staff).  Since that post, we’ve brought all of our donor infomation into Salesforce and also begun tracking key district and school partner contacts as well.  We’re currently planning on bringing all other constituencies under the Salesforce umbrella over time.

So what’s the value proposition for bringing everyone into one system.  Here are a few important ones:

  • One system increases reduces training costs by providing a single interface for users.  Forcing users to move between different systems to accomplish tasks is inefficient and confusing.  With multiple systems, users need to concentrate more on where they are working and switching between applications, rather than just logging in to the system and working in it all day.  Additionally, given the number of ‘hats’ that typical non-profit staff wear, having one system allows all users to know how to use that system to access data even if it’s not their primary job, or to transfer within the organization and not have to learn a new system on top of new job responsibilities.
  • Having all the data in one place gives us the opportunity to reach out to different constituencies as needed.  Earlier this year, when Americorps funding was threatened in Congress, we needed to reach out to all of our constituencies with a call to action.  Because we did not yet have all of our donor contacts in Salesforce, the process of gathering the list to do our outreach was significantly more complicated.  A single source allows you to segment your lists much more effectively rather than having to pull segments from multiple systems and then compile.
  • Reporting from one system is vastly simplified, particularly when it comes to getting data for funders.  You’ve had to deal with it, a proposal for a funder that wants to know everything about your business, from number of (clients/students served/etc) to the number of donors and revenue data for the last ten years.  One system makes it easy to get at that information.
  • Finally, constituents are rarely static; they have a history with your organization and their relationship with you will change over time.  A client may turn into a donor, or a donor to a volunteer, or a volunteer to a key advocacy or policy connector.  Maintaining their history in multiple systems means you never have a complete view of the constituent’s relationship with your organization, which means that anyone trying to do outreach to them is operating at a disadvantage.  Additionally, building and maintaining integrations between systems is a complex process, taking resources that are either hard to come by, or if available, could be better deployed adding business value (I know this from experience).

So how does Salesforce.com (or another single database  system) allow this to happen.  To me, the answer lies in the flexibility of the platform. Fundamentally, regardless of the complexity of a constituent’s information, there is a core set of data (name, address, email, contact/do-not-contact status) that’s going to be captured.  In Salesforce, this would be maintained in the Contact object (and most of those types of fields are already built in).  Your additional data would be reflected either as additional custom fields on the Contact, or as related records (for example multiple records of a constituent’s volunteer experiences).  The wonderful thing about the Salesforce platform, is that all of this configuration can be done without writing a line of code or involving your technology team/person/consultant.  When you need to add fields, it can be done in minutes, by anyone with the requisite administrative access and training, rather than relying on your overworked tech folks.

‘But’ you say ‘I don’t want to have to see empty fields of volunteer related data when I’m looking at a client record!’  Never fear, Salesforce allows us to define different views of the data by creating different page layouts for different types of records.  Additionally, these page layouts can be limited by a user’s role and security profile, so you can segment access to data within the same system.  This works really well for reporting, as you’ve got your core data accessible from one location, as well has having your constituent type-specific data accessible to authorized users.

You also gain the advantage of having one interface with a common set of tools and usage conventions to learn, accessible to any computer, smartphone or tablet with access to the internet.  Increased accessibility and ease of use reduce barriers to  adoption and usage, which in turn leads to better data completeness and quality.  Try getting that with all of your multiple systems!

Penultimately, there’s the question of cost.  Salesforce gives you your first ten seats for free and offers a substantial discount for all additional add-on products.  This can still add up to a substantial amount for a large roll-out, but when you compare the costs of purchasing or building multiple systems, hosting them internally or externally and maintaining them, you’ll find the total cost of ownership equation to be in Salesforce’s favor.

Finally, there is a vibrant ecosystem of add-on applications on the Salesforce AppExchange, many free or discounted for non-profits, that can be used to enhance your organizations processes, as well as a solid core of consulting partners who can assist with more complex implementations.

To sum up, there may, in fact, be cases for having more than one system, but you should evaluate the business case very, very carefully and truly assess the costs (dollar, time/efficiency and opportunity) before heading down that path when compared to the costs and benefits of the Salesforce option.


How Citizen Schools has Deployed Salesforce Chatter – Part I

December 12, 2011

Last week, my team had the opportunity to present our use of Chatter to the Boston Non-Profit Salesforce User Group and I thought I’d share the gist of what we presented here.  A huge shout out to my colleagues Julianne Diamond, Shrina Amin, Kate Berlent and Colin Stokes for putting it all together and making a compelling presentation.  This is Part I of a two-part story, focused on how we rolled the system out.  Part II will cover some reflections and best-practices.

At Citizen Schools, we’ve had access to Chatter from the pilot stage, when we were evaluating it as a tool/platform for use with our online community.  It didn’t’ work out in that situation, but we were able to turn it on and get some preliminary experience with the platform over the course of the next year or so.  During this period, we had several geographically distributed cohorts that began using Chatter to support their collaboration and share best practices, with good success, but limited uptake by our relatively small (30 users) population.

Last spring, as detailed elsewhere, we decided to move our fundraising operations off of the Raiser’s Edge and into Salesforce.  As we began planning for this transition, it became clear that we had an opportunity to leverage Chatter more effectively at the same time, both to promote collaboration by our staff who were focused on external engagement work (fundraising, volunteer recruitment and policy/advocacy) within a given region as well as for the additional groups of geographically-separated staff who could share best-practices, support and news with each other.

Coincident with this realization, two new tools from Salesforce arrived to help facilitate the general roll-out. The first was the Chatter desktop application, which allows anyone with a Chatter account to easily stay on top of their feed, even when they aren’t inside Salesforce.  Given that Salesforce work is just a part of a staff-member’s day, this application is a key tool to keep Chatter in the front of people’s minds.  The second tool was the rollout of the Chatter Free license.  This license type allows you to invite any member of your organization to join Chatter at no cost.  Because you can simply ‘invite’ people to join Chatter by clicking a button, it makes for a very low barrier to entry,  and it allowed usage to spread virally, along natural lines of communication, rather than in a top-down fashion.

Over the course of the summer, we began pushing usage from a central perspective as well, enlisting several champions within senior management who saw the value and were interested in helping solve the organizational communication problem (which we call EmailFail internally).  We developed and published guidelines (and actually did the document development through Chatter Files) and intentionally moved more group work into Chatter Groups.

When we went live with our Convio Luminate solution in October, at a management strategy retreat focused on external relations work, we also pushed Chatter heavily as a communication tool.  We created a group and hashtags for the retreat and asked for questions and commentary about the retreat to be posted to Chatter.  We also got all users set up on Chatter Mobile and Desktop as quickly as possible.

At this point, we’ve got a fairly active core of users posting status updates and links on a regular basis, but usage is down from the peak that we hit during the retreat.  We’ve also not yet really cracked the code for having people effectively updating Chatter on records and following records.  There are some concerns about confidentiality (our sharing model is pretty open), as well as a more general feeling of being overwhelmed (as we doubled our number of Salesforce users with our October launch), so this will definitely be an area for us to work on in the coming months.


3…2…1…Liftoff

October 25, 2011

It’s been a while since I last posted here, but with good reason – we’ve been heads-down getting ready for our launch of Convio’s Luminate CRM product. Last week, as the culmination of six months work, we finally went live, with the added bonus of rolling out Chatter as an organizational communications tool to our Leadership Team. Exciting stuff (well, at least to us)!

Immediately upon launch, I had to head out to Los Angeles with my family for a wedding this weekend and we had a chance to get a day at Disneyland. After riding a series of roller-coasters, I came to the realization that a project launch has some similarities to a roller-coaster: you can think of all the project activities leading up to launch as akin to the process of hauling the car up to the top of the track, gaining a huge amount of potential energy that will be unleashed when you go live. In addition, for a project team, the period after launch can feel a bit like an out-of-control roller-coaster, as your users get hold of your carefully-crafted system and immediately begin twisting it into shapes that you never would have imagined.

Upon reflection, however, it seems that while a launch can feel like an out-of-control Disney ride, I think a better metaphor is that of a rocket launch. Our project work, designing business processes, converting data, configuring the system and training users is more akin to the careful planning and preparation that goes into a successful satellite or space shuttle launch: filling the fuel tanks with liquid oxygen, doing the orbital calculations and training the crew to take us into our stable orbit. Also, unlike a roller-coaster, once you’ve actually gotten going, there is still much to do, with constant tracking and the occasional mid-course correction required to get your ship where it belongs.

This feels like a much more apt metaphor to me – we’ve done a ton of work to get here but now that we’ve launched, our project team will play the role of Mission Control, overseeing the flight, helping to keep things on track, and in the event of an emergency (which we hope won’t occur), getting out the duct tape and figuring out how to fix things (though fortunately, none of our emergencies compare to that of Apollo XI).

For us, those tasks include continuing to push adoption, not only of good CRM practices, such as logging calls and meetings, but also of Chatter usage, making sure that the right contextual information is getting created in the right way. We’ll continue holding our weekly team meetings for the next few months, looking at reports of user logins, records created, opportunities moving through the pipeline and we’ll figure out what kinds of mid-course corrections we need to make.

At this point, however, I’m just happy to have gotten our rocket off the ground and to be moving into the next phase. I’d also like to give A big shout-out to our team from Heller Consulting – you folks were key partners in getting us to this stage of the project – thank you!


Making the Common Ground Contact Page Less Intimidating with Clicks and a Little Code

September 7, 2011

The way that we use Salesforce.com today means that we track a lot of data about contacts.  We have fields relating to a contacts relationship with us as a volunteer, staff member, staff alumni, and recruit.   Until now, we’ve used Record Types and the associated page layouts as a way of managing what information is displayed for a particular record.  With our implementation of Common Ground, however, we’re going to need to consolidate down to a single primary record type (Household Contact), so as to not break any of the out of the box functionality of the package.  This leaves us with a bit of a problem, as not only will we need to display all of our existing fields on a single page layout, but also Common Ground adds a host of fields to the layout as well.  We’re concerned that such a long form will make it difficult for our users to find the data that they need, increasing the likelihood of incomplete data entry and slowing adoption.

At Dreamforce last week, I saw some neat tricks for using VisualForce to help manage this kind of information overload, and I’m looking forward to using them in the future, but because I want to interfere as little as possible with the core Common Ground functionality, I can’t use a VF page to override the base contact page. I’d love to set up a tabbed layout for the page, but that will have to wait for some time after we’re successfully up and running.  I’d also like to be able to set the default behavior of different sections to be minimized, but although there is an idea on the IdeaExchange (vote for it here) there’s no sign of it being under consideration, so that won’t work.

My next best alternative then, seems to be to bring up a secondary page that displays the information I’m looking for.  It does require an additional button click on the part of users, but it should be faster than scrolling through 200 fields on the record.  Creating a custom button on the object is simple enough to do, and a basic Visual Force page for it to load is also straightforward.  One twist, however, is that I also want to be able to accommodate the addition and removal of fields easily (meaning without out having to recode pages whenever the fields change).  This led me, naturally to a new feature in the Spring 11 release that I haven’t gotten to try yet:  Field Sets!

A Field Set is a collection of fields on an object that can be set up and maintained (adding and removing fields) by an administrator and can then be called by a VisualForce page using a simple <apex:repeat> tag (a good blog post explaining the use is found here). Whenever the page loads or refreshes, it will cycle through all the fields in the Field Set, picking up whatever has been added or deleted by the administrator.

By defining a couple of Field Sets on my Contact object (go to Setup/Customize/Contacts/Field Sets) and then building a simple VisualForce page to display the fields, I’m most of the way to my solution.  Of course, just viewing the data isn’t going to be sufficient, our users also want to be able to work with it, so I also want to be able edit the data.  I’m trying to keep this solution light on code, however, so I don’t want to have to build a controller to support business logic on the page (ideally, this page wouldn’t even exist), so I want to keep using the standard Contact controller if at all possible.  Another neat new feature from Spring 11 comes into play here:  VisualForce Inline Editing.

Inline editing has been around in the native Salesforce.com UI for a while now, but only became available recently for VisualForce pages.  There are a couple of ways of implementing it, but for my purposes, the <apex:inlineEditSupport> component added to an <apex:outputfield> does the job splendidly, combined with the addition of the right buttons and voilà ! I’ve got a functional page that allows my users to view and edit their specialized data.

Here’s the VF Page code:


<apex:page standardController="Contact" showHeader="false">
<apex:form >
<apex:pageBlock mode="inlineedit" title="Citizen Teacher Specific Information">
<apex:pageBlockButtons >

<apex:commandButton action="{!save}" id="saveButton" value="Save"/>
<apex:commandButton onclick="resetInlineEdit()" id="cancelButton" value="Cancel"/>
</apex:pageBlockButtons>
<apex:pageBlockSection >

<apex:repeat value="{!$ObjectType.Contact.FieldSets.CT_Info}"
var="field">
<apex:outputField value="{!Contact[field]}">
<apex:inlineEditSupport showOnEdit="saveButton, cancelButton"
hideOnEdit="editButton" event="ondblclick"
changedStyleClass="myBoldClass" resetFunction="resetInlineEdit"/>
</apex:outputField>
</apex:repeat>

</apex:pageBlockSection>

</apex:pageBlock>
</apex:form>
</apex:page>

There’s some more that can and needs to be done (a tip of the hat to @dschach in this post that the Cancel button doesn’t really cancel and reset your values, it just exits you out of the edit) – but it was a pretty easy way to get around a somewhat vexing problem.


Dreamforce 2011 – My Favorite Week of the Year

August 26, 2011

So time for my contribution to the ‘I can’t wait for Dreamforce’ blog posts! There are a lot of them, and I find them fascinating reading – everyone has different perspectives, but the enthusiasm of the authors is palpable. I’m looking forward to meeting a number of my favorite authors there next week. In a post back in June (Why I Love Salesforce.com Events) I explained why I love going to Salesforce.com events and all of those reasons are still very true.  Added to that is that I’ve been named as a Salesforce MVP for evangelism and contributions to the community, which means that I get to participate in some of the events, and I’m excited!

Dreamforce is stuffed full of keynotes, educational sessions, networking events and parties.  In the midst of all this noise, it can be difficult to pay attention and figure out what’s important.  That’s why it’s key to go into it with a plan.  Unlike previous years (this will be my 5th Dreamforce), I’m going to have to drag myself away from most of the Developer track sessions – given where we are as an organization, I need to focus more on rollout, adoption and governance sessions in order to bring some best practices back with me.  This doesn’t mean that I’m going  to skip them all – mobile and iOS development sessions are very interesting to me.

So here’s what am I going to do next week:

Listen: from the opening keynotes to the last session, my ears are going to be open. The keynotes contain the big product announcements which show the direction that Salesforce is headed in. We’ll get a better sense of what the ‘Social Enterprise’ means and I can begin to assess what that can mean for Citizen Schools. As well, there will be new product announcements: Dreamforce is where Apex code, Visualforce and Chatter were all introduced – I’m very curious to hear what’s coming this year. Even if you’re not going to Dreamforce, you can watch – they’ll be streamed live and are worth the time investment.

Learn: the opportunities for learning at Dreamforce are tremendous with over 400 sessions being offered. There’s no where near enough time to go to everything that I’d like to. Fortunately, I’m bringing five colleagues this year and we’re splitting up to cover as much ground as we can. Additionally, almost all the sessions are recorded and are accessible online after the conference. Beyond the sessions, the Developer zone is a great resource if you’re interested in what’s involved in getting more technical with the Force.com platform.
Network and Share:  This is a fantastic week for networking!  The vendor expo, general networking sessions, Birds of  a Feather (BOF) sessions, and of course, the parties in the evening are a great place to meet others, share tips and best practices and otherwise build relationships that you can leverage when you return home.   As an MVP, I’ll actually be hosting BOF tables on Tuesday and Wednesday and will be in the ‘Ask an Expert’ booth on Thursday.  I really look forward to meeting any of you at these events!
Reflect:  Probably the hardest thing to do given the firehose of information, but it’s really important if you want to leverage the excitement into real world success when you get back home.  Have a notebook, sketchbook or tablet with you and in spare moments, jot down the ideas that resonated, features you want to try out , or code you want to explore and then when you get home – do it!  There’s nothing worse than going to an event like this and then not taking advantage of the opportunity to improve your knowledge and use of the Force.com platform.

Most of all, though, I’m going to have fun!  The Salesforce community is smart, passionate and enthusiastic – throw yourself into the mix, drink the Koolaid and enjoy the week!


Handling multi-year proposals in Convio’s Common Ground

August 9, 2011

In the process of converting over from Raiser’s Edge to Common Ground, we’re having to make certain configuration decisions that will allow the new system to match our processes and reporting requirements. Periodically, I’ll share some of those decisions and some of the background behind them, plus any interesting concepts they may expose.

Multi-year grants and donations are key weapons in the battle for renewable and reliable revenue for a non-profit. They provide stability to future budget projections, show commitment by funders to the ongoing future operations of the organization and are generally a good thing. As with all major gifts or grants, however, these opportunities require a cultivation cycle and development teams want to be able to track the activities and progress of a proposal over time.

When we record multi-year opportunities, we want to associate the cashflows with the annual campaign in which we expect to receive the revenue, and a significant part of our revenue reporting is based around this. So if I have a $3 million grant which will be paid out over 3 successive years, I need to be able to record the revenue across 3 different campaigns. Additionally, prior to the grant being won, we discount the amount of the proposal based on the stage that it’s in (we use a subset of the default Stage values), and report off of the Expected Amount field. As the proposal moves through the cultivation cycle, we change the stage and expect the revenue reporting to reflect the updated stage. Additionally, we want to associate each cashflow with the appropriate gift designations and solicitors in order to credit them properly.

All of this seems straightforward enough, but as we started to configure Salesforce and Common Ground, we ran into a bit of a road-block:  Common Ground (or Salesforce itself for that matter) doesn’t readily support multiyear opportunities in a fashion which would allow us to update the proposal record as a single entity, yet report on our cashflows in the fiscal year (campaigns) in which we need to. I should note that Raiser’s Edge doesn’t do a particularly good job of dealing with this issue, but we had a solution in place that worked for reporting and used the native RE proposal functionality for managing the actual data.

We looked at a couple of options before settling on our current plan, with an ideal solution being simple for end-users to understand and with a minimum of customization:

  1. Record all multi-year donations as Pledges and use the native Common Ground Pledge and Pledge Installment functionality to create our child opportunities.  Common Ground has a pretty cool add-in (build in Flash/Flex)  to set up future pledge payments, and this would satisfy our requirement to manage dates and commentary on one record (the Pledge) and report on revenue on multiple records (the Pledge Installments, which are Opportunity records).  Unfortunately, there would still be no way to record changes on the Pledge record and have those propagate to the Installments, meaning that staff would need to update both the Pledge and Installment records, and would have to know when to use the Pledge tab vs  the Opportunity tab when entering data.  Additionally, it would add to user confusion with real pledges.
  2. Create a new custom object (Proposal) which would capture the summary type information and commentary.  This would eliminate some of the confusion about where to record proposals, but would lose the functionality of automatically creating the future cashflows (users would need to create the Opportunity records manually) and would still have the issue of requiring multiple updates to different records (which is almost guaranteed to result in some records being missed).  Additionally, extra fields would need to be created to support the grants management process (which already exist on the Opportunity record with the installation of Common Ground).
  3. Use the native Opportunity creation process to create each individual cashflow record and update their data as necessary.  Although this option would use the most native functionality and would have the least customization, it was probably the least palatable option, as we’d lose much of the proposal management benefit that we’re looking to achieve with our migration.

There were certainly other alternatives available, most being variations on the options outlined above. As we looked at the options, we had to weigh making procedures simple for our end-users against minimizing custom functionality and, based on our internal capabilities, have agreed that we’re willing to take on some additional customization in the hope of improving user adoption of the system when we go live.

In assessing our choices, we kept coming back to the need to manage the proposal as a single entity, yet have the cashflow opportunities related in some fashion to the proposal (and ideally have changes in the parent reflected on the child(ren).  In Salesforce.com terms, this would be reflected as a lookup relationship between the parent and child. 

This relationship already exists between the Pledge object and the Opportunity, and would be easy to implement between the Opportunity and another custom object (such as a Proposal object) , so could easily be accomodated for options 1 and 2 above.  Option 3 would seem to be somewhat more complicated, as it requires a lookup to another opportunity (called a recursive relationship in data modeling terms). In traditional database development,  working with recursive relationships can be somewhat painful, but in Salesforce.com, they are no different than any other lookup.  You simply define the field type, pick the object you’re looking up, define the relationship name and how it appears as related lists, and you’re done.  Creating these relationships is an important first step, as it allows an easy way for an end-user to gain access to the child records from the parent or to the parent from one of the children.

Given that we can easily create the recursive relationship between Opportunities, option 3 moved to the front of the queue when it came to evaluating ease of use for our users.  They would be able to always go to the Donations tab (the Opportunities tab is renamed to Donations by Common Ground) for any proposal or donation with the exception of Pledges (which is as intended by Convio).  They would still have to create each of the cashflow Opportunities and assign them to the correct Campaigns, but through the magic of the Salesforce Clone option, they can easily create the year 1 option and then clone it for each subsequent year and maintain the donor contact relationships and designations through the cloning process.  The only value that needs to be changed between the first and any subsequent records is the Campaign, which simplifies the process significantly.

Finally, we want to be able to to update certain fields on the the child opportunity records when the parent is updated (particularly stage name and probability).  Doing this required some simple code, but given that we already have the relationship between the parent and child records in place, doing an update is very easy.  This update could easily be written as a trigger, but we’ve decided to implement it initially as Apex code that will be called by the end user from a button on the Opportunity record.  If we find that we’ve got issues down the line with users not doing the update, we could either change the code to a trigger, or set up a scheduled batch to do the update on a regular basis.  Additionally, we can also look into a process to create the child cashflow opportunities in a more automated fashion (a simple VisualForce page would accomplish the job), but as mentioned above, we’re trying to find the balance between simplicity/maintainability and ease of use.

Some key points to be drawn from this? 

  1. Flexibility of the Salesforce model allows us to adapt the system to our needs using one of a number of approaches.
  2. We can adjust our solutions over time to respond to usage patterns or changing requirements
  3. Maintain the balance between over-automating and ease of use, particularly when launching something new – too much automation puts you and your technical team as a bottleneck in the event that things change, whereas users will tell you where their pain points are.

How are your organizations handling multi-year opportunities?  I’d love to hear what you’ve come up with.


Keeping Non-Profit IT Relevant In An Era of Consumerization

July 20, 2011

Several recent articles (http://bit.ly/oZEmvS, http://bit.ly/n5oOhj) have discussed the rapid consumerization of technology and the difficulty that corporate IT groups are having in keeping up with the changes.  The statistics show that use of consumer devices (smartphones, tablet devices) and social media services (Twitter, Facebook, blogs) for and about work is increasing rapidly, swamping the ability of Corporate IT to support, implement and control.  At the same time, the number of high profile security breaches and losses of personal data is at an all-time high, leading to increasingly draconian regulatory remedies and pressure on IT to keep data secure.  I’m going to address these trends in the context of the impact on Citizen Schools and other non-profit organizations and some of the ways that the Force.com platform and consumer technology can be used together to mitigate some of the issues.

At Citizen Schools, about 40% of our staff are recent college graduates, a generation known as ‘digital natives’.  These people have grown up with ready access to the Internet, social-networking service and consumer-friendly technology.  In college, they became used to collaborating with other students on Google Docs, sharing files, music and movies via peer to peer networks and coordinating their lives via Facebook and all of those tasks were easy to accomplish.  When we hand them their Windows-based laptops, tell them they have to use Outlook for email and to try to collaborate with colleagues on Sharepoint, they aren’t happy (and sometimes revolt), even though the tools themselves are perfectly functional and make sense from a business perspective.  They want to use their Macs, their Android and i-phones, and (increasingly) their tablet computers to do their work.

From an organizational IT perspective, all of these factors cause problems.  For my small tech team supporting nearly 500 staff, our first instinct is to want to standardize, to minimize the number of different devices, browsers and applications that we are expected to support (despite expectations, not all computers are the same, nor do we have expertise in all software).  Each time that we say ‘No’, however, we become less relevant to our staff, and increase the likelihood that they will go around IT to accomplish what they need to do. Of course, each time someone uses their personal laptop (which may or may not  have virus protection or a strong password) or shares a file through an online service like Dropbox, they put their organization at risk of a breach of personal data. Smartphones and tablets add even more to the risk, being that much more portable and desirable, and in many cases, even less secure.

Fortunately, non-profits aren’t yet subject to the same requirements as other industries, but state and federal regulations are becoming increasingly strict (and are already more so in Europe).  The consequences of a breach, however, remain high, potentially calling into question the operational capabilities of the organization in the minds of funders and impacting the organization’s reputation.

So how do we let our users have the tools and devices that they’re used to working with (and with which they’ll be more productive), yet try to minimize our organizational risks?  We’re nowhere close to having all the answers, but here’s the approach we’re taking, keeping in mind that our primary platform for data and CRM is Force.com and that we use Sharepoint for a lot of document management and Microsoft Office for most document creation and editing:

  • Devices:  Although we’re not going out and purchasing iPad’s centrally for the organization, we are strongly encouraging staff to use their personal iPads for business purposes, subject to a few constraints (and have purchased a few on a pilot basis).  First, if they’re connecting to our Exchange email, iOS forces you to create a security code, which eliminates one of the up-front biggest concerns about having sensitive data on the device (no password at all).  Second, we’re requiring staff to install and activate the free Find My iPhone application,  and agree that in the event of loss/theft that they’ll wipe the device.  It’s not as strong an approach as central control of devices (as with our Blackberry Enterprise Server), but it gives us an extra level of security.  We’ll be implementing a similar policy on personal smart phones within the next few weeks (as soon as we identify a good app for Android phones – suggestions welcome).
  • Collaboration:  We’re headed full on for Force.com Chatter deployment across the organization, with all users who don’t have Chatter-enabled licenses scheduled to receive Chatter Free licenses.  We’re still working out the launch campaign, usage guidelines, etc, but this is too powerful a product for us not to take advantage of it.  We anticipate using it for regional team coordination and management, cohort-building across the network, collaboration around internal projects and general subscription-based communication.
  • File Sharing:  Personally, I’m a big fan of Dropbox and I use it for personal purposes all the time.  Professionally, however, I have some concerns, particularly in light of their recent data breach.  There are certainly other services out there, but the landscape is changing rapidly and we’ll want to have a solid contender in place.  Sharepoint continues to be our primary platform for document sharing and management, but browser compatibility issues and limited functionality on mobile devices are problematic.  As a result, we’ll likely be using some combination of Sharepoint and Chatter files for internal file sharing and probably use something like Dropbox for one-time/short-term external file shares.
  • Force.com:  As we roll out Convio Common Ground this fall, we’re going to make a big push on mobile for our Senior Management and other external relations staff.  This will initially be accomplished through use of the full Salesforce Mobile license and application, which will give key staff the ability to manage their accounts, contacts, opportunities and many of the custom items that we’ve created while on the road, particularly for managing tasks and logging calls and meetings. The mobile application not only provides additional security for our data by requiring an additional key code to access the application, but also has a remote wipe feature that allows us to delete the Salesforce data if such a need arose.
In the long run, however, I’ve got more ambitious plans, particularly when it comes to mobile access for our front-line program staff.  These are the folks who are most in touch with the consumer tools and technology, and we want to provide them with a toolset that will allow them to manage their interactions with students, families, teachers and administrators.  In order to achieve this, we’re going to need to define our mobile strategy in a much more comprehensive fashion (deciding between native, web and hybrid apps – thanks @quintonwall!) and then building out the applications to support different business functions on the different platforms.  As we do this, it will also help us to define the platforms that we want to invest in to support those apps, so that we can have the right applications available on the right platforms for the right users.

Force.com is going to be a key factor in our ability to be successful in this approach, as we’ll be able to leverage all the existing functionality that’s provided by the platform, including role and profile-based security, access our data through APIs like the Chatter and Apex REST API and then present the data using powerful technologies like JQuery Mobile or Phone Gap that are focused on a great user experience.  It’s not going to be a small project, but it’s one that’s got a much greater chance of success than building apps the old fashioned way because we’re meeting users on their terms, rather than trying to prescribe how they do their work.

For technologists, how do these challenges resonate for you?  What are you doing to mitigate them?  For end-users, how about you?  What do you need from tech to be successful?


Own It – Working With Consultants on the Force.com Platform

July 13, 2011

There is a very strong consulting ecosystem that’s developing around Force.com work for non-profits.  Ranging from small or independent consultants to companies like Groundwire, Exponent Partners and Heller Consulting who specialize in non-profit work to enterprise consultants like Appirio, Accenture, and Deloitte (note that this is by no means an exhaustive list, so I know that I’ve left many names off).  Depending on your organization’s needs, you can generally find a team that can do the work that you need done, and for many non-profits, who don’t have the internal technical talent, this is a perfect solution to get converted, or launch some new functionality (like website integration).

One of my favorite parts of  Non-Profit User Group meetings is when people stand up to discuss and demonstrate the cool stuff that they’re doing with Salesforce.  It always gives me great ideas for things we can do (and adds to my already long to-do list).  One trend that I’ve noticed however, is that when I ask about how something has been done, I often get the answer ‘Oh, our consultant did that, I don’t know how it works’ or something similar.  As a technologist (and I recognize that most of those presenters are not technology-focused), this is very dangerous situation, and puts your organization at significant risk in the event that something stops working or if you want to modify what’s already been created, particularly if the consultant that you worked with originally is no longer available.

So what to do?  Based on my experience (both good and bad), here’s what I try to do when working with external consultants on our Salesforce.com organization and what I would recommend for your technology staff and Salesforce Administrator(s) to follow.  Make sure that you discuss these items with your consultants going into the project, as some of these tasks take time to perform (and are often quick to be dropped if the project is running behind).

Participate in the project as much as possible

Most consultants are going to want you to participate in the solution, but what I mean is really jump in to the project.  If there are custom objects to be created and custom fields to be added, do it yourself, don’t rely on the consultant to do it.  This will have the double benefit of saving you money on the project, as you’re doing the work rather than the consultant, as well as ensuring that you really understand what’s being done to your setup.  There’s (almost) nothing worse than going into your organization one day and saying to yourself ‘why is that field there?’ or even worse ‘I don’t remember that custom object, what does it do?’  Make sure to fill out the description fields on objects, fields, reports and report types so that you and your successors can manage your organization effectively (to be honest, this is more of a do as I say, not as I do recommendation, as we’ve not been disciplined about this and are paying the price currently).

Clicks not Code

This should be second-nature to most Force.com consultants, but in doing your solution design work be really disciplined about evaluating every proposed coded customization through the lens of clicks (workflow, formula fields, summary rollups, AppExchange apps) and process change before going the route of custom coding.  The more custom-coding that you do, the bigger the maintenance burden you create for yourself, and the more eventual cost you’ll incur, either in your own staff time or in getting those consultants back in.

Get Documentation

In most cases when working with a consultant, you will have come up with some sort of Statement of Work or Requirements document that defines what it is that you want them to do.  This document serves to define the scope of the project for cost estimation purposes as well as when the inevitable change requests happen during the course of the project, and it’s a key way to look back at the end of the project to determine if you got what you wanted.  What those documents don’t give you, however, is an explanation of how the solution achieves your goal, or even how much and what types of tools they used to create the solution.

  • Before the project is completed/signed-off on, make sure that you get a list of every Visualforce Page, Component, Apex Class, Apex Trigger, Static Resource, Report etc. that was created or modified as part of the project.  Ideally, you will have specified (or the consultants as a best practice will use) naming conventions/prefixes and namespaces to identify these components at the start of the project.
  • Ensure that code has comments embedded which, at a minimum, defines the purpose of the object.  More comments are usually better.  Comments are critical when another developer has to look at the code and figure out what it’s doing and can allow work to progress much faster.  As Salesforce.com Administrators or super-users, you most likely already know how to view, create and modify Custom Objects from within the Salesforce User Interface.  What you may not know, is that you can do the same for Visual Force pages and Components, Apex Classes and Triggers, and other elements of custom functionality.  Go to the Setup Menu and expand the Develop option (just below Create, where you access Custom Objects).  There, you will see entries for each of the different schema types that can be developed.  If you click on Apex Classes, for example, you will see a list of each class contained within your organization, whether custom developed or installed from an AppExchange or other package (like the Non-Profit Start Pack).  If you then click on a Class name, you can see the code inside the class, which is where you will find comments.  Comments are indicated by two slashes for a single line comment (e.g.   //This is our seach method that is called every time a character is entered), or if there is a large block comment, it may be indicated within a /*comment here */ block.
  • Get or make diagrams which show the flow of a process or navigation of a site/wizard, particularly for complex items.  When something isn’t working as expected, or you need to bring someone up to speed, these artifacts are a big help.

At Dreamforce last year, we listened to the song Own It by the Black-Eyed Peas numerous times, and that song has stuck with me since whenever I’m working with Salesforce.com.  The platform has given administrators the ability to own their systems in a much more intimate fashion than ever before – don’t give up that control to your consultants!


Follow

Get every new post delivered to your Inbox.

Join 684 other followers