Closember

Closember 2022 Is Over

Thanks to everyone who helped support open source maintainers by closing issues and pull requests throughout November.

Closember is a month-long initiative for maintainers, contributors, and open source enthusiasts run by Quansight, OpenTeams, and FairOSS. The goal of Closember is to encourage better and healthier open source community practices while raising awareness about maintainer burnout.

 

Why Closember?

An ongoing source of stress for maintainers of many open source projects is the steady stream of issues and PRs flowing into their bug tracker feeds. It’s a double-edged sword: community participation is a key element of a healthy project, but if the rate of incoming tickets becomes too great, a backlog starts to build up. An issue/PR backlog is both stressful for the maintainers, and can decrease the morale of potential contributors... “Will my PR even be noticed amid all these others?” This problem is worse if many of those issues don’t provide enough details on the problem or requested feature, or if those PRs need a lot of work before they can be merged.

Closember emphasizes that participating in open source is a two-way street between maintainers and contributors. Maintaining projects requires significant time and effort, and that work needs to be noticed, valued, and validated. As well, contributing to a project carries a number of responsibilities, in order to make it as easy as possible for a project to receive that contribution. However, best practices for project maintenance, maintainer self-care, and project contributions aren’t always obvious. Closember raises awareness of this in order to support the community as a whole.

(back to top)

For Maintainers: How to Get Ready

All right, maintainers—so you have a project that could use some maintainability help, and you'd like to get in on the Closember action next year. What should you do to get ready?

Well, first of all, keep in mind that the most fundamental point of Closember is maintainer health and well-being. So, take care of yourself first, whatever that means ... diet, exercise, sleep, relaxation ... only you know what you need. One thing that we often find helpful is to declutter our physical and digital environment: tidying our desks a bit, decluttering our computers’ desktops, unsubscribing from some email lists ... that sort of thing.

Another thing to consider is that working with Closember contributions will involve extra time and effort on your part. So, even if your project could use some help, the best thing for you might be not to participate!

If you decide to jump in, though, the biggest thing you'll need to do before tagging your repo with closember is to decide what kind of help you want. If you only want assistance with closing some issues and PRs, then it'll be enough to tag your repo with closember and leave it at that.

However, there are other ways that you might want to invite help: triaging, infrastructure, refactoring, technical writing, design, translation, accessibility.... There are lots of possibilities! If you're feeling up to it, as next year's Closember approaches take stock of your project and identify one or two (or more!) areas where it would most benefit from some maintenance help. Then, you'll edit your README or create a Closember issue to let visitors know what sort of help you’re looking for, tag your repo with closember, and engage with the community as they come by!

(back to top)

For the Community: How to Participate

Closember is something of a choose-your-own-adventure—there’s no one way to participate.

If you’ve never used GitHub before, your first step is going to be signing up for a free account. While there are other collaborative git-based development services out there—GitLab and Atlassian Bitbucket are two of the most popular—Closember is centered on GitHub.

If you’ve opened issues or PRs on projects in the past, you don't need to wait until next Closember to get started! Take a look at your own GitHub issues and your own PRs to see if any of them are outdated or have already been fixed—if so, close them! Beyond that, as Closember approaches next year, start browsing projects: take a look at your favorite projects and see if they’ve been tagged with closember, or browse the list of closember projects.

Once you've picked a project and Closember is underway, you can engage! Check out the project's repository to see if they’ve posted instructions for the help they're looking for during Closember—if they have, follow those instructions.

If not, then you can browse their issues and PRs to see if any are stale or need action from the original poster. If they're stale, comment on them explaining why they seem stale and can be closed. (For example, "This issue relates to Python 3.5, which is no longer supported. So, it can probably be closed.") If issues/PRs need action from the original poster, comment on them to restart the conversation with that original poster. Sometimes, discussion will happen and move the issue/PR forward. Other times, no one will respond, and then you can recommend to the project maintainers that they be closed.

To stay in the loop, follow @ClosemberDev & use the #Closember hashtag on Twitter, and watch the Closember repo on GitHub:



(back to top)

Closeboards

As we’ve described above, Closember is mainly about the health of open source maintainers and projects. So, while we’ve defined some Closember success metrics for ourselves, these metrics aren’t the be-all and end-all. Each open source community and project can have its own goals and metrics, which fit its size, philosophy, etc.—part of the fun and purpose of Closember is the discussion around what it means for a community to be ‘healthy.’ For example, you have to be aware of the possibility for ‘normalization of deviance’, where even though a practice is accepted, it’s still unhealthy.

