Context

Software projects on the scale of Open edX require a lot of ongoing code maintenance effort: upgrading or replacing stale dependencies, adapting to changes in the software development ecosystem, implementing suggested small improvements, etc. Open edX has done relatively well at assigning active maintainers to all parts of the code so truly critical updates happen when needed, but has struggled a little more with prioritizing small effort maintenance tasks that collectively have a big impact on the ease of working with the code. Various attempts at prioritizing such effort within the core owning teams have met with limited success because of the opportunity cost of larger, high-impact projects that require context and expertise which can only efficiently be undertaken by these same teams. Previous attempts at crowdsourcing tasks related to major software upgrades have been somewhat more successful, and we believe that further iteration on this model of opening up certain categories of code changes to a broader base of developers can help accelerate the overall pace of improvements to the platform.

Defining Maintenance Tasks

Anyone who notices the need for an Open edX code maintenance task is welcome to create an issue for it, although the expectation is that initially most will come from the maintainers of the code involved. (And maintainers are free to decline submitted issues they feel are inappropriate for contribution.) Such issues should be:

Recruiting Help with Maintenance Tasks

There are several candidate pools of assistants with maintenance tasks, and incentives for them to help. Note that some experience is required; the teams creating these tasks and reviewing code contributed for them aren’t set up to mentor people with almost no relevant experience. Junior developers are welcome, as long as they have successfully made similar contributions in the past (not necessarily in Open edX). But people still learning how to create their first pull request will probably just get frustrated until they master that skill in a more beginner-oriented context.

Performing Maintenance Tasks

While we definitely want help with maintenance tasks, there are a few guidelines to keep in mind when choosing one in order to minimize the amount of frustration for all parties involved:

Reviewing Maintenance Tasks

Once a PR for a maintenance task is ready for review, the maintainer for that part of the code needs to establish a plan for getting it either merged or explicitly declined.

Prior Art

https://open-edx-proposals.readthedocs.io/en/latest/processes/oep-0025-proc-incremental-improvements.html (INCR) was the first attempt at defining such a process, and this was used as the basis of distributing the Python 2 → 3 upgrade work across the Open edX community and even casually interested developers who had not yet joined the community. It succeeded in processing a large volume of relatively straightforward code changes, and encouraged a handful of people to stay involved in Open edX for a while, but imposed a significant code review burden on a handful of edX employees and didn’t give the new contributors a good path for growing into more regular involvement. A success overall, but with clear room for improvement.

Django 3.2 Upgrade: How the Community Can Help documents the next big effort we made to distribute a large maintenance project across the community. The tasks assigned to the community were specifically chosen for minimal review need from the Open edX community, primarily involving review by upstream package maintainers for Open edX dependencies. This wasn’t as well suited for junior developers as the INCR tasks, and many of the assignments had a long tail of back and forth with the upstream maintainers, but it did free up Open edX repository maintainers to focus on the parts of the upgrade that they were most uniquely suited to undertake.