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 17835 issues and PRs open as of the start of Closember 2022, 1765 were closed and 16070 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 numpy/numpy 171 45
2 scipy/scipy 142 71
3 python-visualization/folium 170 34
4 YunoHost/issues 169 0
5 astropy/astroquery 118 27
6 datalad/datalad 127 11
7 alan-turing-institute/the-turing-way 83 19
8 PyCQA/pylint 84 16
9 spyder-ide/spyder 30 10
10 pytroll/satpy 14 20
11 arviz-devs/arviz 21 7
12 ARM-DOE/pyart 26 2
13 scikit-image/scikit-image 8 18
14 python-visualization/branca 15 10
15 YunoHost-Apps/nextcloud_ynh 22 2
16 pymc-devs/pymc-examples 9 14
17 snek5000/snek5000 17 3
18 jupyter/notebook 13 6
19 YunoHost/yunohost 0 15
20 PyCQA/astroid 3 12
21 ipython/ipython 11 3
22 r-devel/rdevguide 6 4
23 ARM-DOE/ACT 9 1
24 pygfx/pygfx 5 4
25 bids-standard/bids-matlab 5 3
26 vispy/vispy 2 5
27 spyder-ide/qtpy 4 3
28 librosa/librosa 4 3
29 ipython/ipykernel 3 3
30 kailashchoudhary11/imgman 4 1
31 YunoHost-Apps/etherpad_mypads_ynh 5 0
32 radis/radis 2 2
33 pytorch/ignite 3 1
34 YunoHost/yunohost-admin 0 4
35 YunoHost/project-organization 3 1
36 YunoHost/package_check 3 1
37 YunoHost/doc 0 4
38 timofurrer/awesome-asyncio 0 3
39 spyder-ide/qtawesome 2 1
40 pytroll/pyspectral 3 0
41 pytroll/pyresample 1 2
42 jupyter/papyri 1 2
43 ipython/traitlets 2 1
44 cleder/fastkml 1 2
45 YunoHost/install_script 0 3
46 YunoHost-Apps/wordpress_ynh 1 2
47 YunoHost-Apps/wallabag2_ynh 2 1
48 YunoHost-Apps/pleroma_ynh 2 1
49 FCP-INDI/C-PAC 2 1
50 poliastro/poliastro 1 1
51 physiopy/phys2bids 0 2
52 openteamsinc/closember 2 0
53 YunoHost/moulinette 0 2
54 YunoHost/SSOwat 0 2
55 YunoHost-Apps/my_webapp_ynh 2 0
56 YunoHost-Apps/mautrix_whatsapp_ynh 1 1
57 YunoHost-Apps/mastodon_ynh 1 1
58 YunoHost-Apps/freshrss_ynh 1 1
59 YunoHost-Apps/firefly-iii_ynh 0 2
60 YunoHost-Apps/cryptpad_ynh 0 2
61 scikit-hep/pyhf 0 1
62 pygfx/wgpu-py 0 1
63 icesat2py/icepyx 1 0
64 cleder/pygeoif 0 1
65 YunoHost/example_ynh 0 1
66 YunoHost-Apps/wikijs_ynh 0 1
67 YunoHost-Apps/vpnserver_ynh 1 0
68 YunoHost-Apps/mobilizon_ynh 1 0
69 YunoHost-Apps/gitlab_ynh 1 0
70 YunoHost-Apps/discourse_ynh 0 1
71 YunoHost-Apps/borg_ynh 1 0
72 tqdm/tqdm 0 0
73 pytroll/pyorbital 0 0
74 codezonediitj/pydatastructs 0 0
75 bids-standard/bids-starter-kit 0 0
76 YunoHost/ynh-dev 0 0
77 YunoHost/apps 0 0
78 YunoHost-Apps/wireguard_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/mattermost_ynh 0 0
91 YunoHost-Apps/jitsi_ynh 0 0
92 YunoHost-Apps/jellyfin_ynh 0 0
93 YunoHost-Apps/invidious_ynh 0 0
94 YunoHost-Apps/hotspot_ynh 0 0
95 YunoHost-Apps/gogs_ynh 0 0
96 YunoHost-Apps/gitea_ynh 0 0
97 YunoHost-Apps/funkwhale_ynh 0 0
98 YunoHost-Apps/flarum_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/project-organization 0 0
3 YunoHost-Apps/monica_ynh 1 0
4 YunoHost/apps 0 1
5 YunoHost/ynh-dev 0 1
6 python-visualization/branca 1 0
7 YunoHost-Apps/flarum_ynh 2 0
8 YunoHost-Apps/syncthing_ynh 0 2
9 YunoHost/install_script 0 2
10 YunoHost-Apps/funkwhale_ynh 2 1
11 YunoHost-Apps/wikijs_ynh 2 1
12 YunoHost/moulinette 0 3
13 YunoHost-Apps/gitea_ynh 4 0
14 YunoHost-Apps/gitlab_ynh 4 0
15 YunoHost/SSOwat 0 4
16 YunoHost/example_ynh 0 4
17 cleder/pygeoif 3 1
18 YunoHost-Apps/jitsi_ynh 5 0
19 YunoHost-Apps/peertube_ynh 5 0
20 YunoHost-Apps/firefly-iii_ynh 6 0
21 YunoHost-Apps/ttrss_ynh 6 0
22 YunoHost-Apps/etherpad_mypads_ynh 7 0
23 YunoHost-Apps/mastodon_ynh 5 2
24 YunoHost-Apps/mautrix_whatsapp_ynh 5 2
25 YunoHost-Apps/misskey_ynh 5 2
26 YunoHost-Apps/vaultwarden_ynh 6 1
27 YunoHost/yunohost-admin 0 7
28 timofurrer/awesome-asyncio 0 7
29 YunoHost-Apps/discourse_ynh 5 3
30 YunoHost-Apps/my_webapp_ynh 6 2
31 YunoHost-Apps/pleroma_ynh 8 0
32 YunoHost-Apps/freshrss_ynh 8 1
33 YunoHost-Apps/jellyfin_ynh 9 0
34 YunoHost-Apps/pixelfed_ynh 8 1
35 YunoHost-Apps/shaarli_ynh 9 0
36 YunoHost-Apps/hotspot_ynh 9 1
37 YunoHost-Apps/mobilizon_ynh 8 2
38 YunoHost-Apps/invidious_ynh 10 1
39 YunoHost-Apps/wireguard_ynh 11 0
40 YunoHost/package_check 6 5
41 YunoHost-Apps/cryptpad_ynh 9 3
42 YunoHost-Apps/redirect_ynh 9 3
43 YunoHost-Apps/pihole_ynh 7 6
44 YunoHost-Apps/vpnclient_ynh 13 0
45 kailashchoudhary11/imgman 12 1
46 YunoHost-Apps/mattermost_ynh 11 3
47 spyder-ide/qtawesome 13 1
48 openteamsinc/closember 15 0
49 YunoHost-Apps/wallabag2_ynh 14 3
50 pygfx/wgpu-py 16 1
51 YunoHost/doc 0 18
52 pytroll/pyspectral 17 1
53 spyder-ide/qtpy 15 3
54 ARM-DOE/ACT 18 1
55 YunoHost-Apps/vpnserver_ynh 17 4
56 snek5000/snek5000 21 0
57 bids-standard/bids-starter-kit 20 2
58 YunoHost-Apps/borg_ynh 21 4
59 YunoHost-Apps/wordpress_ynh 26 0
60 cleder/fastkml 26 0
61 pytroll/pyorbital 19 8
62 YunoHost/yunohost 0 29
63 bids-standard/bids-matlab 31 0
64 MeeseeksBox/MeeseeksDev 32 2
65 r-devel/rdevguide 38 2
66 Remi-Gau/eCobidas 40 1
67 librosa/librosa 40 3
68 python-visualization/folium 45 2
69 physiopy/phys2bids 43 6
70 jupyter/papyri 50 1
71 ARM-DOE/pyart 50 2
72 icesat2py/icepyx 48 10
73 radis/radis 57 4
74 pygfx/pygfx 65 3
75 codezonediitj/pydatastructs 58 15
76 YunoHost-Apps/nextcloud_ynh 84 9
77 pytroll/pyresample 80 13
78 ipython/traitlets 91 11
79 pymc-devs/pymc-examples 110 12
80 poliastro/poliastro 103 24
81 pytorch/ignite 114 38
82 arviz-devs/arviz 159 10
83 PyCQA/astroid 154 20
84 ipython/ipykernel 223 23
85 vispy/vispy 283 32
86 astropy/astroquery 324 32
87 YunoHost/issues 361 0
88 FCP-INDI/C-PAC 351 15
89 scikit-hep/pyhf 346 31
90 tqdm/tqdm 319 92
91 pytroll/satpy 325 91
92 alan-turing-institute/the-turing-way 358 74
93 datalad/datalad 446 13
94 scikit-image/scikit-image 471 196
95 PyCQA/pylint 650 46
96 spyder-ide/spyder 1131 62
97 ipython/ipython 1493 78
98 scipy/scipy 1393 290
99 jupyter/notebook 1996 44
100 numpy/numpy 1965 203

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 scikit-image/scikit-image 3 years scikit-image/scikit-image#3855
19 ipython/ipykernel 3 years ipython/ipykernel#402
20 python-visualization/branca 3 years python-visualization/branca#60
21 pygfx/pygfx 2 years pygfx/pygfx#85
22 bids-standard/bids-matlab 1 year, 9 months bids-standard/bids-matlab#144
23 vispy/vispy 1 year, 8 months vispy/vispy#1330
24 pymc-devs/pymc-examples 1 year, 7 months pymc-devs/pymc-examples#71
25 librosa/librosa 1 year, 6 months librosa/librosa#615
26 snek5000/snek5000 1 year, 6 months snek5000/snek5000#31
27 YunoHost-Apps/mobilizon_ynh 11 months YunoHost-Apps/mobilizon_ynh#120
28 r-devel/rdevguide 11 months r-devel/rdevguide#29
29 pytroll/pyspectral 10 months pytroll/pyspectral#143
30 YunoHost/package_check 8 months YunoHost/package_check#118
31 YunoHost-Apps/gitlab_ynh 6 months YunoHost-Apps/gitlab_ynh#191
32 tqdm/tqdm 5 months tqdm/tqdm#1310
33 pygfx/wgpu-py 4 months pygfx/wgpu-py#280
34 pytroll/pyresample 3 months pytroll/pyresample#445
35 YunoHost-Apps/pleroma_ynh 2 months YunoHost-Apps/pleroma_ynh#209
36 YunoHost-Apps/my_webapp_ynh 2 months YunoHost-Apps/my_webapp_ynh#93
37 spyder-ide/qtpy a month spyder-ide/qtpy#367
38 physiopy/phys2bids a month physiopy/phys2bids#314
39 kailashchoudhary11/imgman a month kailashchoudhary11/imgman#44
40 YunoHost-Apps/mastodon_ynh a month YunoHost-Apps/mastodon_ynh#341
41 poliastro/poliastro a month poliastro/poliastro#1535
42 FCP-INDI/C-PAC 26 days FCP-INDI/C-PAC#1795
43 PyCQA/astroid 24 days PyCQA/astroid#1843
44 pytorch/ignite 20 days pytorch/ignite#2754
45 openteamsinc/closember 17 days openteamsinc/closember#15
46 YunoHost-Apps/jellyfin_ynh 13 days YunoHost-Apps/jellyfin_ynh#116
47 YunoHost-Apps/gitea_ynh 10 days YunoHost-Apps/gitea_ynh#61
48 YunoHost-Apps/freshrss_ynh 10 days YunoHost-Apps/freshrss_ynh#148
49 YunoHost-Apps/peertube_ynh 21 hours YunoHost-Apps/peertube_ynh#357
50 spyder-ide/qtawesome 13 hours spyder-ide/qtawesome#217
51 MeeseeksBox/MeeseeksDev 9 hours MeeseeksBox/MeeseeksDev#92
52 scikit-hep/pyhf 2 hours scikit-hep/pyhf#2067
53 ipython/traitlets an hour ipython/traitlets#800
54 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 65 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
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)