The metrics we calculate here are focused on closing old issues and PRs, since that’s something that’s pretty easy to quantify. Again, there are no objectively good or bad metrics—these are merely the ones we’ve chosen to present. Our metrics are calculated for each participating repository, and are:

  1. Total issues closed during Closember, which were opened before Closember
  2. Total issues opened before Closember, which are not yet closed
  3. Overall oldest issues closed during Closember
Remember, remember, to close a PR in November.

— A Maintainer

To the numbers!

Overall, of the 16610 issues and PRs open as of the start of Closember 2022, 2388 were closed and 14222 were open at the end of the month.

Closed Issues/PRs

Top 100 participating repos with the most pre-Closember issues & PRs that were closed during Closember.

# Repository Closed Issues Closed/Merged PRs
1 scipy/scipy 284 113
2 spyder-ide/spyder 175 23
3 the-turing-way/the-turing-way 163 32
4 YunoHost/issues 193 0
5 astropy/astroquery 144 32
6 pylint-dev/pylint 142 26
7 jupyter/notebook 112 35
8 datalad/datalad 133 12
9 scikit-image/scikit-image 30 34
10 pytroll/satpy 28 30
11 arviz-devs/arviz 32 8
12 pylint-dev/astroid 18 18
13 pymc-devs/pymc-examples 17 16
14 YunoHost-Apps/nextcloud_ynh 28 4
15 ARM-DOE/pyart 28 2
16 ipython/ipython 22 6
17 YunoHost/yunohost 0 27
18 python-visualization/branca 15 10
19 FCP-INDI/C-PAC 22 3
20 snek5000/snek5000 19 3
21 r-devel/rdevguide 18 4
22 ipython/traitlets 16 3
23 tqdm/tqdm 8 7
24 radis/radis 12 3
25 ARM-DOE/ACT 14 1
26 pytorch/ignite 8 5
27 vispy/vispy 5 7
28 icesat2py/icepyx 8 3
29 bids-standard/bids-matlab 6 3
30 YunoHost-Apps/vpnclient_ynh 9 0
31 spyder-ide/qtpy 5 3
32 poliastro/poliastro 3 5
33 ipython/ipykernel 5 3
34 eX-Mech/pymech 7 1
35 scikit-hep/pyhf 6 1
36 physiopy/phys2bids 3 4
37 YunoHost-Apps/hotspot_ynh 6 1
38 pytroll/pyresample 2 4
39 codezonediitj/pydatastructs 4 2
40 YunoHost/doc 0 6
41 YunoHost-Apps/mautrix_whatsapp_ynh 4 2
42 kailashchoudhary11/imgman 4 1
43 cleder/fastkml 3 2
44 YunoHost/package_check 4 1
45 YunoHost-Apps/wireguard_ynh 5 0
46 YunoHost-Apps/mobilizon_ynh 5 0
47 YunoHost-Apps/mattermost_ynh 3 2
48 YunoHost-Apps/jellyfin_ynh 5 0
49 YunoHost-Apps/etherpad_mypads_ynh 5 0
50 timofurrer/awesome-asyncio 0 4
51 spyder-ide/qtawesome 3 1
52 jupyter/papyri 2 2
53 bids-standard/bids-starter-kit 4 0
54 YunoHost/yunohost-admin 0 4
55 YunoHost/moulinette 0 4
56 YunoHost-Apps/vaultwarden_ynh 4 0
57 YunoHost-Apps/mastodon_ynh 3 1
58 YunoHost-Apps/firefly-iii_ynh 2 2
59 YunoHost-Apps/calibreweb_ynh 3 1
60 YunoHost-Apps/borg_ynh 2 2
61 pytroll/pyspectral 3 0
62 YunoHost/install_script 0 3
63 YunoHost/example_ynh 0 3
64 YunoHost/SSOwat 0 3
65 YunoHost-Apps/wordpress_ynh 1 2
66 YunoHost-Apps/wallabag2_ynh 2 1
67 YunoHost-Apps/vpnserver_ynh 1 2
68 YunoHost-Apps/pleroma_ynh 2 1
69 openteamsinc/closember 2 0
70 YunoHost-Apps/peertube_ynh 2 0
71 YunoHost-Apps/my_webapp_ynh 2 0
72 YunoHost-Apps/invidious_ynh 1 1
73 YunoHost-Apps/funkwhale_ynh 1 1
74 YunoHost-Apps/freshrss_ynh 1 1
75 MeeseeksBox/MeeseeksDev 0 2
76 cleder/pygeoif 0 1
77 YunoHost/project-organization 0 1
78 YunoHost/apps 0 1
79 YunoHost-Apps/wikijs_ynh 0 1
80 YunoHost-Apps/ttrss_ynh 1 0
81 YunoHost-Apps/pixelfed_ynh 1 0
82 YunoHost-Apps/pihole_ynh 1 0
83 YunoHost-Apps/kresus_ynh 1 0
84 YunoHost-Apps/discourse_ynh 0 1
85 YunoHost-Apps/castopod_ynh 0 1
86 pytroll/pyorbital 0 0
87 YunoHost/ynh-dev 0 0
88 YunoHost-Apps/syncthing_ynh 0 0
89 YunoHost-Apps/shaarli_ynh 0 0
90 YunoHost-Apps/redirect_ynh 0 0
91 YunoHost-Apps/monica_ynh 0 0
92 YunoHost-Apps/misskey_ynh 0 0
93 YunoHost-Apps/lemmy_ynh 0 0
94 YunoHost-Apps/jitsi_ynh 0 0
95 YunoHost-Apps/gogs_ynh 0 0
96 YunoHost-Apps/gitea_ynh 0 0
97 YunoHost-Apps/flarum_ynh 0 0
98 YunoHost-Apps/ampache_ynh 0 0
99 YunoHost-Apps/alltube_ynh 0 0
100 Remi-Gau/eCobidas 0 0

