I started this post by creating a list of things I wanted to discuss. I followed that by reading over my last CircuitPython post (2020), and found that I’m evidently still looking for us to continue much of the same. I still consider all of it to be incredibly important. Between that and the fact that so much has happened since the last post, it is definitely worth another look. This post is not made up of CircuitPython feature suggestions or requests. It is instead a discussion regarding the community surrounding CircuitPython, and how we can continue to build and nurture it.
Though much of what I discussed in my last post isn’t necessarily immediately tangible and requires continuous work, it is still possible to measure successes and room for improvement. I’d like to start with my impressions from my previous post.
Successes in 2020-2021
First and foremost, I suggested that we should keep the community in mind in everything we do. This is an incredibly broad goal, so I narrowed it down to some specifics which are covered below. Overall, I feel we’ve done an excellent job with this. The community continues to grow in a healthy manner. We, as community leaders, have considered the needs and desires of the community in related decisions we’ve made. Further, we have involved the community in these decisions when possible. This goal is one of the most important things we can do. I’m incredibly pleased that, upon reflection of the last couple of years, I can say this has been a success.
Keeping the community in mind also includes awareness when designing and updating APIs. This meant any new or breaking changes we introduced must be done with care for and consideration of the impact on our users. We have succeeded in this task. Whether it was through thoughtful discussions on new pull requests and issues, or by considering user feedback after the fact, we have kept the needs of the community in mind with most of the major changes we have made. This success applies to both the CircuitPython core and the libraries. It has, at times, meant implementing a more complicated solution in order to maintain a positive user experience. It has also meant, in some cases, providing updated or more thorough documentation and handling an increase in support cases in response to a breaking change. The documentation and support needs have regularly been discussed in applicable pull requests, and we have had consistent follow-through.
Room for Improvement 2020-2021
One of the ways I suggested keeping the community in mind was to put out a call for input more than once per year. We are always available to receive input, but it’s not necessarily clear to folks in the community. CircuitPython is constantly evolving. I felt if we put out a call multiple times per year, it would give folks more of a chance to be a part of that evolution. The follow-up calls do not need to be as big as the new year’s call. Simply reminding folks that we are open to suggestions at regular intervals would encourage input. This is not something we followed through on. I still believe this is a good idea, and something worth considering.
I called for us to put more effort into keeping up with the issues and pull requests on the CircuitPython libraries. The CircuitPython libraries consist of nearly 300 GitHub repositories, all of which have the potential for issues and pull requests. Over the course of 2020 and 2021, these issues and pull requests have languished. This was a result of multiple things including simply not having anyone with the cycles to keep up. We have done a relatively good job with keeping up with the majority of new pull requests, however, there was a chunk of existing pull requests that remained untouched. We strive to create a welcoming environment for folks who are interested in contributing to CircuitPython, and leaving a pull request untouched for multiple years is not conducive to that effort. Folks get discouraged and abandon not only their contributions, but potentially the CircuitPython project altogether. This is a task that we almost certainly need to sort out putting more effort into. (See the end of this post for an update!)
Looking Ahead to 2022
While reflection is important as we begin a new year, it is also important to look forward. This is a look at what I would like to see happen this year, and some updates about what we’re already doing to meet those goals.
It is incredibly important to build up those around you. I called for more opportunities for mentoring, for both Adafruit folks and the community. I did not include this in the roundup above because I feel it was a success, still has room for improvement, and is something I want us to continue to do moving forward. In terms of myself, I have been able to mentor a few specific people over the last couple of years, and provide general knowledge to the community where I can. I can’t speak to whether other Adafruit folks would feel successful in this endeavor. I can say the community has continued to live up to this standard. It has been amazing watching folks within the community share, teach and learn. I will continue to be available to mentor where I can. I want to see others doing the same as we progress into this year.
The Adafruit community and, more specifically, the community around CircuitPython has continued to grow and flourish. This is in no small part due to the effort of the community itself with the guidance of those of us leading the community. We as admins and moderators strive to keep the community space safe and welcoming. However, the fact of the matter is that the community does most of that work for us, both in terms of maintaining our standards and embracing new community members. New folks are greeted by a supportive and encouraging group of people who put their own time and energy into helping others within the community.
On the Adafruit Discord server, I created three Helper roles to make some of the most prolific helpers more visible and to more clearly recognize all the work they are putting into assisting folks in the community. Every week, we host the CircuitPython Weekly community meeting. The meeting is released on YouTube and as an audio podcast to reach as many folks as are interested in it. We have a section called Hug Reports, during which we take the time to recognize the amazing accomplishments of and positive contributions from members of the community. It gives us the opportunity to acknowledge, amongst other things, the folks we see helping others. I have no doubt that we will continue to provide a supportive, positive space where folks can learn from and teach each other.
The Hug Reports section of the CircuitPython Weekly is excellent. However, the group that attends these meetings is relatively small (compared to the total server membership count), and there are often folks thanked that do not attend or listen to the meeting afterwards. So some of these folks are never hearing the recognition and praise. There is a hug-report-related channel on the Adafruit Discord server, but it is severely underutilized. This is something that needs to change. To that end, I have updated the channel name to #hug-reports, and updated the description to explain what is now intended. I will encourage participation simply through action by posting applicable hug reports to that channel so other folks will feel comfortable doing the same.
I want to see us continue to enable people in our community to be able to contribute to the project in a way that works for them. This is a concept that greatly benefits both our project and our contributors. We have excelled at this type of engagement. In general, we clearly identify multiple different types of opportunities for contributing, within the CircuitPython core and the libraries, including everything from reviewing to contributing code and documentation. In terms of specific events, I hosted Sprints at virtual PyCon, and we participated in Hacktoberfest. Both of these brought in new folks, a few of whom have become significant contributors to the project. In 2021, in preparation for Hacktoberfest, we generated nearly 300 “Good First Issues” across the CircuitPython libraries. Good First Issues are issues that can be resolved by folks who are entirely new to Git, GitHub and contributing to open source. This type of issue is important to have as they create an environment within which new folks and experts alike have a path to getting started contributing. During the CircuitPython Weekly, in addition to the aforementioned Hug Reports, we go over the State of CircuitPython, the Libraries and Blinka, which provides a statistical overview of the project. Perhaps most importantly, though, we highlight new contributors and explain how to get started contributing. By continuing all of this, and working towards coming up with new ways to engage the community, we can ensure that we are helping folks contribute in a way that works for them.
I want us to continue to highlight the marvelous things the folks in our community are up to. The Hug Reports section of the Weekly meeting is an excellent example of this. Even better, we have a Python on Hardware weekly newsletter within which we include, among other things, projects and more from those in the community. The newsletter reaches over 9000 subscribers, a count which continues to grow each week. This is definitely the largest collection of projects we feature every week, and many of the folks are incredibly excited about their projects being included. From time to time, Adafruit also features community projects on the Adafruit blog. Every Wednesday is the Show and Tell live stream where members of the community can show off their projects. As well, there is a show-and-tell channel on the Discord server where people can post pictures, videos and info about their projects anytime. These are excellent ways to spotlight what the community is doing, all of which I know will continue. I welcome suggestions for more ways to do this.
Over four years ago, we created the CircuitPython Community Bundle. It was intended to be a home for CircuitPython libraries written by members of the community that weren’t specifically supported by Adafruit or tied to Adafruit hardware. Initially, a couple of people submitted libraries, but overall the concept didn’t really take off. However, there is significant activity in the Community Bundle now, compared to the first couple of years. In the last couple of years, we’ve put more effort into highlighting the Community Bundle, to the extent of including its libraries in our total number when discussing CircuitPython libraries as a whole. We’ve even included the Community Bundle in the Adafruit Learn System Project Bundler, which allows us to easily use community libraries in official Adafruit Learn Guides. I’ve mentioned it already, but it’s worth mentioning again; it is crucial to build up your community. Treating the Community Bundle as basically equal to the Adafruit CircuitPython Library Bundle is yet another way we continue to do so.
At the beginning of this year, Tim (@foamyguy) was able to join Adafruit on a more consistent basis. One of the tasks I assigned to him was going through the older library pull requests, and taking care of whatever needed to be done to either close them or get them merged. We are now very close to being entirely caught up on library pull requests. There were 18 total left open across all of the libraries at the time of this writing, and that would almost certainly include some new ones. I am very excited about this and deeply grateful to Tim for taking this on and following through with it. I expect that once we are caught up, we will put effort into remaining that way. I want to see this happen. If you are on the review team and have the cycles to help, please consider doing so. Remaining caught up moving forward will require a group effort.
I want to take a moment to thank a few specific folks for things related to my post. Thank you to Anne who puts together the newsletter every week and for proofreading this post for me. Thank you again to Tim for getting us caught up on the library pull requests. Thank you to Bruce who designed all the new Blinka graphics you see in this post. Thank you to all of our contributors, and especially to our new contributors – I hope we can provide you with the welcoming, supportive environment you should expect from us. Thank you to the moderators on the Adafruit Discord for your efforts to keep the community welcoming and safe. And finally, thank you to Adafruit, PT and Limor for giving us the opportunity to make all of this happen.
We say Code + Community = CircuitPython. The more both CircuitPython and the community grow and evolve, the more true the aphorism becomes. I want us to continue to remember that CircuitPython requires its community. More importantly, I hope we can properly express to the community their importance to us and CircuitPython. Thank you to everyone for being a part of it. I’m excited to see what happens next.