It is autumn outside, which means that it is time to summarise what we accomplished during this summertime. For Kowainik this summer was special, primarily due to the fact that our team members Dmitrii Kovanikov and Veronika Romashkina volunteered to be mentors in Google Summer of Code 2019. We are proud to say that we were involved in the “Issue Wanted” project where Rashad Gover was developing production-level Haskell web-application under our supervision. We are going to tell more about the project itself further, but wow! What a whirlwind of amazing contributions and discoveries it was for all of us! And it flashed in a blink of an eye.
This blog post is our experience summary of mentoring for the first time in Google Summer of Code. Here we want not only to share how it feels to be a mentor but also to try motivating you to become a part of this global community event in the future. We’re going to show some insights into all the processes and retrospect on that amazing period of our lives. This write-up is different in a way that it describes events from the mentors’ perspective, so we hope it could be useful for both potential mentors and students.
What is Google Summer of Code?🔗
For those who are not familiar with this huge student programming event of the summer, Google Summer of Code (further shortly GSoC) is an international three-month-long programme that aims to help students join the marvellous open source world. The programme provides volunteer mentorship from representatives of all kinds of organizations in so many different areas: from programming language compilers and database frameworks, to operating systems and graphics engines.
Here is the official quote from Google about GSoC:
Google Summer of Code is the global programme that matches students up with open source, free software and technology-related organizations to write code and get paid to do it! The organizations provide mentors who act as guides through the entire process, from learning about the community to contributing code. The idea is to get students involved in and familiar with the open source community and help them to put their summer break to good use.
More information about the project, guidelines and rules can be found at the linked page:
Haskell.org is the organization that represents Haskell — an advanced, lazy, purely functional programming language. It is also a regular participant of GSoC. Summer of Haskell has already demonstrated outstanding results previously. Haskell got a lot of attention from students due to a number of interesting projects to work on, so the organization continues to take part in the programme.
Taking part in such occasion was a natural decision for us personally since Haskell mentorship is one of the things we do at Kowainik, and we think we are well-prepared in our mission to help the Haskell community.
Let’s now talk about how to get into the GSoC programme and break down the process into small steps from the mentors’ side.
It all started with the idea.
In Kowainik we strive to improve the Haskell ecosystem, and the project we were applying for GSoC is very in line with this goal. We decided that giving students an opportunity to work on the production-level application with modern Haskell idioms is a worthwhile contribution to the language. Especially when the idea itself, when implemented, should help other beginners with OSS contributing.
Fortunately, we had a concept for a web application that helps to improve the contributing experience in the Haskell world — issue-wanted. We were excited by this idea when we came up with it, but we didn’t have enough time to work on the implementation. So we decided that giving an opportunity to develop a Haskell web application from scratch using modern best-practices would be awesome practice for students as part of the GSoC programme.
The intention behind
issue-wanted is to provide web service for contributors where they can search repositories for the issues they can grab and work on. This is especially useful for beginners because they can learn something new while contributing to the open source projects, and improve the quality of the libraries we all love. Everybody wins!
First, we had to submit our proposal to Haskell.org. To do so, one should send a pull request to the haskell-org/summer-of-haskell repository. This PR should include a single markdown file to be added to the
content/ideas folder. The text could be in the free format but should include some important information: difficulty, requirements and potential mentors. You can see our proposal as the reference:
We proposed our own project idea for Summer of Haskell, but it is possible to join as a mentor to an already existing project idea or the idea submitted by the student in the proposal. To do so, you can write an email to Summer of Haskell organizing committee.
If you don’t have enough time or experience to be a mentor you still can participate in this process. If you know a library, tool or any project which would need some extra help with some particular tasks, you can submit the issue to the mentioned repository. There is a possibility that somebody could be interested in writing a proposal for this idea, or there could even be a mentor who is ready to take care of this idea.
But this is not the only way you can help at this stage of the programme. You can look through the submitted PRs with project ideas and show your support by commenting on the PR or even just adding a 👍 reaction to it. It could help the committee to make the right decision on which proposals to accept.
The organization decides whether the idea satisfies the criteria for GSoC. Once all ideas are collected, it is time for the organization to submit the application to GSoC. Only after that, Google decides whether the organization qualifies for participating. After accepted organizations are announced, students can start looking for the proposals they would like to work on and contact potential mentors in advance and ask various questions about their projects.
The next stage is the student application period. Students submit drafts of their proposals to the projects that they are interested to work at during the three summer months. And now mentors look at all proposals for their projects and decide which students to accept. Only a single student can work on one project idea.
It was quite surprising for us to receive more than 20 (!) proposals for the project. After being stunned by such huge amount of submissions, we had to solve an extremely difficult task: choose only one student for the project… This task was especially difficult because all proposals were strong and unique. And it was obvious that students spent many days researching the project and writing their proposals, which only made the choice tougher. As a consequence, we also spent many days selecting the only person for the project. And if any of the students who applied for
issue-wanted are reading this, we want to say that you are awesome! The work all of you have done during the application period is outstanding 👏
When we were evaluating all submitted proposals to our idea, we looked at the multiple criteria, including:
- Quality of the proposal: how well the student understands the project, how they see the development process. So, students, spend more time on your proposal. It’s very important!
- Skills: we had some minimal knowledge requirements in our proposal, such as basic Haskell knowledge. So, mentors, please write the requirements clearly. And students, show how you satisfy the requirements in the applications.
- Open source profile: if the link to a GitHub (or similar) profile is provided — this is a plus. If a student had some projects, they could give us an idea of what to expect from them. We could see the real examples of their code, get familiar with their style of project management, and also observe their records of previous open source contributions. Also, our project is hosted on GitHub, so if a person has an open source image, it means that they are comfortable enough with
git. Our advice is to keep your OSS portfolio up-to-date.
- Early communications: some students approached us before the start of the draft submission. Some of them were asking about the project, others wanted to see if their vision of the project is getting along with what we expect. They asked questions, and we shared recommended tutorials for students to read before starting working on the project. So the advice is to keep in touch with mentors, ask for the resources and make sure that your understanding of the project is correct.
- Eager to learn: when working on such a big application, you should be ready to face new concepts and technologies, and also unexpected challenges. If you’re not afraid and willing to learn, you can overcome such difficulties.
Rashad Gover showed himself superb during this evaluation, so we are extremely happy that we had a chance to work with him the whole summer! You can find his proposal among others in the list of all accepted proposals for GSoC 2019:
NOTE: Oh, also, don’t open source your proposals before the acceptance period is over. Don’t put any of your ideas of the project into open source repo as well! We didn’t experience that but there were some incidents in other organizations, so watch out.
Being a mentor is a tough work that requires special skills, time and patience. Officially, the only required step from mentors is submitting monthly evaluations. It takes 10-15 minutes to fill in, but it has a lot of impact on the project’s final results. However, in practice, to successfully complete the project, mentors have to devote 10-20 hours a week for the programme during the whole summer. That time is allocated to various tasks. It includes scheduled meetings to discuss the progress, overall review of the project status and exchanging feedback on the work.
We dedicated a huge portion of our time to the very careful and detailed pull request reviews, which purpose was not only to check implementation, but also to help Rashad improve his skills and grow as a developer. We had a lot of interesting conversations where we explained challenging topics and new concepts as well.
Most of the work for the “issue-wanted” project was completed. A good thing about working on this production-level project is that Rashad had the opportunity to get involved in the Haskell OSS community by submitting issues, feature requests and bug fixes when needed, which we encouraged him to do.
Another important point for us was to focus not only on technical skills, but help with other aspects of the programming life. We tried to keep Rashad motivated and interested in the problems he had to solve. We tried to be as helpful as possible, but we also took precautions not to hold his hand too much.
From one side, we needed to provide recommendations regarding libraries used in the project and follow the plan. But on the other hand, we tried to give Rashad freedom to experiment with new libraries and approaches within the scope of the project. If a student wants to freely choose something we never used, that would mean that the responsibility of learning and understanding this new tool should be shared, because decisions could affect deadlines and can affect the outcomes. We all needed to stay positive and dig deeper, even if there were some problems with the implementation. It’s important not to give up, but to experiment more. These are the tricky parts of mentorship, but they are also crucial to helping students succeed.
Workflow and tools🔗
The first thing we did as a team was establishing a smooth workflow and what tools we were all going to use. It is extremely important to have a clear process and common understanding on how everything should work together.
The tools we used:
- GitHub project kanban board to manage the project and instantly check the progress
- Google Calendar for scheduling and Google Hangouts for meetings
- git for VCS
- hit to support our workflow
- Circle CI for building and testing the code automatically on each PR
The workflow includes:
- Managing issues and pull requests with GitHub project kanban board.
- Using Kowainik git/GitHub workflow including creating issues and contributing to the project only via pull requests.
- Each pull request is reviewed by mentors.
- Having regular calls.
We believe that having this workflow helped us to achieve a lot.
Undoubtedly, GSoC had a lot of influence on us and we learned a lot of things the hard way. Here we have some advice to future mentors additionally to general sanity:
- Plan the project better beforehand, student’s timeline from the proposal is your friend
- Use good tools to manage the project and establish a preferred workflow upfront (discuss with the student what would work for them as well)
- Share your knowledge as much as you can (but do not impose opinions)
- Make sure you understand your idea well enough to be a mentor (it’s not enough to know that a project can be done, you need to be skilled in this area to also be able to explain various topics and make various architecture decisions)
- Leave extra time on all kinds of emergencies and unpredictable events. Unfortunately, life is complicated, so make sure you and the student are be able to take some complete day-offs.
Even if we can’t present a polished version of the deployed project, we achieved a lot during GSoC and we would like to share our results.
- Almost the whole backend part is finished, including a heavy set of tests. And believe us, there were some unexpected challenges and it wasn’t just a walk on a sunny day.
- Rashad wrote a series of several blog posts about his experience at GSoC. His posts cover the project architecture and modern design patterns in Haskell. We can confidently say that these posts are great guides to writing more advanced Haskell projects! Not to mention that there’s a real-world open source project that uses all these techniques to solve daily problems. Check out Rashad’s blog:
- Lots of Haskell libraries improvements are made. Working on a middle-size project and using a lot of various libraries really tests the strength of Haskell and its ecosystem. It’s inevitable that something doesn’t quite work as expected. So Rashad contributed upstream feature requests and reported issues when we had any.
- We experimented with Haskell on the frontend. Unfortunately, our plans to go full-stack Haskell didn’t work out, but the experience we got from trying means a lot to us.
Benefits for mentors🔗
Being a GSoC mentor is a challenging task, especially in the Haskell world. You not only need to understand Haskell and its ecosystem well-enough to explain various topics and recommend proper approaches, but being a mentor also requires having strong soft skills. You need to solve various tasks like organizing the workflow, establishing and managing proper communications (especially with time zone differences), providing helpful code reviews, guiding a student in the right direction and helping them to achieve their goals in the most productive way. No surprise that we’ve spent a lot of free time solving organisational issues, communicating, reviewing PRs and other problems. Sometimes it felt like a second job. But we would like to give a shout out to Rashad for being an awesome contributor! It was a pleasure to supervise him!
Although it was hard, the reward was worth it. We gained a lot of experience, improved our mentoring and communication skills, helped a person grow and motivated him to contribute to OSS and helped improve the Haskell ecosystem. Also, this project is proof that it’s possible to build production-level Haskell applications using some advanced language concepts, in a relatively short period of time, without being an expert in the language.
Kowainik is a small, passionate non-profit organization. But if you’re a big commercial company, you can use GSoC as an excellent opportunity to both help open source and also train new people for your projects!
Google Summer of Code is an excellent opportunity for students to contribute to OSS, learn new things and improve the world! But as you can see, mentors get a lot of benefits from participating in this movement too. We hope this overview of our journey can motivate you to join GSoC next year, no matter your status: organization, individual mentor or student. Haskell doesn’t have the biggest community but we all managed to create such an interesting experience. Maybe you can leverage this programme for your organization too!
Finally, we want to express our gratitude to all the organizers, organizations, mentors and students taking part in this. It warms our hearts to see so many passionate engineers working on great projects and making the world a better place ❤️