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 15811 issues and PRs open as of the start of Closember 2022, 1944 were closed and 13867 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 187 79
2 python-visualization/folium 170 34
3 YunoHost/issues 177 0
4 alan-turing-institute/the-turing-way 147 23
5 spyder-ide/spyder 144 15
6 astropy/astroquery 119 27
7 datalad/datalad 130 11
8 PyCQA/pylint 109 18
9 scikit-image/scikit-image 17 23
10 pytroll/satpy 16 24
11 arviz-devs/arviz 26 7
12 pymc-devs/pymc-examples 16 15
13 jupyter/notebook 23 7
14 YunoHost-Apps/nextcloud_ynh 27 3
15 ARM-DOE/pyart 27 2
16 python-visualization/branca 15 10
17 FCP-INDI/C-PAC 22 1
18 PyCQA/astroid 7 15
19 ipython/ipython 14 5
20 YunoHost/yunohost 0 17
21 ipython/traitlets 15 1
22 ARM-DOE/ACT 11 1
23 r-devel/rdevguide 6 4
24 pytorch/ignite 7 3
25 librosa/librosa 6 4
26 vispy/vispy 2 6
27 bids-standard/bids-matlab 5 3
28 spyder-ide/qtpy 4 3
29 ipython/ipykernel 4 3
30 YunoHost-Apps/mautrix_whatsapp_ynh 4 2
31 radis/radis 3 2
32 pytroll/pyresample 2 3
33 kailashchoudhary11/imgman 4 1
34 YunoHost/doc 0 5
35 YunoHost-Apps/mattermost_ynh 3 2
36 YunoHost-Apps/etherpad_mypads_ynh 5 0
37 YunoHost-Apps/cryptpad_ynh 3 2
38 timofurrer/awesome-asyncio 0 4
39 poliastro/poliastro 2 2
40 cleder/fastkml 2 2
41 YunoHost/yunohost-admin 0 4
42 YunoHost/project-organization 3 1
43 YunoHost/package_check 3 1
44 tqdm/tqdm 2 1
45 spyder-ide/qtawesome 2 1
46 pytroll/pyspectral 3 0
47 jupyter/papyri 1 2
48 codezonediitj/pydatastructs 1 2
49 YunoHost/install_script 0 3
50 YunoHost-Apps/wordpress_ynh 1 2
51 YunoHost-Apps/wallabag2_ynh 2 1
52 YunoHost-Apps/vpnserver_ynh 1 2
53 YunoHost-Apps/pleroma_ynh 2 1
54 YunoHost-Apps/borg_ynh 1 2
55 scikit-hep/pyhf 1 1
56 physiopy/phys2bids 0 2
57 openteamsinc/closember 2 0
58 icesat2py/icepyx 2 0
59 YunoHost/moulinette 0 2
60 YunoHost/example_ynh 0 2
61 YunoHost/SSOwat 0 2
62 YunoHost-Apps/my_webapp_ynh 2 0
63 YunoHost-Apps/mastodon_ynh 1 1
64 YunoHost-Apps/freshrss_ynh 1 1
65 YunoHost-Apps/firefly-iii_ynh 0 2
66 cleder/pygeoif 0 1
67 YunoHost/apps 0 1
68 YunoHost-Apps/wikijs_ynh 0 1
69 YunoHost-Apps/ttrss_ynh 1 0
70 YunoHost-Apps/pihole_ynh 1 0
71 YunoHost-Apps/mobilizon_ynh 1 0
72 YunoHost-Apps/gitlab_ynh 1 0
73 pytroll/pyorbital 0 0
74 bids-standard/bids-starter-kit 0 0
75 YunoHost/ynh-dev 0 0
76 YunoHost-Apps/wireguard_ynh 0 0
77 YunoHost-Apps/vpnclient_ynh 0 0
78 YunoHost-Apps/vaultwarden_ynh 0 0
79 YunoHost-Apps/syncthing_ynh 0 0
80 YunoHost-Apps/shaarli_ynh 0 0
81 YunoHost-Apps/redirect_ynh 0 0
82 YunoHost-Apps/pixelfed_ynh 0 0
83 YunoHost-Apps/peertube_ynh 0 0
84 YunoHost-Apps/navidrome_ynh 0 0
85 YunoHost-Apps/monica_ynh 0 0
86 YunoHost-Apps/misskey_ynh 0 0
87 YunoHost-Apps/jitsi_ynh 0 0
88 YunoHost-Apps/jellyfin_ynh 0 0
89 YunoHost-Apps/invidious_ynh 0 0
90 YunoHost-Apps/hotspot_ynh 0 0
91 YunoHost-Apps/gogs_ynh 0 0
92 YunoHost-Apps/gitea_ynh 0 0
93 YunoHost-Apps/ghost_ynh 0 0
94 YunoHost-Apps/funkwhale_ynh 0 0
95 YunoHost-Apps/flarum_ynh 0 0
96 YunoHost-Apps/discourse_ynh 0 0
97 YunoHost-Apps/ampache_ynh 0 0
98 YunoHost-Apps/alltube_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/alltube_ynh 0 0
2 YunoHost-Apps/gogs_ynh 0 0
3 YunoHost/project-organization 0 0
4 YunoHost/ynh-dev 0 1
5 YunoHost-Apps/flarum_ynh 2 0
6 YunoHost-Apps/mautrix_whatsapp_ynh 1 1
7 YunoHost-Apps/monica_ynh 1 1
8 YunoHost-Apps/syncthing_ynh 0 2
9 YunoHost/install_script 0 2
10 python-visualization/branca 2 0
11 YunoHost-Apps/navidrome_ynh 1 2
12 YunoHost/example_ynh 0 3
13 YunoHost/moulinette 0 3
14 YunoHost-Apps/ampache_ynh 4 0
15 YunoHost/apps 0 4
16 cleder/pygeoif 3 1
17 YunoHost-Apps/funkwhale_ynh 3 2
18 YunoHost-Apps/gitea_ynh 4 1
19 YunoHost-Apps/jitsi_ynh 5 0
20 YunoHost-Apps/wikijs_ynh 2 3
21 YunoHost/SSOwat 0 5
22 YunoHost-Apps/gitlab_ynh 4 2
23 YunoHost-Apps/firefly-iii_ynh 6 1
24 YunoHost-Apps/misskey_ynh 5 2
25 YunoHost-Apps/peertube_ynh 5 2
26 YunoHost-Apps/ttrss_ynh 6 1
27 YunoHost/yunohost-admin 0 7
28 YunoHost-Apps/ghost_ynh 3 5
29 YunoHost-Apps/mattermost_ynh 7 1
30 YunoHost-Apps/vaultwarden_ynh 7 1
31 timofurrer/awesome-asyncio 0 8
32 YunoHost-Apps/etherpad_mypads_ynh 7 2
33 YunoHost-Apps/jellyfin_ynh 9 0
34 YunoHost-Apps/mobilizon_ynh 7 2
35 YunoHost-Apps/shaarli_ynh 9 0
36 YunoHost-Apps/cryptpad_ynh 9 1
37 YunoHost-Apps/discourse_ynh 6 5
38 YunoHost-Apps/hotspot_ynh 9 2
39 YunoHost-Apps/invidious_ynh 10 1
40 YunoHost-Apps/pihole_ynh 6 5
41 YunoHost-Apps/pixelfed_ynh 9 2
42 YunoHost/package_check 8 3
43 ARM-DOE/ACT 12 0
44 YunoHost-Apps/freshrss_ynh 9 3
45 YunoHost-Apps/pleroma_ynh 8 4
46 YunoHost-Apps/redirect_ynh 9 3
47 YunoHost-Apps/wireguard_ynh 12 0
48 kailashchoudhary11/imgman 12 1
49 YunoHost-Apps/my_webapp_ynh 10 4
50 YunoHost-Apps/vpnclient_ynh 13 1
51 openteamsinc/closember 15 0
52 spyder-ide/qtawesome 15 1
53 YunoHost-Apps/mastodon_ynh 11 6
54 YunoHost-Apps/wallabag2_ynh 14 4
55 YunoHost/doc 0 18
56 YunoHost-Apps/vpnserver_ynh 17 2
57 pytroll/pyspectral 19 1
58 YunoHost-Apps/borg_ynh 20 2
59 spyder-ide/qtpy 17 5
60 bids-standard/bids-starter-kit 20 4
61 cleder/fastkml 26 1
62 pytroll/pyorbital 19 9
63 YunoHost-Apps/wordpress_ynh 28 2
64 YunoHost/yunohost 0 30
65 bids-standard/bids-matlab 29 2
66 MeeseeksBox/MeeseeksDev 33 2
67 Remi-Gau/eCobidas 40 0
68 r-devel/rdevguide 39 2
69 librosa/librosa 46 1
70 python-visualization/folium 44 3
71 ARM-DOE/pyart 48 1
72 jupyter/papyri 52 1
73 physiopy/phys2bids 46 7
74 icesat2py/icepyx 50 9
75 radis/radis 60 4
76 codezonediitj/pydatastructs 57 15
77 YunoHost-Apps/nextcloud_ynh 79 6
78 pytroll/pyresample 78 11
79 ipython/traitlets 80 11
80 pymc-devs/pymc-examples 106 8
81 poliastro/poliastro 107 22
82 pytorch/ignite 109 40
83 arviz-devs/arviz 158 11
84 PyCQA/astroid 154 18
85 ipython/ipykernel 227 24
86 vispy/vispy 288 35
87 FCP-INDI/C-PAC 341 24
88 YunoHost/issues 370 0
89 astropy/astroquery 332 40
90 alan-turing-institute/the-turing-way 305 76
91 scikit-hep/pyhf 352 33
92 pytroll/satpy 324 84
93 tqdm/tqdm 339 95
94 datalad/datalad 465 14
95 scikit-image/scikit-image 473 216
96 PyCQA/pylint 698 46
97 spyder-ide/spyder 1054 63
98 ipython/ipython 1510 76
99 scipy/scipy 1384 287
100 jupyter/notebook 2006 46

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 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 jupyter/notebook 5 years jupyter/notebook#2079
12 YunoHost-Apps/nextcloud_ynh 5 years YunoHost-Apps/nextcloud_ynh#73
13 YunoHost-Apps/etherpad_mypads_ynh 4 years YunoHost-Apps/etherpad_mypads_ynh#25
14 pytroll/satpy 4 years pytroll/satpy#370
15 arviz-devs/arviz 4 years arviz-devs/arviz#197
16 alan-turing-institute/the-turing-way 3 years alan-turing-institute/the-turing-way#124
17 ARM-DOE/ACT 3 years ARM-DOE/ACT#57
18 ipython/ipykernel 3 years ipython/ipykernel#402
19 python-visualization/branca 3 years python-visualization/branca#60
20 tqdm/tqdm 2 years tqdm/tqdm#407
21 bids-standard/bids-matlab 1 year, 9 months bids-standard/bids-matlab#144
22 vispy/vispy 1 year, 8 months vispy/vispy#1330
23 pymc-devs/pymc-examples 1 year, 7 months pymc-devs/pymc-examples#71
24 librosa/librosa 1 year, 6 months librosa/librosa#615
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 PyCQA/astroid 10 months PyCQA/astroid#1107
29 YunoHost/package_check 8 months YunoHost/package_check#118
30 YunoHost-Apps/gitlab_ynh 6 months YunoHost-Apps/gitlab_ynh#191
31 pytroll/pyresample 3 months pytroll/pyresample#445
32 YunoHost-Apps/pleroma_ynh 2 months YunoHost-Apps/pleroma_ynh#209
33 YunoHost-Apps/my_webapp_ynh 2 months YunoHost-Apps/my_webapp_ynh#93
34 spyder-ide/qtpy a month spyder-ide/qtpy#367
35 physiopy/phys2bids a month physiopy/phys2bids#314
36 kailashchoudhary11/imgman a month kailashchoudhary11/imgman#44
37 YunoHost-Apps/mastodon_ynh a month YunoHost-Apps/mastodon_ynh#341
38 poliastro/poliastro a month poliastro/poliastro#1535
39 FCP-INDI/C-PAC 26 days FCP-INDI/C-PAC#1795
40 pytorch/ignite 20 days pytorch/ignite#2754
41 openteamsinc/closember 17 days openteamsinc/closember#15
42 YunoHost-Apps/jellyfin_ynh 13 days YunoHost-Apps/jellyfin_ynh#116
43 YunoHost-Apps/gitea_ynh 10 days YunoHost-Apps/gitea_ynh#61
44 YunoHost-Apps/freshrss_ynh 10 days YunoHost-Apps/freshrss_ynh#148
45 YunoHost-Apps/peertube_ynh 21 hours YunoHost-Apps/peertube_ynh#357
46 spyder-ide/qtawesome 13 hours spyder-ide/qtawesome#217
47 MeeseeksBox/MeeseeksDev 9 hours MeeseeksBox/MeeseeksDev#92
48 scikit-hep/pyhf 2 hours scikit-hep/pyhf#2067
49 ipython/traitlets an hour ipython/traitlets#800
50 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)