View on GitHub

projects-director

Documentation and in-progress work of NumFOCUS's sustainability program.

31 May 2017

Summary

Because the advantages conferred by working in the “open source way” apply as significantly to projects that are not primarily about code, I plan to run the Sustainability Program in the same way that I would run an open source software project.

Open source projects, particularly because they are conducted by geographically and often institutionally distributed teams and individuals, require a minimum set of collaboration tools (infrastructure) in order to do their work. The Sustainability Program requires this as well.

NumFOCUS already has access to and utilizes some of these tools, but not all. And in some cases NumFOCUS is utilizing options for a given collaboration tool that are not optimal for open team work.

I propose allocating approximately $1,500 annually and 4-8 hours of staff/volunteer time per month to deploy and maintain the following services to close this gap: Zulip for synchronous text chat, Discourse for asynchronous discussion, Etherpad Lite for real-time note taking, and Mediawiki for meta documentation and recording institutional memory.

The benefits to NumFOCUS and the Sustainability Program for this expenditure include:

Background

Infrastructure required for open source collaboration

Open source projects require a minimum amount of infrastructure in order for viable and engaged collaboration to occur and work to be produced. These include:

  1. A way to host, share, and collaborate on the work product. For most projects, this takes place on a hosted (D)VCS such as GitHub, GitLab, Bitbucket, Subversion etc.

  2. A way to collect, triage, and prioritize bug reports and feature requests. For most projects this takes place on an issue tracker such as GitHub issues, Jira, Trac, or Bugzilla. Some projects utilize additional tools intended to provide a friendlier experience to for end-users such as Uservoice.

  3. A way to coordinate and prioritize product development. Some projects use their issue tracker for this, others use different tools like Trello, Asana, Kanbanery, etc.

  4. Ways to communicate (synchronously and/or asynchronously) with other project contributors, potential contributors, and users about the project. IRC used to be the de facto standard for real-time text chat among open source projects. Now Slack and Gitter are common tools for this. Mailing lists (using mailman or Google groups) have long been the most common asynchronous platform. Discourse is emerging as a popular, more accessible and user-friendly alternative.

  5. Ways to collaboratively conduct synchronous meetings. Open source projects run meetings in myriad ways. Some projects never meet in real-time and conduct all their work over mailing lists or issue trackers. Others conduct meetings exclusively via text-chat with IRC, Slack, or Gitter. Others take advantage of voice and/or video teleconference solutions such as Google Hangouts, Skype, Vidyo, GoToMeeting, Appear.in, Talky.io, etc. Many open source projects use Etherpad (Lite) for collaboratively drafting agendas and taking meeting notes. Some use Google docs for this.

  6. A way to authoritatively communicate what the project is, including its mission, who is involved and how to get involved. Most projects have some kind of homepage for their project. For projects that do not have a stand-alone website, it is common to use the Readme.md file in the root of their GitHub repository, GitHub pages, the landing page of their documentation on Read the Docs, or something similar.

  7. A way to host contributor-focused documentation. Most projects include this directly in their source code and use GitHub markdown, GitHub pages, or ReadTheDocs to render and display. Some larger projects have separate repositories and stand-alone websites dedicated to documentation and contributor on-boarding.

  8. A way to collaboratively record and share the institutional memory of the project (e.g. best practices and other collective knowledge, meeting notes, process log, decision log, history, etc.) of the project. Many projects use a wiki for this. The most common wiki software among open source projects are Mediawiki and Confluence, followed by GitHub wiki pages. Other projects use their contributor documentation for this.

As a project grows, and depending on its particular needs, additional tooling might be required such as continuous integration, build and test servers, incident response documentation, monitoring, backups, dev/staging/production servers, authentication, etc.

Criteria for selecting project infrastructure

These are among the criteria I use when evaluating which open source project infrastructure tools to adopt:

Criteria for deploying project infrastructure

Whenever practical, self-hosted project infrastructure should be deployed and maintained following good devops / sysadmin practices. This includes using some kind of configuration management with reproducible scripts stored in version control along with good documentation. More than one staff person or volunteer should understand how to access servers, and how to deploy and maintain them.

Current NumFOCUS infrastructure

At present, NumFOCUS infrastructure includes the following:

I believe we also have existing accounts with CloudFlare and Amazon Web Services, but don’t know the specifics.

Proposed new NumFOCUS infrastructure

Overview

Although the work of the Sustainability Program is not entirely about code, it will produce some. And it will produce documentation. And we need a way to coordinate, conduct, and share our work. All of the collaboration infrastructure needs mentioned above apply to the Sustainability Program.

Existing infrastructure within NumFOCUS can meet some of these needs, but there are significant gaps that need to be addressed before I can make an effective call for participation.