Open Issues/PRs

Top 100 participating repos with the least remaining pre-Closember issues & PRs still open as of the end of November.

# Repository Open Issues Open PRs
1 YunoHost/project-organization 0 0
2 YunoHost/ynh-dev 0 0
3 YunoHost-Apps/alltube_ynh 1 0
4 YunoHost-Apps/flarum_ynh 2 0
5 YunoHost-Apps/funkwhale_ynh 2 0
6 YunoHost-Apps/gogs_ynh 2 0
7 YunoHost-Apps/syncthing_ynh 1 1
8 YunoHost-Apps/calibreweb_ynh 3 0
9 YunoHost-Apps/mautrix_whatsapp_ynh 1 2
10 YunoHost-Apps/monica_ynh 2 1
11 YunoHost-Apps/wikijs_ynh 2 1
12 YunoHost/example_ynh 0 3
13 YunoHost/install_script 0 3
14 python-visualization/branca 2 1
15 YunoHost-Apps/ampache_ynh 4 0
16 YunoHost-Apps/mobilizon_ynh 3 1
17 YunoHost/apps 0 4
18 YunoHost-Apps/jellyfin_ynh 3 2
19 YunoHost-Apps/vpnclient_ynh 5 0
20 YunoHost-Apps/wireguard_ynh 5 0
21 YunoHost/moulinette 0 5
22 cleder/pygeoif 3 2
23 YunoHost-Apps/firefly-iii_ynh 5 1
24 YunoHost-Apps/jitsi_ynh 6 1
25 YunoHost-Apps/mattermost_ynh 7 0
26 YunoHost-Apps/peertube_ynh 6 1
27 YunoHost-Apps/ttrss_ynh 6 1
28 YunoHost-Apps/vaultwarden_ynh 4 3
29 YunoHost/SSOwat 0 7
30 YunoHost-Apps/castopod_ynh 7 1
31 YunoHost-Apps/hotspot_ynh 6 2
32 YunoHost-Apps/kresus_ynh 7 1
33 YunoHost-Apps/pleroma_ynh 8 0
34 YunoHost-Apps/shaarli_ynh 8 0
35 YunoHost/yunohost-admin 0 8
36 YunoHost-Apps/pihole_ynh 6 3
37 YunoHost-Apps/lemmy_ynh 7 3
38 YunoHost-Apps/misskey_ynh 7 3
39 YunoHost/package_check 7 3
40 timofurrer/awesome-asyncio 0 10
41 YunoHost-Apps/etherpad_mypads_ynh 10 1
42 YunoHost-Apps/pixelfed_ynh 9 2
43 YunoHost-Apps/freshrss_ynh 11 1
44 YunoHost-Apps/invidious_ynh 12 0
45 YunoHost-Apps/gitea_ynh 10 3
46 YunoHost-Apps/my_webapp_ynh 12 1
47 kailashchoudhary11/imgman 12 1
48 ARM-DOE/ACT 14 0
49 YunoHost-Apps/mastodon_ynh 8 6
50 YunoHost-Apps/discourse_ynh 10 5
51 eX-Mech/pymech 9 6
52 YunoHost-Apps/redirect_ynh 12 4
53 YunoHost/doc 0 16
54 openteamsinc/closember 16 0
55 snek5000/snek5000 16 1
56 spyder-ide/qtpy 14 4
57 YunoHost-Apps/vpnserver_ynh 17 2
58 YunoHost-Apps/wallabag2_ynh 14 5
59 pytroll/pyspectral 20 3
60 r-devel/rdevguide 22 2
61 spyder-ide/qtawesome 21 3
62 cleder/fastkml 25 1
63 YunoHost-Apps/borg_ynh 26 2
64 pytroll/pyorbital 19 9
65 bids-standard/bids-starter-kit 26 4
66 YunoHost/yunohost 0 31
67 MeeseeksBox/MeeseeksDev 33 1
68 YunoHost-Apps/wordpress_ynh 33 2
69 bids-standard/bids-matlab 33 3
70 Remi-Gau/eCobidas 40 0
71 physiopy/phys2bids 46 5
72 ARM-DOE/pyart 51 2
73 icesat2py/icepyx 49 10
74 jupyter/papyri 64 2
75 codezonediitj/pydatastructs 60 16
76 radis/radis 70 8
77 pytroll/pyresample 83 11
78 ipython/traitlets 88 9
79 YunoHost-Apps/nextcloud_ynh 92 9
80 pymc-devs/pymc-examples 113 7
81 poliastro/poliastro 119 23
82 pytorch/ignite 119 42
83 pylint-dev/astroid 147 16
84 arviz-devs/arviz 156 10
85 ipython/ipykernel 237 24
86 vispy/vispy 299 34
87 astropy/astroquery 330 36
88 FCP-INDI/C-PAC 367 16
89 YunoHost/issues 394 0
90 scikit-hep/pyhf 367 35
91 pytroll/satpy 348 91
92 the-turing-way/the-turing-way 372 88
93 tqdm/tqdm 358 104
94 datalad/datalad 457 19
95 scikit-image/scikit-image 519 223
96 pylint-dev/pylint 770 37
97 spyder-ide/spyder 1084 56
98 ipython/ipython 1553 80
99 scipy/scipy 1406 265
100 jupyter/notebook 1971 20

