by Ali Daniali
Charity Code Jams, such as the one I hosted at the recent 360|Flex conference in San Jose, have shown that small, well-managed teams of volunteer developers can make a significant difference in the community — and learn a lot in the process. You can duplicate this success in your area. In this article, you'll find a blueprint for creating your own charity developer events.
I created the Charity Code Jam brand to encompass events that enable developers to use their unique skillsets to create positive change in our world. The benefits flow in both directions: to the championed nonprofit organizations and to the developers who join in. Not only do these events produce real-world product that is designed to further the goals of a local nonprofit, but they also foster participation in the developer community while facilitating the learning process of building rich web applications.
The concept is simple: Assemble a random group of 10–20 volunteer developers with varying levels of experience. Work as a team to create an application that will help a charity organization. Complete the entire project in 50–70 hours. Impossible? Not at all.
Moreover, the resulting code is released as open source so other developers can leverage the components of the project for future builds.
As I was growing up, my mother instilled in me the benefits of giving back to the community. I watched as she championed those in need through her philanthropy work in southeast Texas. I saw the impact she made on those she helped, such as the families that benefited from the long-term housing she established for relatives visiting their loved ones in the hospital with the Anayat House (which is now a United Way organization). Her actions encouraged me to find ways I could help make people's lives better.
Our first event, The Northwest Charity Flex Code Jam, started on August 12, 2007, and ran just over three days. The event was held in conjunction with the 360|Flex conference in Seattle. We invited everyone in the conference to participate, and 18 code warriors accepted the challenge. The charity was Northwest Harvest, a Seattle food bank. We created a virtual food donation system (see Figure 1). Development time was 69 hours.
The second event began on August 18, 2008, and was held in conjunction with 360|Flex in San Jose. This time, we had a team of 14 developers. The charity was Second Harvest Food Bank of San Jose. We built a virtual food connection application that helps hungry people find the closest hot meal (see Figure 2). We completed this project in just 50 hours.
Figure 1. The second Charity Code Jam project — a food connection application that helps the hungry find nearby hot meals.
After successfully completing two Charity Code Jam events, I've witnessed the enormous advantages these events create for everyone involved. The first one was a bit of an experiment, but it went so well that I used the momentum to create the second one. The success of both events shows what a big difference a small team of developers can make in the community while they learn from one another.
Why go through so much sleep deprivation? The energy and excitement is addictive. What I've discovered is that the journey is truly the best part of the event. Watching great developers work together for the first time, collaborate on a common goal, and solve complex issues in hours proves to me that people can achieve anything they put their minds to. During the event, you see the transformation of the solo developer through the power of a group working together. You see experts in their field spend significant time working one-on-one with developers who usually communicate with them in forums. You see technology, frameworks, designs, and people pushed to the limit, all for the benefit of a charity.
Figure 2. Coding all night long in Seattle. (Photo by Ali Daniali.)
You can imitate the success of a Charity Code Jam by setting up your own charity developer event. There are three distinct phases to organizing your own event. You may find yourself playing many diverse roles from start to finish if you do it all on your own. Know your strengths, and recruit help where you need it. Here are the basics of coordinating a charity developer event:
There's always the risk that the project will never be finished. Explain this up front, plan for contingencies, and set up a process for preserving the code in a central repository.
Choosing the event to coordinate with and the charity is half the battle. Schedule your charity event in conjunction with an existing conference or user group to leverage the talents of the developers. Gather the participants at the beginning of the host event. Since attendees are often visiting from out of town, they are likely to have spare time for the project.
Choosing an event in your hometown makes things much easier. You'll be better able to coordinate tasks, such as receiving packages and running to the store for food — because you'll be in a familiar environment with access to more resources.
The selection of the charity is critical. Narrow your search to local organizations near the event. Look online and subscribe to tech startup lists to find potential organizations that need help.
I follow several guidelines during the selection process. The charity must be a nonprofit organization and have a clearly defined mission and a good understanding of the needed application. Meet with each team and learn about the existing platforms and databases. Look for legacy systems that can be integrated.
You know you've found the right organization if:
I feel strongly about generating open source code during the event. This way, the team can give something to the developer community as well as the charity. Mention this early in the discussion because some nonprofits don't want to share their back-end code. If the nonprofit does not agree, interview other charities.
It is challenging, but you must set everyone's expectations up front. Avoid committing too early. Find six to seven potential clients and then research each business model to find a good fit. It is difficult to step away after engaging an organization, but it's better to back out during the preplanning stage than to be unable to present promised deliverables if the project doesn't work for the event.
After the event and charity are chosen and the project is agreed upon, establish a project timeline so you can begin defining the scope of the project and mapping out requirements.
Before the event, reserve a dedicated workspace for the team. If possible, share space with the host event. Since the event occurs in just a few days, much of the development takes place at night. It is critical that the workspace has 24-hour access. It's ideal if the space is easy to access and adjoined to the hotel.
Sponsors may provide room rental, prizes, food, and even airfare. Contact potential sponsors as soon as you finalize the event timeline to see if they can help. Immediately begin promoting the event online and at user groups.
While the preplanning involves a lot of work, the main event is the most fun I've ever had in 70 straight hours. It is exciting, invigorating, and incredibly rewarding.
As the conductor, I find I rarely sleep during the three days of the event. I make it a rule to do none of the coding myself. Instead, I work as a point person who assigns tasks, tracks the progress, and facilitates operations so everyone else can keep working. I use project management tools to keep the team's status up to date. I think of myself as the constant in a variable environment.
Speak to the attendees during the keynote presentation to introduce the project and explain how to sign up. If possible, have a representative of the charity speak about the organization's goals and describe how the web application will help them. The attendees all have schedules, so clarify that participating developers are free to experience other sessions during the conference.
Several types of attendees make good candidates:
As you meet potential participants, look for those who exhibit leadership skills in the areas of project and time management. Make those folks your team leaders. Delegate tasks to anyone you feel is up for the challenge.
Figure 3. Find an experienced developer, like Michael Labriola (pictured above), to volunteer and mentor the development team. (Photo by Ali Daniali.)
The following is a breakdown of the structure of a typical three-day event.
Announce the project and network as much as possible to seek out enthusiastic participants. Your goal is to get 10–20 volunteers to commit to a minimum amount of development time.
In the late afternoon, schedule the first team meeting to get everyone acquainted. Provide snacks and discuss the goals of the project. Describe the process for using Base Camp (or your favorite project management system) and the code source control (I use CVSDude). Exchange phone numbers so everyone can stay in touch. Don't turn anyone away for lack of experience. Adopt a project meeting style or system, such as Scrum, to keep everyone up to date and the project moving.
If possible, have someone videotape the three-day event. The edited video is useful for promoting future events; it also gives participants a sense of legitimacy and excitement about volunteering for the project. Below is a video shot for the Adobe Developer Connection about the Second Harvest Food Bank project.
Early in the day, the team meets for a solid conversation about the project. Present the guidelines created during the preplanning phase, along with a roadmap of the project to be built. Assign the first round of tasks. Sometimes I assign partners to work together so they can share knowledge.
One of my goals is to take a screenshot of every milestone during development to document the progress. After the project is complete, you can review the screenshots and watch the application transform. As the product begins to emerge, there's an increasing sense of excitement in the development room.
During development, I'm always amazed at how much the solutions I envisioned differ from the delivered project. The team always incorporates features I never even thought of.
For example, some of the participants in the last Charity Code Jam were bilingual and had experience with localization. They suggested building a multilingual site and offered to take on that task. I immediately agreed, and it turned out to be an excellent addition to the project.
We also decided to incorporate Yahoo! Maps into the project. This helped our goal (to distribute food from local food banks). If it had occurred to me to use Yahoo! Maps ahead of time, I would have contacted Yahoo! to sponsor the event.
At the end of the final day, present the final project to the conference attendees. Call the developers up to the stage and thank them for their participation. The team shares a great sense of pride. The response from the crowd is inspiring.
After each presentation, I have been inundated with folks who want to learn more about the next event. I am thrilled to see how much people want to help. It is very satisfying to watch people realize that they can make a difference, regardless of their skill level.
The more high-level participants with expert knowledge you can get to participate, the stronger the experience will be for new developers. In the most recent Charity Code Jam, Michael Labriola, Jeff Tapper, and Mike Nimer from Digital Primates mentored the development team. The participants loved asking these advanced users technical questions in an intimate setting.
Laura Arguello and Nahuel Foronda from AS Fusion (who were at the event presenting their product, the Mate Flex framework) also got involved. It was all very organic. Participants went to their presentation, thought their product was a good match for the Charity Code Jam, and approached them after they spoke. They immediately agreed and offered to advise the team. The synergy was unmatched because the Mate Flex framework aligned perfectly with the project. The AS Fusion team received valuable feedback about its product and got the opportunity to describe how its product was integrated when we presented the finished application to the conference attendees. It was a win-win for everyone.
Several participants even found jobs as a result of their participation. Everyone raves about how much they learned from their team members. One of the biggest unexpected rewards is that both teams have remained in contact after the events. I reunited with many of the participants recently at Adobe MAX.
When each project is ready to be deployed, I meet with the clients. With the help of team members, we set up the technology and launch the site. We provide support, so that the client can take full advantage of the new site. With the help of other participants, we maintain the code base using Google Code, and I add all the team members to the project so they can continue to work on it. Whenever possible, we include documentation to help future developers utilize the work we've accomplished.
Site maintenance after an event is an ongoing challenge. I never ask the charity for money because the project is a donation. However, if the nonprofit does have funding, I connect them with developers to help maintain the site. This is advantageous for everyone. The site is updated, and new jobs are created.
I'm currently working as a consultant with the Dallas Flex User Group to organize their code jam event. I plan to set up more Charity Code Jams and gather sponsors earlier in the process to provide hosting and fund site maintenance. I'm also investigating creating my own nonprofit organization so I can accept sponsorship money for future events.
I work hard to ensure that every Charity Code Jam provides a professional and supportive work environment so that everyone gives while getting something in return. If these guidelines are followed (and improved upon), these events will continue to grow and gain popularity, and ultimately help those in need.
If you have suggestions or comments, you can reach me at ali at daniali dot com.
Based in Seattle, Ali Daniali is an RIA developer and information architect. Ali manages the Seattle Flex User Group