Colin Copeland, Managing Member at Caktus, has wrapped up work, supported by
UNICEF, as the Community Coordinator for the open source RapidSMS project.
RapidSMS is a text messaging application development library built on top of
the Django web framework. It creates a SMS provider agnostic way of
sending and receiving text messages. RapidSMS has been used widely in the
mobile health field, in particular in areas where internet access cannot be
taken for granted and cell phones are the best communication tool available.
This has included projects initiated by UNICEF country offices in Ethiopia,
Madagascar, Malawi, Rwanda, Uganda, Zambia, and Zimbabwe.
Modeling RapidSMS on the Django Community
The overall goals set forth by UNICEF for this project included improving community involvement by making RapidSMS easier to use and contribute to. Colin accomplished this by using Django's large and active community as a model. The community employs common standards to maintain consistency across developers. Using this best practice for the RapidSMS developers meant easier communication, collaboration, and work transfer.
Colin shepherded six releases of the RapidSMS framework over his year long
stint including 948 code commits to the repository. Colin broadened engagement
in the RapidSMS community by tapping five others at Caktus’ to contribute code
including Dan, Alex, Rebecca, Tobias and Caleb. Evan Wheeler, a founder of
RapidSMS, oversaw Caktus’ work on the project and offered an outside
perspective. Evan acted as a liaison between Caktus and UNICEF by coordinating
our work with Erica Kochi, co-lead of UNICEF’s Innovation Unit.
The major releases to the framework included releases 0.10 through 0.15 and
included major updates both on the frontend and backend of RapidSMS.
0.10 Pluggable Routers — This opened the door for different router
algorithms for different use cases and removed support for the legacy and
difficult to debug threaded router. For example, texts can be handled within
the request cycle by using the blocking router or pushed off to a queue
(which requires extra dependencies) for handling later. This settled a long
standing debate on the mailing list, by letting users make their own
decisions and having RapidSMS support different router options out of the
0.11 Continuous Iteration — This release focused on testing & continuous
iteration with the inclusion of a new RapidTest base class, PEP8 related
changes, and monitoring test coverage using the TravisCI continuous
0.12 Interface Redesign — Caktus developers updated the default RapidSMS
interface to now use Twitter Bootstrap. This included reviewing all of the
current contrib apps and deprecating the ones that were no longer necessary.
0.13 Bulk Messaging — This included adding an API for sending messages to
many phones at once. As part of this change, the new database router was
added which keeps track of which messages in a bulk message group have been
sent and resends messages if there is an error.
0.14 Production Hosting Documentation — This change includes best
practices for hosting a production instance of RapidSMS. It is agnostic as to
which cloud provider is chosen, or what provisioning tool is used, but
encourages the use of a tool supported by the Django community to automate
creating new servers and pushing out code changes.
0.15 Tutorials & Contributing Documentation — The new documentation
released in 0.15 was aimed at helping new users get up to speed quickly by
following along with the tutorials. The Django tutorials were a strong
influence in the tutorials developed for RapidSMS. The final push was to
update the documentation to make it clear how to contirbute back to the
RapidSMS development community so that development work is not duplicated
across RapidSMS implementations.
A few of the themes of Colin’s tenure as Community Coordinator of the RapidSMS
project were code consistency via PEP8, a focus on automated testing, test
coverage monitoring, continuous integration, and improving documentation.
There were also some important new features like the Bootstrap facelift & bulk
messaging (supported by the router refactor) which will make it easier to write
new apps and interact with RapidSMS as an administrator on the web. Colin pushed
the community to embody the spirit of the Django and Python communities in
RapidSMS through detailed documentation and testing. For more details about the
changes, you can see the Release Notes documentation or the commits themselves.
Enabling Sharing of Development and Field Work
Part way through the development tasks for the RapidSMS project, it was brought up on the RapidSMS community mailing list that rapidsms.org was being reported
as a source of malware by Google. This motivated an already present need to
rebuild RapidSMS.org as a sharing platform for both types of the RapidSMS
framework users—software engineers & mobile health project coordinators.
The software engineers need a place to share their reusable RapidSMS packages
on the site. This is a repository of reusable code so that new community
members can build their packages using existing code. These packages include
apps for appointment reminders and SMS based polling. Beyond a shopping ground
for reusable code, the package repository also is a place for new developers to
go to see the work of others so that they can get a sense of how to structure
their own projects.
Project implementers on the other hand want a high level review of real life
projects where RapidSMS has been used and what the outcomes of the projects
were. That is, if they are evaluating frameworks to be used by a new SMS based
product, they can look at the successes that have been attributed to RapidSMS
Taking into account the needs of both software engineers and project
implementors, Caktus redesigned RapidSMS.org with leadership from Colin and
Evan Wheeler. The work was done by Caktus team members including design by
Julia and backend development by Rebecca, Victor, David, and Caleb. The website is also open source and welcomes all contributions from new bug tickets to pull requests.
Overall, Colin provided leadership to RapidSMS and pushed the development
standards higher and more inline with parent projects, Django and Python. The
Caktus team, with input from Evan Wheeler, and all of the RapidSMS community,
rebuilt parts of RapidSMS from deep in the core of how messages are handled to
the look of the external website used by administrative staff. Colin’s
leadership lay the groundwork for the next phases of RapidSMS’s codebase and
the community surrounding the project.