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 16252 issues and PRs open as of the start of Closember 2022, 2155 were closed and 14097 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 236 98
2 python-visualization/folium 171 34
3 YunoHost/issues 179 0
4 alan-turing-institute/the-turing-way 151 26
5 spyder-ide/spyder 154 15
6 astropy/astroquery 120 30
7 pylint-dev/pylint 123 21
8 datalad/datalad 130 11
9 scikit-image/scikit-image 28 34
10 pytroll/satpy 20 26
11 jupyter/notebook 33 8
12 arviz-devs/arviz 28 8
13 pymc-devs/pymc-examples 17 15
14 pylint-dev/astroid 14 17
15 YunoHost-Apps/nextcloud_ynh 27 3
16 ARM-DOE/pyart 28 2
17 python-visualization/branca 15 10
18 FCP-INDI/C-PAC 22 2
19 ipython/ipython 15 5
20 YunoHost/yunohost 0 17
21 ipython/traitlets 15 1
22 vispy/vispy 5 7
23 r-devel/rdevguide 8 4
24 ARM-DOE/ACT 11 1
25 icesat2py/icepyx 8 3
26 pytorch/ignite 7 3
27 librosa/librosa 6 4
28 poliastro/poliastro 3 5
29 ipython/ipykernel 5 3
30 bids-standard/bids-matlab 5 3
31 spyder-ide/qtpy 4 3
32 radis/radis 4 2
33 pytroll/pyresample 2 4
34 YunoHost-Apps/mautrix_whatsapp_ynh 4 2
35 physiopy/phys2bids 1 4
36 kailashchoudhary11/imgman 4 1
37 cleder/fastkml 3 2
38 YunoHost/doc 0 5
39 YunoHost-Apps/mattermost_ynh 3 2
40 YunoHost-Apps/etherpad_mypads_ynh 5 0
41 YunoHost-Apps/cryptpad_ynh 3 2
42 timofurrer/awesome-asyncio 0 4
43 spyder-ide/qtawesome 3 1
44 scikit-hep/pyhf 3 1
45 jupyter/papyri 2 2
46 eX-Mech/pymech 4 0
47 codezonediitj/pydatastructs 2 2
48 YunoHost/yunohost-admin 0 4
49 YunoHost/project-organization 3 1
50 YunoHost/package_check 3 1
51 YunoHost-Apps/firefly-iii_ynh 2 2
52 tqdm/tqdm 2 1
53 pytroll/pyspectral 3 0
54 YunoHost/install_script 0 3
55 YunoHost/example_ynh 0 3
56 YunoHost-Apps/wordpress_ynh 1 2
57 YunoHost-Apps/wallabag2_ynh 2 1
58 YunoHost-Apps/vpnserver_ynh 1 2
59 YunoHost-Apps/pleroma_ynh 2 1
60 YunoHost-Apps/ghost_ynh 3 0
61 YunoHost-Apps/borg_ynh 1 2
62 openteamsinc/closember 2 0
63 YunoHost/moulinette 0 2
64 YunoHost/SSOwat 0 2
65 YunoHost-Apps/my_webapp_ynh 2 0
66 YunoHost-Apps/mastodon_ynh 1 1
67 YunoHost-Apps/invidious_ynh 1 1
68 YunoHost-Apps/freshrss_ynh 1 1
69 MeeseeksBox/MeeseeksDev 0 2
70 cleder/pygeoif 0 1
71 YunoHost/apps 0 1
72 YunoHost-Apps/wikijs_ynh 0 1
73 YunoHost-Apps/ttrss_ynh 1 0
74 YunoHost-Apps/pixelfed_ynh 1 0
75 YunoHost-Apps/pihole_ynh 1 0
76 YunoHost-Apps/navidrome_ynh 0 1
77 YunoHost-Apps/mobilizon_ynh 1 0
78 YunoHost-Apps/funkwhale_ynh 0 1
79 pytroll/pyorbital 0 0
80 bids-standard/bids-starter-kit 0 0
81 YunoHost/ynh-dev 0 0
82 YunoHost-Apps/wireguard_ynh 0 0
83 YunoHost-Apps/vpnclient_ynh 0 0
84 YunoHost-Apps/vaultwarden_ynh 0 0
85 YunoHost-Apps/syncthing_ynh 0 0
86 YunoHost-Apps/shaarli_ynh 0 0
87 YunoHost-Apps/redirect_ynh 0 0
88 YunoHost-Apps/peertube_ynh 0 0
89 YunoHost-Apps/monica_ynh 0 0
90 YunoHost-Apps/misskey_ynh 0 0
91 YunoHost-Apps/jitsi_ynh 0 0
92 YunoHost-Apps/jellyfin_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/flarum_ynh 0 0
97 YunoHost-Apps/discourse_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-Apps/alltube_ynh 0 0
2 YunoHost/project-organization 0 0
3 YunoHost/ynh-dev 0 0
4 YunoHost-Apps/syncthing_ynh 0 1
5 YunoHost-Apps/ghost_ynh 2 0
6 YunoHost-Apps/gogs_ynh 2 0
7 YunoHost-Apps/mautrix_whatsapp_ynh 2 0
8 YunoHost/apps 0 2
9 YunoHost/example_ynh 0 2
10 YunoHost/install_script 0 2
11 python-visualization/branca 2 0
12 YunoHost-Apps/monica_ynh 2 1
13 YunoHost-Apps/navidrome_ynh 2 1
14 YunoHost/moulinette 0 3
15 YunoHost-Apps/flarum_ynh 2 2
16 YunoHost-Apps/funkwhale_ynh 4 0
17 YunoHost-Apps/wikijs_ynh 2 2
18 YunoHost/SSOwat 0 4
19 cleder/pygeoif 3 1
20 YunoHost-Apps/ampache_ynh 4 1
21 YunoHost-Apps/firefly-iii_ynh 4 1
22 YunoHost-Apps/gitea_ynh 4 1
23 YunoHost-Apps/peertube_ynh 7 0
24 YunoHost-Apps/ttrss_ynh 6 1
25 YunoHost/yunohost-admin 0 7
26 YunoHost-Apps/jitsi_ynh 6 2
27 YunoHost-Apps/mobilizon_ynh 7 1
28 YunoHost-Apps/misskey_ynh 6 3
29 YunoHost-Apps/vaultwarden_ynh 8 1
30 ARM-DOE/ACT 9 1
31 YunoHost-Apps/etherpad_mypads_ynh 8 2
32 YunoHost-Apps/invidious_ynh 10 0
33 YunoHost-Apps/jellyfin_ynh 10 0
34 YunoHost-Apps/pleroma_ynh 9 1
35 YunoHost-Apps/shaarli_ynh 9 1
36 timofurrer/awesome-asyncio 0 10
37 YunoHost-Apps/cryptpad_ynh 10 1
38 YunoHost-Apps/discourse_ynh 8 3
39 YunoHost-Apps/hotspot_ynh 9 2
40 YunoHost-Apps/my_webapp_ynh 10 1
41 YunoHost/package_check 8 3
42 YunoHost-Apps/mastodon_ynh 8 4
43 YunoHost-Apps/mattermost_ynh 9 3
44 YunoHost-Apps/freshrss_ynh 10 3
45 YunoHost-Apps/pihole_ynh 6 7
46 YunoHost-Apps/pixelfed_ynh 10 3
47 YunoHost-Apps/redirect_ynh 10 3
48 YunoHost-Apps/wireguard_ynh 11 2
49 kailashchoudhary11/imgman 12 1
50 YunoHost-Apps/vpnclient_ynh 14 1
51 openteamsinc/closember 16 0
52 YunoHost-Apps/vpnserver_ynh 17 2
53 YunoHost-Apps/wallabag2_ynh 14 5
54 eX-Mech/pymech 13 6
55 spyder-ide/qtawesome 17 2
56 pytroll/pyspectral 19 1
57 bids-standard/bids-starter-kit 21 3
58 cleder/fastkml 25 0
59 YunoHost/doc 0 26
60 spyder-ide/qtpy 18 8
61 YunoHost-Apps/borg_ynh 25 2
62 pytroll/pyorbital 19 9
63 YunoHost-Apps/wordpress_ynh 30 2
64 MeeseeksBox/MeeseeksDev 33 1
65 bids-standard/bids-matlab 34 2
66 YunoHost/yunohost 0 37
67 Remi-Gau/eCobidas 40 0
68 r-devel/rdevguide 37 5
69 librosa/librosa 47 2
70 physiopy/phys2bids 47 3
71 ARM-DOE/pyart 49 2
72 icesat2py/icepyx 45 6
73 python-visualization/folium 48 4
74 jupyter/papyri 53 3
75 radis/radis 61 8
76 codezonediitj/pydatastructs 65 15
77 ipython/traitlets 80 10
78 pytroll/pyresample 79 11
79 YunoHost-Apps/nextcloud_ynh 84 7
80 pymc-devs/pymc-examples 102 7
81 poliastro/poliastro 111 20
82 pytorch/ignite 111 42
83 arviz-devs/arviz 159 11
84 pylint-dev/astroid 154 16
85 ipython/ipykernel 229 25
86 vispy/vispy 293 30
87 FCP-INDI/C-PAC 346 26
88 YunoHost/issues 379 0
89 astropy/astroquery 345 35
90 scikit-hep/pyhf 354 32
91 alan-turing-institute/the-turing-way 344 85
92 pytroll/satpy 344 85
93 tqdm/tqdm 344 101
94 datalad/datalad 470 19
95 scikit-image/scikit-image 482 206
96 pylint-dev/pylint 712 45
97 spyder-ide/spyder 1063 70
98 ipython/ipython 1534 87
99 scipy/scipy 1371 276
100 jupyter/notebook 2009 49

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 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 pylint-dev/astroid 10 months pylint-dev/astroid#1107
29 YunoHost/package_check 8 months YunoHost/package_check#118
30 eX-Mech/pymech 5 months eX-Mech/pymech#53
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 radis/radis a day radis/radis#508
46 YunoHost-Apps/peertube_ynh 21 hours YunoHost-Apps/peertube_ynh#357
47 spyder-ide/qtawesome 13 hours spyder-ide/qtawesome#217
48 MeeseeksBox/MeeseeksDev 9 hours MeeseeksBox/MeeseeksDev#92
49 scikit-hep/pyhf 2 hours scikit-hep/pyhf#2067
50 ipython/traitlets an hour ipython/traitlets#800
51 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)