Current infrastructure that is a good fit for present needs include: GitHub for DVCS, issue tracking, product development, and contributor-focused documentation; Google Hangouts and GoToMeeting for voice and video conferencing; and Wordpress / WPEngine for website hosting.

New infrastructure I propose we allocate budget and staff resources for include: Zulip for synchronous text chat, Discourse for asynchronous discussion, Etherpad Lite for real-time note taking, and Mediawiki for meta documentation and recording institutional memory.

Capabilities of current vs. proposed resources

Below is a table detailing current NumFOCUS resources and new resources I propose we invest in spinning up.

Current resource Proposed resource
A way to host, share, and collaborate on the work product.

GitHub, under NumFOCUS organization.

  • Not open source, but has become standard platform for open source work and can be used without any proprietary tools.

  • Hosted + managed is only deployment option.

  • Abundant desktop git clients available (Linux, Windows, macOS) for use with code hosted on GitHub and there is no restriction on their use.

No change.

Current resource a good fit.

B. A way to collect, triage, and prioritize bug reports and feature requests.

GitHub, under NumFOCUS organization.

  • Not open source, but has become standard platform for open source work and can use without any proprietary tools.

  • Hosted + managed is only deployment option.

  • Issue tracking feature is not the most robust or mature, but has evolved to the point where it is very functional for most projects and will be for SP projects.

  • GitHub desktop client is available for Windows and macOS, but does not support working with issues or other features aside from code.

No change.

Current resource a good fit.

C. A way to coordinate and prioritize product development.

GitHub, under NumFOCUS organization.

  • Not open source, but has become standard platform for open source work and can use without any proprietary tools.

  • Hosted + managed is only deployment option.

  • Issue tracking feature, which is often used for product development coordination, is not the most robust or mature, but has evolved to the point where it is very functional for most projects and will be for SP projects.

  • Kanban feature is very rudimentary and will likely provide only marginal utility at present.

  • GitHub desktop client is available for Windows and macOS, but does not support working with issues or other features aside from code.

No change.

Current resource a good fit.

D. Ways to communicate (synchronously and/or asynchronously) with other project contributors, potential contributors, and users about the project.
Synchronous communication

Slack

  • Not open source, but becoming common among open source projects.

  • Hosted + managed is only deployment option.

  • Product designed for closed teams vs open source projects with public participation.

  • No way to make open by default, though there are are services that provide mechanism for auto-inviting.

  • Pricing model not well-suited to open source projects (where there is often a high ratio of idle users).

  • Proprietary authentication (SSO option expensive), users must be invited, permissions model confusing.

  • Many integrations available.

  • Not built on interoperable standard, though an IRC bridge is available (for now).

  • Supports threads, but they are confusing.

  • Desktop clients available for Linux, macOS, and Windows.

  • Mobile clients available for iOS and Android.

Google talk

  • Hosted + managed is only deployment option.

  • Not open source, moving away from XMPP standard and interoperability.

  • Group chat confusing and not well supported outside of in-browser use.

Zulip

  • Open source.

  • Can be configured to be open by default. Designed primarily for open teams.

  • Better model for open source project collaboration (where there is often a high ratio of idle users).

  • Supports variety of authentication methods.

  • Supports threads.

  • Many integrations available.

  • Less confusing permissions model.

  • Self-hosted or managed hosting options available.

  • Mature project (started at MIT, acquired by Dropbox, spun out again as independent company).

  • Built on interoperable standard, IRC bridge available.

  • Desktop clients available for Linux, macOS, and Windows.

  • Mobile clients available for iOS and Android.

  • Supports multiple languages.

  • Superior moderation features.

Asynchronous communication

Google Groups

  • Not open source.

  • Hosted + managed is only deployment option.

  • Widespread adoption among open source communities.

  • Web interface available but feature poor.

  • Requires a Google account in order to use all features, including web interface.

  • No integrations available.

  • Google doesn’t seem to be actively developing this as a product.

  • Mobile interface is funky and out of date.

Discourse

  • Open source.

  • Self-hosted or managed hosting options available.

  • Supports variety of authentication methods.

  • Superior web interface AND excellent email interface.

  • Many integrations available.

  • Actively developed product.

  • Data is portable.

  • Mobile clients for iOS and Android.

  • Supports multiple languages.

  • Mature project.

  • Superior moderation features.

  • Mobile-friendly.

E. Ways to collaboratively conduct synchronous meetings.
Audio and voice meetings

Google Hangouts

  • Not open source.

  • Hosted + managed is only deployment option.

  • Widespread adoption among open source communities.

  • Does not require a Google account to join a Hangout, but does require a Google account to create one.

  • Participating via phone is possible, though clunky.

  • Google Hangouts has a participant limit that makes it impractical for larger meetings.

