tldr: I won’t personally see all comments/issues/PRs anymore; maintainer team is being granted tag+release privileges; community will be more involved with leadership; increase current bus factor of 1; unblock the project where I am the bottleneck; help the project scale better.
Caddy is now about 11 years old, and the project has changed a lot over that time, and grown hugely popular! To shed some perspective…
For years, my daily-ish routine involved checking my GitHub notifications – usually around 1-3 – triaging them and responding to each one of them personally. Most issues were obvious: bugs that needed urgent fixing, features that were a clear yes/no for the project, or questions that had easy answers.
Even after the launch of v2, the project was still new and developing, most other people didn’t have a lot of experience with it, and my vision was clear, so it was pretty easy to answer questions, make decisions, review the trickle of pull requests, etc. I wrote most of the code and was familiar with it.
My notification inbox essentially became my TODO list, and it was fairly easy to keep under 1 page (or about 25 notifications). At any given time, Caddy almost never had more than 100 open issues or 25 open PRs.
Later, we set up a forum, which I’d check multiple times per day and reply to questions there. Usually about 1-3 posts per day. No problem keeping up with it all. I read every single topic for years, and answered many of them myself to help educate others and be aware of user experiences, etc.
I tagged and published every single release. Sometimes multiple per day (oops). Over 100 now.
As the project grew, the docs improved substantially via contributions. More nits and edge cases were covered. Examples were added (and more to come, I’m sure).
Knowledge began to accumulate in the community, meaning that people could answer more questions by search results, and help others find answers to their questions, which tended to grow more niche since the general questions were answered. (This is precisely the outcome I’d hoped for over years with a public forum.)
You may recognize some of these people who stuck around as they gained experience, and have helped others in our community and with code maintenance (in no particular order): @Whitestrake , @francislavoie , @elcore , @abiosoft , @Mohammed90 , @WeidiDeng , @tobya , @timelordx , @elee , @hairyhenderson , and many others who have contributed their time and skills to help out. I am very appreciative! As are thousands of lurkers.
Forum activity is up about 2-5x. Where we used to get 1 topic per day, sometimes it’s up to 10 (it fluctuates, but the average is about 3-5). And posts average around 5-15. It can be higher when there’s people actively helping answer questions. This is not huge, but it’s a lot for just myself and our little community. Our forum gets about 50,000 page views per day!
Many of the questions now are either so niche that I don’t have the skills/expertise to answer them (many, many questions are less about Caddy specifically these days, and more about external system configurations, third-party software integrations, etc.), OR they are trivial/routine enough that others who have a bit of experience can easily answer them (i.e. I don’t have to be the one to respond, since the knowledge is shared by many now).
On GitHub, my notification inbox is almost out of control: I have just under 200 in the inbox, or about 8 pages – and that’s my TODO list that I work through each day. Caddy has almost 200 open issues and over 50 open PRs. I wake up to about 10-25 new notifications per day now, instead of 1-3. Again, this is still quite good for a project of our size, but it’s more than just the backlog…
The issues are also more obscure and less obvious. For example, bugs used to be pretty obvious and easy to reproduce. Most could be fixed in a few minutes or a day. Now, the project is so stable and mature that most bugs require extensive explaining and troubleshooting, and very specific configurations, to reproduce. Many are related to subtle interactions with the Go standard library or upstream dependencies, or even OS kernels. They take longer, and require more specific expertise, than Ye Olde Bugs of Yore. And most of them are very edge-casey anyway. Few people hit these bugs, and rarely. (This is right where we want to be!) Special thank-you to @WeidiDeng for taking care of so many transport-related issues (weird quirks with different HTTP versions), and @hairyhenderson with metrics, and @Mohammed90 for CI issues, and @francislavoie for a lot of the Caddyfile and config things. I cannot imagine having to figure out all that stuff myself.
Feature requests are also more nuanced than before. Caddy 2 has more or less achieved my vision of the web server I started in 2014. To clarify, it’s not done… there is plenty more to do; we will continue to evolve and adapt the project to a changing Internet landscape. But many of the big and obvious features have mostly shipped. And the plugin architecture is powerful enough that nearly all new features can be implemented as separate plugins before being added to our code base. (Plugins can be added to our repository, but these days most need to be proven outside of it first.)
All this means that I have started falling behind, for the last couple years, to personally keep up with every single:
in the Caddy org on GitHub, and these forums. I can’t close issues, answer questions, and merge PRs as quickly and easily now because the nature of their complexity is changing. I have started to become a bottleneck in the project’s growth and development.
The stress of such a huge and growing backlog – combined with the increasing nuance/specificity of issues, feature requests, and questions – has strained my mental health and work habits, and added strain on my family life. So after talking with my wise and wonderful wife, I am making the decision to turn off most notifications on GitHub and the forum, so that I can prioritize work that only I can do (or am the most qualified to do), and my family.
In other words, new activity of all kinds (listed above ) won’t automatically add itself to my TODO list. I won’t see every comment and issue like I do today. I don’t need to, either, it’s kind of getting bad for my mental health to try to keep track of the hundreds of discussions.
To clarify, I’ll still be very actively engaged with the project. I’ll still be notified of specific events, and I will still be checking GitHub and the forums ~daily, and replying to issues and questions as I have time for them.
I will also be clearing out my existing TODO list. It will be manually curated instead. 200 issues in my backlog… that’s a disservice to everyone who is contributing. You’ll get lost in there. It’s time for me to let the community take another step up as a mature project.
All this time, I have been the only one with the key to tag and publish releases. I will be granting privileges to our maintainer team to tag new releases going forward. Any new release should require approval from at least 2 maintainers.
We’ll also be looking to grow our maintainer team. The best way to join is to start reviewing PRs and submit patches for reported bugs. You can also help improve our documentation/website, help with CI/dependencies, etc. We’ll send out maintainer invites to people who show consistent patterns of making valuable contributions and an understanding of our project’s values.
We may also add more collaborators to the project, to help get PRs merged, but with less privileges than maintainers. Again, to be invited, get involved and demonstrate patterns of valuable contributions.
A consensus from the maintainer team will be sufficient to add new maintainers and collaborators, and two or more can remove those who are inactive for an extended period of time. We’ll strive to enforce best security practices when it comes to access to the project. (We already require 2FA, for example.)
This should help increase the current bus factor of 1, and unblock the project where I’ve been the bottleneck. And lower my stress and improve my mental health and ability to deliver quality work.
Huge thank you to everyone who contributes and helps in any way – we value your participation, and hope you will continue to do so, and if interested, become a collaborator or maintainer with our project!
Also, the only reason this project has survived so long is because of our sponsors – thank you for making it what it is! Without you I would have had to pack up shop years ago and let the project kind of… I dunno, mold? Whatever stale open source projects do. So thank you for continuing to sponsor. I look forward to continuing to serve and support you for years to come.