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 box.
- 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 integration tool.
- 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 based projects.
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.
Final Thoughts
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.