GoToMeeting

  • Not open source.

  • Hosted + managed is only deployment option.

  • Participating via phone is easier than with Google Hangout.

  • Requires a GoToMeeting account to start a meeting but not to join one.

No change.

Current resource an adequate fit, but need to confirm account tier on GoToMeeting is sufficient.

Real-time note taking

Google docs

  • Closed source.

  • Hosted + managed is only deployment option.

  • numfocus.org G suite account required to create documents and no way to change this.

  • No way to make documents open by default.

  • Managing permissions is time consuming.

  • Mobile clients for both iOS and Android.

Etherpad Lite.

  • Open source.

  • Open by default. All etherpads are public and ability to make etherpads available to anyone.

  • Easy integration with mediawiki.

  • Self-hosting seems to be only option.

  • Data is portable.

  • Used to be funky to use in mobile browsers, but may have improved.

F. A way to authoritatively communicate what the project is, including its mission, who is involved and how to get involved.

Wordpress-powered website served by WPEngine managed hosting.

GitHub Readme.md and other markdown docs on GitHub repository under NumFOCUS organization.

No change.

Current resource a good fit.

G. A way to host contributor-focused documentation.
GitHub Readme.md and other markdown docs on GitHub repository under NumFOCUS organization.

No change.

Current resource a good fit.

If project needs outgrow GitHub markdown pages, it will be rather straight-forward (and without additional cost) to start using ReadTheDocs.

H. A way to collaboratively record and share the institutional memory of the project (e.g. best practices and other collective knowledge, meeting notes, process log, decision log, history, etc.) of the project.

Wordpress-powered website served by WPEngine managed hosting.

  • Open source.

  • Managed/hosted as well as self-managed/self hosted options (we’re currently using managed hosting).

  • Requires a numfocus.org user account in order to add or edit content.

  • Content is open by default, ability to create and change content is not and can’t be configured as such.

  • Some but limited ability to organize content in a structured way.

  • Many integrations and good interoperability with other platforms.

  • Mobile-friendly.

GitHub Readme.md and other markdown docs on GitHub repository under NumFOCUS organization.

  • See previous notes regarding GitHub.

  • Content open by default. Collaboration is more open but still requires intervention by those with commit access.

Google docs hosted under numfocus.org G Suite account.

  • Closed source.

  • Hosted + managed is only deployment option.

  • numfocus.org G suite account required to create documents and no way to change this.

  • No way to make documents open by default.

  • Managing permissions is time consuming.

  • Content almost completely unstructured with limited ways to organize.

  • Content not discoverable or searchable by the public or anyone outside of numfocus.org staff.

Mediawiki:

  • Structured knowledge repository.

  • Open source.

  • Open, discoverable, and searchable by default.

  • Lots of integrations.

  • Good collaboration tools.

  • Many authentication options.

  • Supports multiple languages.

  • Self-hosted or managed hosting options available.

  • Mobile-friendly.

I estimate that self-hosting the above infrastructure to be the most cost-effective option, requiring an annual budget of about $1,500 and requiring 4-8 hours of technical staff or volunteer time per month to maintain.

I propose we utilize Digital Ocean virtual machines for hosting all services except for email transactions, for which I recommend we use Amazon SES (Simple Email Service).

I am recommending Digital Ocean over Rackspace or Amazon Web Services for virtual machine deployment because:

I recommend Amazon SES for email transactions because I have used it before and it offers competitive pricing. Plus I believe we already have an account with AWS. However, I am open to suggestions for other providers. (We absolutely do need a service to transact emails. All of the services I’ve proposed need a way to send and in some cases receive email. I don’t want to setup and administer a mail server and running independent mail servers and effectively dealing with spam issues is becoming harder and harder.)

Overview of cost, self-hosted vs managed hosting

Tool Self-hosted Managed hosting
Zulip

$30/month, $360 annually.

2 GB VM recommended, $20/month. Plus backups $4/month. Plus daily snapshots ~$6/month.

Dependencies: Email sending provider such as Amazon SES.

Staff resources: Experienced sysadmin/devops role to install (1 day) and maintain (1 hour/month).

Cost TBD.

Tim Abbott, project founder and lead, has indicated they would be willing to host us for free because we are an open source project. Sign-ups current in closed beta, so I would need to follow-up with Tim for details. If we did go with this option, I would want to be good citizens and contribute something monetarily to the project.

Discourse

$30/month, $360 annually.

2 GB VM recommended, $20/month. Plus backups $4/month. Plus daily snapshots ~$6/month.

Dependencies: Email sending provider such as Amazon SES.

Staff resources: Experienced sysadmin/devops role to install (1 day) and maintain (1 hour/month).

Can purchase one-time install support for $99.

Installation is supposed to be straightforward.

$110/month, $1320 annually.

Business plan w/ SSL add-on is $220/month.

Discourse extends 50% discount to NPOs.

