Suggestion: A PSF grant for running a "Core Dev Mentorship Program"


(Tal Einat) #1

tl;dr: I’d like to apply for a PSF grant to mentor several developers towards becoming active contributors and hopefully core-devs. What do you think?


On the core-mentorship mailing list, there has been a recent “wave” of requests for mentoring. This was triggered by @vstinner’s post “Looking for people from underrepresented groups to mentor”, who later wrote that he received 20-30 requests for mentoring (!).

My understanding is that many of us would like to have more active contributors and core developers. Additionally, many would like these to be a more diverse group. Guido and Victor have lately taken up mentoring several developers with the explicit intent of achieving these goals.

I would also like to work towards these goals. I have recently invested more time on the core-mentorship mailing list and Zulip stream, as well as doing my best to mentor two promising developers. However, my free time is becoming increasingly limited again, and I am learning that effectively mentoring a developer requires being able to spend a good amount of time nearly daily on such mentoring.

My life circumstances are such that I would be able to commit to a medium-term part-time paid project. Therefore, I’ve come up with an idea for a concerted effort to mentor a group of developers for a significant length of time, which I’ve called a “Core Dev Mentorship Program”. My current suggestion is to remotely mentor five developers for 10 weeks, selecting the participants to be as diverse a group as possible among appropriate applicants. I wrote a proposal and submitted it to the PSF. They rightly asked that I first bring this before the core devs, so here I am.

I can think of reasons to oppose such a project, with the foremost being that most (all?) such mentorship has thus far been done on a volunteer basis, and we wouldn’t want to negatively impact future volunteer mentorship efforts. In my eyes this project would be a complementary effort, and I propose it only because it appears that we are currently unable to mentor as many as we would like, nor as many as would like to be mentored.

I am purposefully not including the details of my proposal, as I would like to first focus on whether the idea is supported in general.

Any and all comments, suggestions and criticism are most welcome.


(Antoine Pitrou) #2

I think an interesting preliminary task would be to assess the efficiency of current mentorship efforts. For example how many people have been mentored vs. how many have actually become active, regular contributors?


(Victor Stinner) #3

I plan to write such report on my mentoree. That’s just a few people, but it should be better than no data :slight_smile:


(Victor Stinner) #4

Sorry, I don’t have time for a proper reply to Tal, but here are a few notes:

  • Sometimes, it takes 1 month before a mentoree is ready to produce a first PR. Depending on the candidate, mentoring for only 1 month can be way too short.
  • Letting people push random PRs and let these PRs die on GitHub doesn’t work to get contributors involved in the long term. Without feedback, most of them move away from Python. To get more core developers, we have to follow contributors closely to provide them feedback quickly and guide them in private (1-to-1 exchange is more efficient for different reasons).
  • It’s really hard to put expectations on mentoring. Do you consider that it’s a success if the mentoree succeeded to compile Python? Or succeded to become a core dev? For a grant, how do you make sure that the mentor and the mentoree are actually working? Usually in the open source world, grants require to write frequent reports. A report doesn’t mean to expect concrete PRs to be merged. Just prove that something is happening and that money is not wasted.
  • The selection of the candidate is also very hard. If you select a close friend, the communication starts quicker and mentoring can be more efficient: same timezone, meet physically, same language, same culture, etc. If you don’t know the skills of the candidate, you may be disappointed if you expect that the mentoree will write a working JIT compiler in 1 month (I exaggerate, obviously). Maybe you can pick someone from the statistics of Git commits: contributors who got the most commits in the last N months. Maybe it’s not fair for the others, but you can skip the first steps of teaching how to contribute and write the first PR. Seeing existing commits can also help you to select a candidate if they work on similar areas than you.
  • Mentoring for 1 month is nice, but if you are goal is to get more core developers, you may have to mentor a contributor for 6 months if not longer. For a grant, maybe it’s ok if mentor and mentoree agree on the duration and know it from the start. The mentoring can be continued with a new grant, without a grant, and the mentor can change. Some mentorees have multiple mentors, that’s fine as well.
  • By the way, I’m convinced that we lack core developers. We don’t have enough people just for the basic maintenance of Python. I’m not even talking about pushing new features.

Hum. This message is longer than what I expected :slight_smile:


(Tal Einat) #5

That would be terrific. I’d love to hear from anyone who has done such mentoring. Are there people who have done such mentoring who may not be on Discourse, whom I could approach directly with this question?


(Tal Einat) #6

Thanks for these notes Victor!

I’ll note that my current suggestion addresses most of the concerns raised in your notes:

  • The length of the mentoring program would be 10 weeks.
  • The participants would be required to commit to a reasonable number of weekly hours of CPython development.
  • The applicants would be filtered to meet certain minimal requirements, such as having relevant programming experience and background to be able to become a regular contributors after 10 weeks of mentoring.
  • The grant would pay for 2 hours of mentor time per week per paticipant, allowing for frequent code reviews and low-latency discussion and iteration.
  • The grant would include writing of weekly reports on the progress of all participants, individually and as a group. It would also cover writing a summary report of the entire program including things such as conclusions and suggestions for future mentors.
  • Success criteria would be defined, but they wouldn’t be that all participants become core devs immediately at the end of the program. Rather, it would be things like having successfully getting a certain number of doc fixes, bug fixes etc. merged; effectively and pleasantly interacting with the dev community on the bug tracker, GitHub, mailing lists etc.; and making improvements to the dev guide and other tools for new developers.
  • It is clear that at the end of the program, the participants will likely require more time and possibly additional mentoring before becoming core devs. The main intended direct outcome of the program will be to give the participants a strong foundation and high enthusiasm, allowing them to continue mostly on their own with the guidance of the community, and thus make significant contributions over time.

(Antoine Pitrou) #7

I don’t know. Best would be to ask on core-mentorship perhaps?


(Victor Stinner) #8

An interesting project would be to complete/update existing documentations explaining how to contribute like the http://devguide.python.org/ or my tutorial attempt http://cpython-core-tutorial.readthedocs.io/