A few weeks ago saw the launch of Commons In A Box OpenLab, a major project funded by a grant from the National Endowment for the Humanities. Hard G played a big role in conceiving and executing the project, and I thought it’d be fun to walk through some of the work here.
A bit of background
I’ve worked as the lead developer on the CUNY Academic Commons more or less since its inception in 2009. In 2012, the Sloan Foundation helped us to take some of the custom work we’d done building BuddyPress and WordPress plugins in support of the CUNY community, and to package it in a way that’d make it easy for other institutions to start similar projects. Thus was born Commons In A Box; you can read more about my involvement in the original Commons In A Box project in my case study. (Fun fact: “Commons In A Box” was the working name for a product that we thought would more formally branded before we shipped it. Turned out we couldn’t come up with a more descriptive name, so we stuck with it.)
In parallel with the CUNY Academic Commons and Commons In A Box, Hard G has played a leadership role in developing and maintaining the City Tech OpenLab since 2011 (or thereabouts – time flies). As was the case with the CUNY Academic Commons, the OpenLab team received lots of requests for easy ways to create a site similar to the OpenLab – with all its great design and custom features – on their own campuses. The recent grant from the NEH was an opportunity to do just that. So the OpenLab team joined forces with the Commons In A Box team, and decided to build out the Commons In A Box OpenLab package.
The OpenLab project has been around for a while, and has been worked on by many people. Some of its components – WordPress, BuddyPress, some BP-specific plugins, and so on – are used off-the-shelf. Other components are custom, either baked into the totally bespoke theme, built into various OpenLab plugins, or into standalone WP/BP tools. The first step was to identify the pieces that deserved inclusion in the Commons In A Box OpenLab project, and to identify how they could be abstracted.
This idea of “abstraction” sounds easy. But any software developer will tell you that the process of taking something that’s hardcoded, and making it usable by others, invariably increases the complexity of a project, usually by orders of magnitude. Something as simple a string in a template file that reads “City Tech OpenLab” may need a new piece of UI in the Dashboard to for customization; it may need to be rephrased so as to be translatable into various languages; it may need to have maximum length so as to fit into the available visual space; and so on.
So I led the charge on this generalization project. In part, it meant building abstraction layers on top of existing code: places where an administrator could enter a single string or configuration setting and have it cascade neatly across the installation.
In other cases, entire new systems were required. For example, the OpenLab is structured around four types of BuddyPress groups: Courses, Clubs, Projects, and Portfolios. Other campuses may want more or less than these, or want them to have different names, or want them to work differently. So we built a set of management tools, running on Vue.js and the WordPress REST API, for the creation and management of group types (and member types, and a dozen other new abstractions).
Releasing code for public consumption also means cleaning up old messes. The process of updating and refactoring mountains of highly outdated and hacky code is not glamorous, but it was necessary to be release-ready.
During the development process, I was pleased to work closely with other developers on the team, as well as designers and other project leadership, to define a project scope that made sense for the terms of the grant and the purposes of the project.
Onward and upward
Another cornerstone of the project is its FOSS nature: we wanted to release the plugin under a free license (the GPL) and then ensure that there was infrastructure for a community of practice around it. So we updated https://commonsinabox.org to include extensive documentation and community forums, and put in place infrastructure on GitHub to support incoming questions, bug reports, and ideas.
For all those lonely, underfunded educational technologists out there who struggle to balance affordability, flexibility, and freedom from commercial entities – I was once one of you! – I encourage you to check the project out: https://commonsinabox.org/cbox-openlab-overview