Another year has flown by, and it’s once again time to reflect on the past and look to the future. CircuitPython hit the ground running in 2019 with 4.0.0-beta.0 being released in January, and has not slowed down since. Our latest releases are 4.1.2 and 5.0.0-beta.3, and the next release is right around the corner. There has been a ton of support added for new boards, many of which are from our community. We’re up to 205 libraries and more are being added nearly every week. This is an indication of the rapid addition of new hardware support. The CircuitPython project has seen prolific growth throughout the year with no sign of losing steam as we head into 2020. I’d like to talk about a couple of highlights before moving on to what I’d like to see in this year.
PyCon 2019 was an amazing experience. Adafruit sponsored by providing everyone with a special-edition red Circuit Playground Express, thanks to help from Digi-Key. The previous year had gone well, but we learned a number of things from it regarding what we could do better. Some of the minor things surrounded being better prepared for the Open Spaces. One of the major issues was that we didn’t have enough Python work at the Sprints. This was due to a lack of hardware, as a majority of CircuitPython libraries rely on hardware. I took it upon myself to prepare better for 2019. This included, among other things, a more thorough Quick Start print out for the Open Spaces, and a 6 hour soldering marathon to prepare two of every CircuitPython supported breakout to have available for the conference and Sprints.
Once there, we attended the Education Summit before the conference and it gave us the opportunity to discuss CircuitPython with educators and make a few new contacts. During the conference, the Open Spaces were highly attended, to the point that we scheduled an extra one late on Sunday to provide one final option to learn about the Circuit Playground Express. The CircuitPython hardware availability turned out to be significant as we were able to involve many new people; we had so many options that everyone who wanted to get involved was able to find something that interested them.
PyCon 2019 CircuitPython Development Sprints. Photo Credit: Roy Hooper
A group of high school students attended the conference, and chose to join us for the first two days of Sprints due to the positive experience of one of the students at the PyCon 2018 sprints. They were at a wide range of experience levels, from entirely beginners to impressively seasoned programmers. The enthusiasm with which they dove into CircuitPython, regardless of their experience level, was incredible. The beginners worked on learning to code and were quickly able to put together the concepts they learned into more complex programs. Those with more experience jumped right into contributing to both the CircuitPython libraries and the core. One of the most memorable quotes came from one of them. After I thanked them for all their hard work, one replied, “Thank you. This was so rewarding.” This is exactly the experience we strive to create.
Typically the attendance at the Sprints cuts in half each day, however the CircuitPython Sprints did not see that drop in attendance – there were still as many people on Wednesday as there were on Tuesday, and, while it meant a lot of work, it was amazing to see. One of the major goals of this is to see continued involvement following the conference, and we saw many contributions continue after the conference, including a few people who continue to be heavily involved with CircuitPython. The best outcome is that those we reach choose to share CircuitPython with others, and this happened through education, workshops, tutorials and personal interactions, reported back to us by both the attendees and those they engaged. All in all, it was a smashing success. We’ll take what we learned from 2019 and apply it to making PyCon 2020 even better.
One of the biggest highlights for me was being asked to be the opening keynote for PyOhio 2019. Last year, I wrote a blog post in response to the call for CircuitPython 2019, in which I explained the story of how I joined Adafruit. I had told the story in person many times, and many times the response was that I should turn it into a conference talk. I gave it consideration, but struggled to figure out how to make it viable as it felt like I was simply talking about myself. I ran into Dave, one of the people involved with PyOhio, at PyCon 2019. I had given a CircuitPython tutorial at PyOhio 2018, and the conference received a lot of positive feedback about it. Dave asked me if I was going to submit a talk for 2019. I informed him that I wasn’t planning on attending this year due to a possible conflict. The following day I saw him again and he again said he hoped I would submit a talk, pointing out that he wasn’t involved in the talk review process so there was no conflict of interest in him asking me. I said I had one talk idea, and gave a 2 minute version of the joining Adafruit story. His immediate response was, “Well, that’s really a keynote.” I replied that I could see that, but it seemed presumptuous to think that way myself. He started to elaborate on why, and on the details of whether it could be expanded to fit a time slot. We discussed it for a bit before Dave said, “Well, I’m not involved with choosing talks, but I am in charge of choosing the keynote. I would like to extend an invitation to you to keynote PyOhio.” I was stunned to say the least. I had zero technical conference speaking experience. I had previously given a local Ignite talk, a presentation to my local user group, and presented a couple of tutorials. I was wholly unprepared for the offer but immediately accepted. I spent the next couple of months preparing and it was all worth it.
Photo credit: Ernest W. Durbin III, Twitter
My keynote is titled Changing Lives through Open Source, Passion and Mentoring. In it, I talk about my story of joining Adafruit, with heavy emphasis on the profound importance of mentors on my journey. Mentorship comes in many forms, including receiving help from friends. I discuss the things I learned from both being mentored and being a mentor to others. One of the most important things to take away from it is that regardless of your experience level, you know something someone else does not, you have a story to share, and you are capable of mentoring others. Please keep that in mind as you continue into the new year.
2019 was an amazing year for CircuitPython. I want to see that momentum continue into and through 2020. The amount of engagement that we’ve seen over the last year is astounding. The more features and hardware we add, the more people are finding opportunities for projects that interest them, and the results are fantastic. There are some things we can do to ensure this continues.
I want us to keep the community in mind with everything we do. I was behind our tagline: Code + Community = CircuitPython. It has proven to be incredibly befitting the project we’ve created. We should not wait for the beginning of a new year to ask for community input on what they would like to see out of CircuitPython, it is something we should do regularly. While we may consider ourselves available to receive input at any time, if we do not make this clear to the community, they may not know that they can provide it. CircuitPython is always evolving and so are the needs and desires of our users. We are always delighted with the input we receive. It seems advantageous to do this at a more regular interval. We should consider doing a call for input from the community multiple times throughout the year.
Keeping the community in mind is especially important when designing and updating APIs. Any new or breaking changes we introduce must be done with care and consideration of the impact on our users. While we need to feel comfortable introducing changes where it makes sense, we need to be willing to do so while considering the effect it will have on those who use it. There will be times when breaking changes are unavoidable, and implementation should be done in a way that minimises the impact on the user, and informs the user thoroughly of the changes and how to use them. We should be prepared to provide the necessary support that comes with it.
I want to see us keep up better with pull requests and issues on the libraries. This will involve a lot of work to get caught up, and the contributions will not slow down in the meantime, so we will have to stay on top of the new things as well. I’ve begun going through all the PRs and engaging those involved, but it will take time. Keeping up with this better moving forward is crucial to cultivating our community. We can bring people in, but if their contributions are ignored or left to languish, they may rightfully be discouraged from continuing to contribute. To that end, I want to see more people getting involved with the library PR and issue process, and the libraries in general, on a more consistent basis. At the moment (and it is greatly appreciated!), much of the involvement is intermittent ad hoc contributions. I want to see this become more regular. As the number of libraries continues to increase, it becomes necessary to have more than one person consistently involved in coordinating things. I am looking forward to assisting anyone interested in getting more involved.
The most important thing we can do is to build up others in the community. I want to see more opportunities for mentorship, both on the part of those working with Adafruit and of the community. All of us as a community have so much to share and it is crucial to give back. I would like to put the time in to help anyone who is interested learn to be a better mentor to others. Mentoring takes time and effort, and I know many of us have very little of that to give, but I believe it is worth it. Please consider joining the Adafruit Discord if you have not already, and take the opportunity to share your knowledge with others.
Remember, it is equally, if not more important, to share your success stories, especially if you experienced struggles along the way. This will show others who were in your starting position that it is possible to succeed. Simply knowing it’s possible to achieve something someone is working on can change their life.
If you would like to get into mentoring but don’t know where to start, consider watching my keynote, and please ping me directly (@kattni on Discord and Twitter) with any questions. I pledge to continue sharing everything I can this year in whatever ways I am able, and I urge you to do the same.