Oldest Closed Issues

Participating repos with the oldest issues closed during Closember.

Note: Data for the oldest closed PR isn't reported here because it doesn't appear to be available in the GitHub API. If you figure out a way to get at this data, please let us know!

# Repository Closed After Oldest issue closed
1 scipy/scipy 9 years scipy/scipy#1261
2 scikit-image/scikit-image 9 years scikit-image/scikit-image#544
3 astropy/astroquery 8 years astropy/astroquery#281
4 ARM-DOE/pyart 8 years ARM-DOE/pyart#129
5 ipython/ipython 8 years ipython/ipython#6401
6 pylint-dev/pylint 8 years pylint-dev/pylint#344
7 YunoHost/issues 7 years YunoHost/issues#7
8 spyder-ide/spyder 6 years spyder-ide/spyder#3001
9 datalad/datalad 6 years datalad/datalad#373
10 jupyter/notebook 5 years jupyter/notebook#1734
11 YunoHost-Apps/nextcloud_ynh 5 years YunoHost-Apps/nextcloud_ynh#73
12 tqdm/tqdm 4 years tqdm/tqdm#278
13 pytroll/satpy 4 years pytroll/satpy#370
14 arviz-devs/arviz 4 years arviz-devs/arviz#197
15 the-turing-way/the-turing-way 3 years the-turing-way/the-turing-way#124
16 ARM-DOE/ACT 3 years ARM-DOE/ACT#57
17 ipython/ipykernel 3 years ipython/ipykernel#402
18 python-visualization/branca 3 years python-visualization/branca#60
19 bids-standard/bids-matlab 1 year, 9 months bids-standard/bids-matlab#144
20 vispy/vispy 1 year, 8 months vispy/vispy#1330
21 pymc-devs/pymc-examples 1 year, 7 months pymc-devs/pymc-examples#71
22 snek5000/snek5000 1 year, 6 months snek5000/snek5000#31
23 YunoHost-Apps/mobilizon_ynh 11 months YunoHost-Apps/mobilizon_ynh#120
24 r-devel/rdevguide 11 months r-devel/rdevguide#29
25 pytroll/pyspectral 10 months pytroll/pyspectral#143
26 pylint-dev/astroid 10 months pylint-dev/astroid#1107
27 pytorch/ignite 10 months pytorch/ignite#2159
28 YunoHost/package_check 8 months YunoHost/package_check#118
29 eX-Mech/pymech 5 months eX-Mech/pymech#53
30 YunoHost-Apps/discourse_ynh 4 months YunoHost-Apps/discourse_ynh#16
31 radis/radis 4 months radis/radis#239
32 pytroll/pyresample 3 months pytroll/pyresample#445
33 YunoHost-Apps/calibreweb_ynh 3 months YunoHost-Apps/calibreweb_ynh#91
34 YunoHost-Apps/pleroma_ynh 2 months YunoHost-Apps/pleroma_ynh#209
35 YunoHost-Apps/my_webapp_ynh 2 months YunoHost-Apps/my_webapp_ynh#93
36 spyder-ide/qtpy a month spyder-ide/qtpy#367
37 physiopy/phys2bids a month physiopy/phys2bids#314
38 kailashchoudhary11/imgman a month kailashchoudhary11/imgman#44
39 YunoHost-Apps/mastodon_ynh a month YunoHost-Apps/mastodon_ynh#341
40 poliastro/poliastro a month poliastro/poliastro#1535
41 FCP-INDI/C-PAC 26 days FCP-INDI/C-PAC#1795
42 openteamsinc/closember 17 days openteamsinc/closember#15
43 YunoHost-Apps/jellyfin_ynh 13 days YunoHost-Apps/jellyfin_ynh#116
44 YunoHost-Apps/gitea_ynh 10 days YunoHost-Apps/gitea_ynh#61
45 YunoHost-Apps/freshrss_ynh 10 days YunoHost-Apps/freshrss_ynh#148
46 YunoHost-Apps/kresus_ynh 3 days YunoHost-Apps/kresus_ynh#144
47 YunoHost-Apps/homeassistant_ynh 22 hours YunoHost-Apps/homeassistant_ynh#152
48 YunoHost-Apps/peertube_ynh 21 hours YunoHost-Apps/peertube_ynh#357
49 spyder-ide/qtawesome 13 hours spyder-ide/qtawesome#217
50 MeeseeksBox/MeeseeksDev 9 hours MeeseeksBox/MeeseeksDev#92
51 scikit-hep/pyhf 2 hours scikit-hep/pyhf#2067
52 ipython/traitlets an hour ipython/traitlets#800
53 YunoHost-Apps/wireguard_ynh an hour YunoHost-Apps/wireguard_ynh#74
(back to top)

