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 17424 issues and PRs open as of the start of Closember 2022, 1393 were closed and 16031 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 python-visualization/folium 166 34
2 YunoHost/issues 168 0
3 numpy/numpy 135 28
4 astropy/astroquery 111 25
5 datalad/datalad 125 9
6 scipy/scipy 66 51
7 PyCQA/pylint 60 16
8 alan-turing-institute/the-turing-way 49 19
9 ARM-DOE/pyart 26 2
10 spyder-ide/spyder 19 8
11 pytroll/satpy 9 16
12 python-visualization/branca 15 10
13 arviz-devs/arviz 17 4
14 pymc-devs/pymc-examples 5 13
15 Atri-Labs/atrilabs-engine 13 3
16 jupyter/notebook 11 4
17 scikit-image/scikit-image 5 8
18 YunoHost/yunohost 0 13
19 r-devel/rdevguide 6 4
20 ARM-DOE/ACT 9 1
21 ipython/ipython 7 2
22 PyCQA/astroid 2 7
23 bids-standard/bids-matlab 5 3
24 spyder-ide/qtpy 4 3
25 YunoHost-Apps/nextcloud_ynh 6 0
26 kailashchoudhary11/imgman 4 1
27 YunoHost-Apps/etherpad_mypads_ynh 5 0
28 eX-Mech/pymech 4 0
29 vispy/vispy 0 3
30 pytroll/pyspectral 3 0
31 pytroll/pyresample 1 2
32 pygfx/pygfx 1 2
33 ipython/ipykernel 1 2
34 YunoHost/install_script 0 3
35 openteamsinc/closember 2 0
36 librosa/librosa 1 1
37 jupyter/papyri 0 2
38 YunoHost/yunohost-admin 0 2
39 YunoHost/package_check 1 1
40 YunoHost-Apps/pleroma_ynh 1 1
41 YunoHost-Apps/my_webapp_ynh 2 0
42 YunoHost-Apps/mautrix_whatsapp_ynh 1 1
43 YunoHost-Apps/freshrss_ynh 1 1
44 FCP-INDI/C-PAC 1 1
45 timofurrer/awesome-asyncio 0 1
46 spyder-ide/qtawesome 1 0
47 scikit-hep/pyhf 0 1
48 pytorch/ignite 1 0
49 ipython/traitlets 0 1
50 cleder/pygeoif 0 1
51 cleder/fastkml 0 1
52 YunoHost/moulinette 0 1
53 YunoHost/example_ynh 0 1
54 YunoHost/doc 0 1
55 YunoHost-Apps/wikijs_ynh 0 1
56 YunoHost-Apps/wekan_ynh 0 1
57 YunoHost-Apps/wallabag2_ynh 0 1
58 YunoHost-Apps/mobilizon_ynh 1 0
59 YunoHost-Apps/mattermost_ynh 1 0
60 YunoHost-Apps/mastodon_ynh 1 0
61 YunoHost-Apps/gitlab_ynh 1 0
62 YunoHost-Apps/discourse_ynh 0 1
63 YunoHost-Apps/cryptpad_ynh 0 1
64 tqdm/tqdm 0 0
65 radis/radis 0 0
66 pytroll/pyorbital 0 0
67 pygfx/wgpu-py 0 0
68 poliastro/poliastro 0 0
69 physiopy/phys2bids 0 0
70 icesat2py/icepyx 0 0
71 codezonediitj/pydatastructs 0 0
72 bids-standard/bids-starter-kit 0 0
73 YunoHost/ynh-dev 0 0
74 YunoHost/project-organization 0 0
75 YunoHost/apps 0 0
76 YunoHost/SSOwat 0 0
77 YunoHost-Apps/wireguard_ynh 0 0
78 YunoHost-Apps/vpnserver_ynh 0 0
79 YunoHost-Apps/vpnclient_ynh 0 0
80 YunoHost-Apps/vaultwarden_ynh 0 0
81 YunoHost-Apps/ttrss_ynh 0 0
82 YunoHost-Apps/syncthing_ynh 0 0
83 YunoHost-Apps/shaarli_ynh 0 0
84 YunoHost-Apps/redirect_ynh 0 0
85 YunoHost-Apps/pixelfed_ynh 0 0
86 YunoHost-Apps/pihole_ynh 0 0
87 YunoHost-Apps/peertube_ynh 0 0
88 YunoHost-Apps/monica_ynh 0 0
89 YunoHost-Apps/misskey_ynh 0 0
90 YunoHost-Apps/jitsi_ynh 0 0
91 YunoHost-Apps/jellyfin_ynh 0 0
92 YunoHost-Apps/invidious_ynh 0 0
93 YunoHost-Apps/hotspot_ynh 0 0
94 YunoHost-Apps/gogs_ynh 0 0
95 YunoHost-Apps/gitea_ynh 0 0
96 YunoHost-Apps/funkwhale_ynh 0 0
97 YunoHost-Apps/flarum_ynh 0 0
98 YunoHost-Apps/borg_ynh 0 0
99 Remi-Gau/eCobidas 0 0
100 MeeseeksBox/MeeseeksDev 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-Apps/gogs_ynh 0 0
2 YunoHost/ynh-dev 0 0
3 YunoHost-Apps/monica_ynh 1 0
4 YunoHost-Apps/syncthing_ynh 0 1
5 YunoHost-Apps/flarum_ynh 2 0
6 YunoHost-Apps/peertube_ynh 2 0
7 YunoHost/install_script 0 2
8 python-visualization/branca 1 1
9 YunoHost-Apps/misskey_ynh 2 1
10 YunoHost/apps 0 3
11 YunoHost/example_ynh 0 3
12 YunoHost/moulinette 0 3
13 YunoHost-Apps/funkwhale_ynh 2 2
14 YunoHost-Apps/gitea_ynh 4 0
15 YunoHost-Apps/gitlab_ynh 4 0
16 YunoHost-Apps/mautrix_whatsapp_ynh 3 1
17 YunoHost-Apps/wekan_ynh 2 2
18 YunoHost/project-organization 3 1
19 YunoHost-Apps/my_webapp_ynh 4 1
20 YunoHost-Apps/wikijs_ynh 2 3
21 YunoHost/SSOwat 0 5
22 cleder/pygeoif 3 2
23 YunoHost-Apps/discourse_ynh 5 1
24 YunoHost-Apps/jitsi_ynh 5 1
25 YunoHost-Apps/ttrss_ynh 6 0
26 YunoHost-Apps/etherpad_mypads_ynh 7 0
27 YunoHost-Apps/jellyfin_ynh 7 0
28 YunoHost-Apps/vaultwarden_ynh 6 1
29 YunoHost-Apps/pihole_ynh 6 2
30 YunoHost-Apps/shaarli_ynh 8 0
31 YunoHost-Apps/mastodon_ynh 6 3
32 YunoHost-Apps/mattermost_ynh 7 2
33 YunoHost-Apps/pleroma_ynh 8 1
34 timofurrer/awesome-asyncio 0 9
35 YunoHost-Apps/cryptpad_ynh 8 2
36 YunoHost-Apps/freshrss_ynh 8 2
37 YunoHost-Apps/hotspot_ynh 9 1
38 YunoHost-Apps/mobilizon_ynh 7 3
39 YunoHost/package_check 8 2
40 YunoHost-Apps/invidious_ynh 10 1
41 YunoHost-Apps/wireguard_ynh 10 1
42 YunoHost/yunohost-admin 0 11
43 YunoHost-Apps/pixelfed_ynh 10 2
44 YunoHost-Apps/redirect_ynh 9 3
45 kailashchoudhary11/imgman 11 1
46 YunoHost-Apps/vpnclient_ynh 13 0
47 eX-Mech/pymech 10 3
48 spyder-ide/qtpy 11 2
49 ARM-DOE/ACT 14 0
50 openteamsinc/closember 15 0
51 spyder-ide/qtawesome 13 2
52 pytroll/pyspectral 16 1
53 YunoHost-Apps/wallabag2_ynh 15 3
54 YunoHost/doc 0 20
55 pygfx/wgpu-py 19 2
56 YunoHost-Apps/vpnserver_ynh 18 4
57 bids-standard/bids-starter-kit 20 2
58 YunoHost-Apps/borg_ynh 20 3
59 cleder/fastkml 22 1
60 pytroll/pyorbital 18 8
61 YunoHost/yunohost 0 29
62 bids-standard/bids-matlab 31 1
63 MeeseeksBox/MeeseeksDev 31 2
64 r-devel/rdevguide 38 2
65 Remi-Gau/eCobidas 40 1
66 python-visualization/folium 43 3
67 physiopy/phys2bids 42 6
68 ARM-DOE/pyart 47 3
69 jupyter/papyri 51 0
70 librosa/librosa 44 8
71 icesat2py/icepyx 44 10
72 radis/radis 59 4
73 pygfx/pygfx 64 5
74 codezonediitj/pydatastructs 58 15
75 pytroll/pyresample 80 13
76 YunoHost-Apps/nextcloud_ynh 92 8
77 Atri-Labs/atrilabs-engine 95 6
78 ipython/traitlets 91 10
79 pymc-devs/pymc-examples 109 9
80 poliastro/poliastro 99 25
81 pytorch/ignite 112 37
82 arviz-devs/arviz 154 10
83 PyCQA/astroid 150 26
84 ipython/ipykernel 219 23
85 vispy/vispy 283 35
86 YunoHost/issues 347 0
87 astropy/astroquery 320 36
88 FCP-INDI/C-PAC 349 14
89 scikit-hep/pyhf 342 30
90 tqdm/tqdm 312 88
91 pytroll/satpy 321 100
92 datalad/datalad 443 14
93 alan-turing-institute/the-turing-way 388 75
94 scikit-image/scikit-image 454 196
95 PyCQA/pylint 636 38
96 spyder-ide/spyder 1108 61
97 ipython/ipython 1479 80
98 scipy/scipy 1420 279
99 jupyter/notebook 1991 45
100 numpy/numpy 1949 198

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 numpy/numpy 10 years numpy/numpy#590
2 scipy/scipy 9 years scipy/scipy#1261
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 PyCQA/pylint 8 years PyCQA/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 python-visualization/folium 6 years python-visualization/folium#413
11 YunoHost-Apps/nextcloud_ynh 5 years YunoHost-Apps/nextcloud_ynh#73
12 YunoHost-Apps/etherpad_mypads_ynh 4 years YunoHost-Apps/etherpad_mypads_ynh#25
13 pytroll/satpy 4 years pytroll/satpy#370
14 arviz-devs/arviz 4 years arviz-devs/arviz#197
15 alan-turing-institute/the-turing-way 3 years alan-turing-institute/the-turing-way#124
16 jupyter/notebook 3 years jupyter/notebook#4599
17 ARM-DOE/ACT 3 years ARM-DOE/ACT#57
18 python-visualization/branca 3 years python-visualization/branca#60
19 pygfx/pygfx 2 years pygfx/pygfx#85
20 bids-standard/bids-matlab 1 year, 9 months bids-standard/bids-matlab#144
21 vispy/vispy 1 year, 8 months vispy/vispy#1330
22 pymc-devs/pymc-examples 1 year, 7 months pymc-devs/pymc-examples#71
23 librosa/librosa 1 year, 6 months librosa/librosa#615
24 scikit-image/scikit-image 1 year, 2 months scikit-image/scikit-image#5561
25 YunoHost-Apps/mobilizon_ynh 11 months YunoHost-Apps/mobilizon_ynh#120
26 r-devel/rdevguide 11 months r-devel/rdevguide#29
27 pytroll/pyspectral 10 months pytroll/pyspectral#143
28 YunoHost/package_check 8 months YunoHost/package_check#118
29 YunoHost-Apps/gitlab_ynh 6 months YunoHost-Apps/gitlab_ynh#191
30 tqdm/tqdm 5 months tqdm/tqdm#1310
31 eX-Mech/pymech 5 months eX-Mech/pymech#53
32 pytroll/pyresample 3 months pytroll/pyresample#445
33 Atri-Labs/atrilabs-engine 3 months Atri-Labs/atrilabs-engine#34
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 kailashchoudhary11/imgman a month kailashchoudhary11/imgman#44
38 YunoHost-Apps/mattermost_ynh a month YunoHost-Apps/mattermost_ynh#398
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 PyCQA/astroid 24 days PyCQA/astroid#1843
43 pytorch/ignite 20 days pytorch/ignite#2754
44 openteamsinc/closember 17 days openteamsinc/closember#15
45 YunoHost-Apps/jellyfin_ynh 13 days YunoHost-Apps/jellyfin_ynh#116
46 YunoHost-Apps/gitea_ynh 10 days YunoHost-Apps/gitea_ynh#61
47 YunoHost-Apps/freshrss_ynh 10 days YunoHost-Apps/freshrss_ynh#148
48 ipython/ipykernel 8 days ipython/ipykernel#1026
49 pygfx/wgpu-py 8 days pygfx/wgpu-py#294
50 YunoHost-Apps/peertube_ynh 21 hours YunoHost-Apps/peertube_ynh#357
51 spyder-ide/qtawesome 13 hours spyder-ide/qtawesome#217
52 MeeseeksBox/MeeseeksDev 9 hours MeeseeksBox/MeeseeksDev#92
53 scikit-hep/pyhf 2 hours scikit-hep/pyhf#2067
54 ipython/traitlets an hour ipython/traitlets#800
55 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 66 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
jadecci
djhoese
OriolAbril
JessicaS11
martinacantaro
cmarmo
francoisgoupil
Vincent-Maladiere
hturner
bmcfee
jackdeadman
tupui
matthewfeickert
lagru
fly51fly
tituspijean
pavithraes
clstaudt
mraspaud
eeshwarantharan
bskinn
insolitum
xerus
ShashankKumarSaxena
mgrover1
LJWilliams
akanz1
AnirudhDagar
proinsias
noatamir
BeastyBlacksmith
Conengmo
lastephey

 

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)