This past spring and summer I was part of the Google Summer of Code (GSoC) as a mentor on the Jenkins project. In this post I’ll talk my experience with this program. For an additional perspective, please read Martin d’Anjou’s blog post about the Mentor Summit.
GSoC is an idea originally posed by Google’s founders, Sergey Brin and Larry Page, and has held every year since 2005. Some of the goals for the project include:
- Exposing students to real developers
- Building excitement in the open source community
- Breathing new life into older open source projects
This is an extremely well run program. Open source organizations such as Jenkins must apply and be accepted each year. I don’t know all the criteria Google uses to choose organizations, but from what I’ve seen they do a great job making sure that organizations have enough interesting projects and mentors to provide a good experience for the students. Once an organization is accepted, students can apply and propose projects, and the organization decides which student(s) to accept, up to the number of slots allocated by Google.
Once accepted, there is a community bonding phase to allow students to become acquainted with the open source community and the specific organization they will work with, followed by the coding phase, where students work on their specific project. Students code full time for 3 months during their break, and are paid for their work by Google, provided they continue to make acceptable progress. There are three evaluation periods during which time the open source organizations decide how students are doing (and vice-versa), offer feedback, and write evaluations. Students can be failed if they aren’t performing acceptably (according to the GSoC team, the number of projects which fail is normally around 12%).
For more information, check out the GSoC How it Works page.
If you work in software, you’ve probably heard of Jenkins, but if not, according to its documentation:
Jenkins is a self-contained, open source automation server which can be used to automate all sorts of tasks related to building, testing, and delivering or deploying software.
If you don’t work in software, it may not be obvious why this is a huge deal. Automating the process of building and delivering software is completely changing the industry. In the past, software vendors would deliver large changes every few months, or in some cases every year or even longer. Companies which use software like Jenkins can instead deliver small changes as often as they like. This means that bug fixes and new features are delivered as soon as they are ready, leading to happier customers.
One of the things that sets Jenkins apart from many of its competitors (besides being free open source) is extendability. This means that if it doesn’t quite do what you need it to, you are free to add features to it, and make your changes available to the public – or not if you don’t want to. I originally got involved in the Jenkins open source community because we needed a pending new feature at work, and I felt I could speed up the process by offering to collaborate with the person implementing the feature. As I learned more, I got more involved, because in the same way open source is transforming and speeding up building software, software like Jenkins is transforming and speeding up the delivery of software, and I want to be a part of that change.
My experience as a GSoC mentor
I was asked to be a mentor because I had done some work on the Cobertura Code Coverage plugin, and one of the projects sponsored by Jenkins was a new generic Code Coverage API plugin that helps unify the behavior of several similar plugins. This will give a better experience to Jenkins users, and also get rid of duplicated code. The student working on this project did very well in my opinion, and it was inspiring working with him. The time required for mentoring wasn’t too bad – we met for an hour twice a week at 6AM my time (I’m an early riser) and of course I spent several hours a week reviewing pull requests. Since there were a couple of other mentors on the project, I didn’t have to carry the whole weight, and things like vacation and business trips weren’t a problem.
Some of the personal things I got out of the experience include:
- A chance to work with an international community – including the student, Shen Yu Zheng (China), and the other mentors (Switzerland, Montreal, and India).
- A chance to build relationships with an open source community that I care about.
- A chance to share my experience and “pass the torch” to up and coming programmers.
- Personal development – part of being a senior developer is mentoring others, and like all skills you get better at it as you practice.
- A chance to influence the direction of the project. I was able to get support for llvm code coverage, which should help us simplify some of our own Jenkins pipelines which build iOS applications.
GSoC mentor summit
After this year’s GSOC concluded, I had the chance to attend the GSOC mentor summit at Google’s Sunnyvale offices. This is a really cool event, and each organization can only send 2 people (we ended up getting 3 slots since one of our members was on the waiting list). Here are some random musings:
- I was impressed with the variety of open source projects represented. There was everything from scientific projects to children’s games, popular open source projects like Python, and everything in between.
- Everyone I spoke to had heard of Jenkins – I knew Jenkins was popular, but was surprised how many open source projects use it.
- The conference is an “un-conference” which means that any attendee can propose a session, and people who are interested attend. I mostly attended sessions that were aimed at helping sponsoring organizations improve how they mentor students, but there were lots of special interest sessions, and even one on avoiding burnout, which was extremely popular 🙂
- The community chocolate table was extremely impressive. People brought in all kinds of chocolate from all over the world, and we all ate as much as we could over the weekend.