Show Your Support

In addition to engaging with your favorite open source projects, support Closember by starring our repo! Right now we have 64 Github stargazers:

JPTIZ
hearot
hameerabbasi
diefans
Carreau
ericdatakelly
willmcgugan
astrojuanlu
jefftriplett
timofurrer
ENM1989
neutrinoceros
czgdp1807
pratikgl
thelittlebug
toonarmycaptain
Jordan-Cottle
joshuacwnewton
dalthviz
ayharano
luizirber
SaranjeetKaur
InessaPawson
mih
smoia
bsipocz
mwcraig
adswa
dcherian
yarikoptic
mvdoc
yochannah
Remi-Gau
djhoese
OriolAbril
JessicaS11
martinacantaro
cmarmo
francoisgoupil
Vincent-Maladiere
hturner
bmcfee
jackdeadman
tupui
matthewfeickert
lagru
fly51fly
tituspijean
pavithraes
clstaudt
mraspaud
eeshwarantharan
bskinn
xerus
ShashankKumarSaxena
mgrover1
LJWilliams
AnirudhDagar
proinsias
noatamir
BeastyBlacksmith
Conengmo
lastephey
martin12333

 

If you're interested in partnering with us in support of Closember, please email us. Closember is currently sponsored by Quansight, OpenTeams, and FairOSS.

 

(back to top)

Discussion

As noted above, you can participate in the Closember discussion on Twitter by following @ClosemberDev and using the #closember hashtag. You can also engage in the thread below by commenting on this GitHub issue.

(back to top)