30-day free trial available.

Dependencies: None.

Staff resources: Minimal technical resources. Will need to be involved in initial configuration (est 1 day) as well as on-going moderation (1 hour/week).

Etherpad Lite

$30/month, $360 annually.

2 GB VM recommended, $20/month. Plus backups $4/month. Plus daily snapshots ~$6/month.

Dependencies: Email sending provider such as Amazon SES.

Staff resources: Experienced sysadmin/devops role to install (1 day) and maintain (1 hour/month).

N/A

I don’t know of a managed hosting solution for this.

MediaWiki

$30/month, $360 annually.

2 GB VM recommended, $20/month. Plus backups $4/month. Plus daily snapshots ~$6/month.

Dependencies: Email sending provider such as Amazon SES.

Staff resources: Experienced sysadmin/devops role to install (1 day) and maintain (1 hour/month).

Hosting options and pricing vary widely.

Tools server

(server to aid in orchestration of other servers)

$6/month, $50 annually.

512 MB VM recommended, $5/month. Plus backups $1/month.

Dependencies: None.

Staff resources: Experienced sysadmin/devops role to install (1 day) and maintain (0.5 hours/month).

N/A
Amazon SES N/A

~$10/month, $120/annually.

https://aws.amazon.com/ses/pricing/

Cost will be trivial at first and scale with number of messages sent as well as amount of data sent and received. Amount indicated above is HIGH estimate.

$0.09 per 1,000 mail chunks (256KB)

$0.12 per GB of attachments sent.

Email messages are charged at $0.10 per 1,000.

I can provide longer-term pricing projections if needed.

Deployment methodology

Deploying and maintaining the above services will utilize devops best practices whenever feasible. I plan to use configuration management platform Chef and thoroughly document the deployment structure and process. The goal is to deploy in such a way that I am not a bottleneck and others can contribute to maintaining the infrastructure.

Timing and blockers

I can start on this right away. We would need to create a NumFOCUS account with Digital Ocean and attach a payment method to it.

Amazon SES also needs to be in place prior to deploying any of the services. If we already have an AWS account, I need to be granted access to it with appropriate permissions and then I can setup and configure the SES component. Verification will require access to our DNS records, which I believe I already have for numfocus.org through Namecheap.

Once email is configured, I can start deploying the other services. I estimate it will take about one (1) day each to deploy the services and another 1-2 days to complete tooling and documentation.

I would like to have Discourse and Zulip in place prior to a public announcement and call for participation for the Sustainability Index.

A note about scaling

The deployment solutions I’ve proposed above will accommodate the load of NumFOCUS specific work and then some. That is, if it turns out our member projects would like to use any of these tools, they will be able to.

To get an idea of how costs might scale: The next bigger size of VM from the one I have proposed above is 4GB is runs ~$57/month ($40 base + $8 weekly backups + $9 daily snaps). If disk space becomes the limitation, we can explore if block storage is a more economical option.

Risks

I’ve tried to be thorough about thinking through the risks of deploying these services and how we can manage and/or plan for them. Here’s what I have so far:

Christie can’t figure out how to deploy a service or it takes much longer to do so than she has anticipated. A reasonable concern. While not a full-time sysadmin or devops person, I do have significant experience over nearly 20 years of administering linux-based machines. I’m pretty good at it considering it’s not my day job. And I have a substantial network I can tap if I get stuck or otherwise in trouble. If I run over my time estimate, it will likely be by a day or two, not weeks.

I leave NumFOCUS and there is no one available to maintain the services. If I do my job right (e.g. in the ways I’ve described above) it will be straightforward to on-board new administrators and I won’t stay the only person who can help maintain the servers for very long.

Deploying and maintaining these services takes too much of Christie’s time and distracts from the Sustainability work. I’ve spent some time noodling on this one to ensure I’m not falling into the trap of doing fun work at the expense of needed work. What I’ve concluded is that having good collaboration tools is integral to our sustainability work and therefore worth the wise use of my time and energy.

Even though Christie really likes these services, they aren’t widely adopted and we end up paying for something very few people are using. If after some amount of reasonable adoption time (6 months?), very few people are using any of these services, we can decommission it. There is no financial penalty for doing so since we aren’t signing any contracts agreeing to a duration of service. Even keeping something running for a year means we’re out at most a few hundred dollars.

Some of all of these services become very popular and we need to upgrade (spend more money on hosting) to meet demand. This is a good problem to have! It means we are providing a needed service to our contributors. I don’t anticipate that any of these services will suddenly require an exponential cost outlay in order to meet demand. It will be gradual and something we can plan for.

Costs of not deploying this infrastructure

While it’s true to a certain extent that I could organize the work of the Sustainability Program with existing tools, I believe there is a significant downside to not improving our infrastructure at this time. These include: