Why Google Summer of Code is a golden Opportunity

Why Google Summer of Code is a golden Opportunity

Introduction

A.A.

This article should serve, at least I tried to make it so, as a comprehensive guide for everyone who wants to apply to Google Summer of Code (GSoC for short). Most of the information provided is based on my personal experience in passing Google Summer of Code 2021 at Joplin. If your time is constrained, you can just skim through the article by reading the titles and bold phrases. With that said, you are encouraged to read the whole thing because, hopefully, you will gain much more information.

Shout out to these amazing people for helping me in writing this article and providing very useful feedback:

I hope you have a nice and interesting reading time!

What is Google Summer of Code?

Google Summer of Code is a global, online program focused on bringing new contributors into open-source software development. GSoC Contributors work with an open-source organization on a 12+ week programming project under the guidance of mentors.

This is what you will see when visiting GSoC's home page and it suffices to give you a glimpse of what GSoC is. However, there is much more to it than that:

  • GSoC is not a Google Internship (Important to know), meaning you don't work for Google. Instead, you work remotely for an open-source organization of your choice. If you want to intern for Google, you can check out SWE or STEP. After I completed the program, they sent me an email on how to showcase GSoC on my resume and they emphasized the fact that I should NOT write that I was a Google intern.

  • Participating in GSoC is no longer limited to university students. Starting from the summer of 2022 and onward, all open-source newcomers who are 18 or older are welcome to participate in the program. If you are a graduate who wants to try something new while earning money, GSoC is now available for you.

  • GSoC is beginner-friendly. As stated above, the purpose of the program is to "bring new contributors into open-source software development". Furthermore, the program environment gives you all the time in the world to learn and make mistakes as much as you can. You only need to have basic programming skills (more on that later). You don't have to be a GrandMaster in competitive programming or code in x86 Assembly to get accepted and pass the program. If someone like me could do it, then you can do it too.

  • In 2022, they added the concept of large-sized projects. Also, in 2024, they introduced small-sized projects. In a nutshell, the larger the project size, the more money you will get but the more effort you have to put in. We will discuss projects in detail later in this article.

  • You can check out several other programs that resemble GSoC (in terms of working on open-source projects) such as MLH Fellowship and GirlScript Summer of Code.

Why should I apply?

Apart from being a method to show off your superiority and flex on your non-GSoC friends :), there are so many advantages to participating in GSoC:

  • The primary reason why I consider GSoC to be a golden opportunity is that it breaks the notorious cycle: "I need work experience to get a job and I need a job to get work experience". You don't need a resume, work experience, connections, referrals, or anything like that to apply to GSoC. The only thing that matters is the work/contributions you do during the application process, which you'll showcase via the proposal.

  • You get paid a decent amount of money. The exact number differs from country to country due to some complex financial stuff I don't understand (or maybe because I'm lazy). But, generally, the stipends are adjusted to match the cost of living in each country. If you are an Egyptian resident, you will get 750 USD for a small-sized project, 1500 USD for a medium-sized project, and 3000 USD for a large-sized project.

  • You boost your technical skills:

    • GSoC is a great chance to develop, manage, and deploy a real-world project used by real people with the help of a mentor, whose job is to answer your questions regarding the project and guide you towards the completion of the program. This is sufficient to make you learn a lot of concepts and practices and apply them directly in your project. For me, I enhanced my skills in object-oriented design, applied the philosophy of "release early, release often", and learned how to harness the full power of source control systems, unit-testing, documentation, semantic versioning, and other skills that would need another article to fully explore. I also learned some research concepts like BibTeX and CSL as a byproduct, but that was just due to research being the main domain of my project.

    • One of the most important skills that I learned while applying to GSoC is the ability to traverse large code bases. To resolve an issue during the application process or even in the coding phase, you will sometimes need to determine where exactly the issue occurs. To do that, you would have to understand the project in a high-level fashion and have an idea about most of the components in the system and how they interact. To my knowledge, such a skill is crucial for software engineers working on enterprise-class systems.

  • GSoC is a great plus to your resume.

  • You learn some soft skills. Trust me, this is not a point I added to just fill in some words. In GSoC, you improve your:

    • Communication skills: Throughout the whole program, you will be asked to demonstrate your work or explain some concepts, like when you are writing the proposal, progress reports, or the work product output. Over time, you will gain the skill of communicating your ideas and work plans more clearly and efficiently through words. which is a nice thing to have, right?

    • Decision-making: In my case, I was lucky that a handful of people were using my plugin and providing feedback. The problem was they were requesting so many features: some of them were simple and the others were complex and required a lot of work. For example, I had a research scientist who wanted me to rework the entire plugin to resemble another plugin in another application because he thought this is what it should look like. With the help of my mentor and some user surveys, I managed to control the chaos and decide which features were mandatory, which were nice to have, and which were not needed at all.

  • You get to know amazing people from different backgrounds.

  • You get to throw in some cool open-source phrases like "LGTM" in random conversations :) BTW, you will gradually develop a good feeling when you see "LGTM" and "Merged" in pull requests. It's just like the beautiful green "Accepted" on Codeforces.

  • It is a win-win situation. Even if you got rejected, you will have learned a nice set of skills by then, so no regrets.

Challenges

GSoC also has some tricky parts that you should be careful about. Note, however, that the following points are purely subjective and it depends heavily on you, your project, and your organization. I'm just enumerating some challenges that you might face during the program but there is also the possibility you don't face them at all.

  • Different time zones: Working remotely with engineers from other countries (and, most likely, from other time zones) is a bit annoying. For example, it happened so many times that I submitted a pull request sometime in the morning and waited a whole day just to get feedback from my mentor. It was so frustrating, especially if the feedback required additional work (which is very common). Unfortunately, I couldn't work around this problem which made me waste huge amounts of time.

  • Heavy Workload can be a serious problem in the program as well. Speaking from experience, just because the program started smoothly with little work does not mean it will stay so through the end. So, it's crucial to try to manage your time, work effectively, and divide the work evenly throughout the program. You might want to assign a specific time in your day just for work.

What do I need?

Well, this is a debatable matter, and there are tons of opinions about it. I'm just going to list the bare minimum of skills you need to successfully pass the program without much suffering (you are going to suffer anyway but I am trying to make it a bit easy for you xD).

  • Basics of Programming: This one should be obvious. You should be able to program proficiently in at least one general-purpose programming language (C, C++, C#, Java, JavaScript, Python, etc...). If you don't meet this criterion, then why are you even here? I don't want to be harsh but GSoC is not YET suitable for you.

  • Working knowledge of Git: You will be forced to learn it anyway, so prior knowledge would greatly help. More specifically, you should be able to commit and push changes, create and merge branches, make pull requests, and pull the upstream changes. If you don't know much about these things or have a vague idea about them, just like me before applying to GSoC, I suggest you watch this video and take this manual as a reference for you. Alternatively, you can just google stuff whenever you are stuck but I don't recommend this approach if you are just starting with Git.

  • Good command of English: If you can read this article with ease and you can construct basic English phrases to express your ideas correctly, you should be fine. You don't need an English proficiency certificate (IELTS or TOEFL) or the ability to write a 400-word essay in a formal academic language to compare and contrast living in the city or the countryside (that was literally me in high school).

  • Self-discipline: There are times when you will be burnt out and have no energy to continue, yet you will have to work because, otherwise, you fail the program. Passion is valuable and, of course, you will select a project that you feel excited about. However, passion is not going to help you when you are drained. That's why you need to be self-disciplined and force yourself to work even if you don't feel like it. You will think that you are not going to experience burnout until it's too late, so be prepared.

In my humble opinion, the above skill set is mandatory to apply to GSoC. However, keep in mind that the more skills you have, the greater your chances of getting accepted and passing the program. Any knowledge of Object-Oriented Programming, Data Structures, Algorithms, libraries, or frameworks will magnify your chances. Once a day, I found myself implementing recursive Depth-First Search to traverse a tree-like structure while coding a certain feature (trust me, it was not an overkill).

How to apply?

Now that you are willing to apply to GSoC, let's discuss the application process in greater detail. But first, I have a disclaimer. Every year, tons and tons of people get excited about GSoC, yet only a small fraction actually apply. This is because the application process takes too long (usually two weeks or more) and needs a lot of effort. It turns out not so many people have this luxury. I have a friend who was interested in applying to GSoC but he procrastinated till two days before the application deadline, thinking that he had to just upload his resume and complete the application. Later, he was shocked by the amount of work he should have done long ago.

Now I'll present the main steps of applying to GSoC. Most of the discussion will target the upcoming 2024 program.

1. Select an organization

The first step to applying to GSoC is to select an organization that you would like to work for. Before contributors are given the chance to apply, this year's participating organizations will be announced on the 21nd of February. The list changes every year, so you should double-check that the organization to work for is included in this year's program. You can take a look at 2023 organizations. Here's what you should know:

  • There are exactly 171 organizations that participated in 2023.

  • An organization can be an open-source service provider, a big tech company, an open-source database system (like PostgreSQL), or even a research lab (like CERN).

  • Some well-known organizations that participated in the 2023 program include Chromium, Django, Apache, Blender, CERN-HSF, Dart, FFmpeg, FreeBSD, Git, GitLab, GNOME Foundation, GCC, GNU Octave, KDE, LibreOffice, MetaSploit, Open Robotics, openSUSE Project, OWSAP Foundation, PostgreSQL, Processing Foundation, Python Software Foundation, QEMU, Ruby, SageMath, Scala Center, Swift, SymPy, Tensorflow, Julia, The Linux Foundation, The NetBSD Foundation, and VLC.

  • Every participating organization includes a description of it, a list of the tools and technologies used there, some project ideas that you would like to work on, tags, and a way of getting involved in the community of the organization (can be a discord server, public forum, mailing list, etc...).

  • Once the participating organizations are announced, you should immediately start looking for the organization you would like to work for. You are encouraged to filter out the organizations according to the following criteria:

    • Does the organization in question use technologies you know of?

    • Is the organization domain interesting to you?

    • Are the projects interesting to you?

  • Note that there might be an organization whose domain is irrelevant to you but you can still find some projects that interest you.

  • Going through every organization and deciding whether or not it suits you can be a very painful and time-consuming process. Because of that, you are encouraged to have some friends who also want to apply to GSoC to help each other and save some time. You are also encouraged to use ChatGPT, or any LLM for that matter, to help you in the filtration process. For example, if there is an organization/project description that you don't fully understand, you can just throw it at an LLM and make it explain every bit of detail about it.

  • You can use this tool to efficiently filter out the organizations that interest you. It was built by Nishant Mittal, who is a colleague of mine who worked within the same organization (Joplin) during GSoC 2021.

After filtering out, you should have a shortlist of the organizations you are interested in working for and have an idea about these organizations and what they do. Now it's time to be involved in the communities of these organizations. Start introducing yourself in their Discord, IRC, forum, mailing list, or whatever they are using to communicate. Ask some questions about the organization or any project or feature they are working on currently. Look around to gather as much info as you can.

Contributions (very important!)

Once you select your organization, you should try to contribute to it as early and as much as you can. This is important because, sometimes, it is considered a DECIDING FACTOR in whether you will be accepted or not. If two people are applying to the same project in the same organization, the one with the most valuable contributions to the organization will most likely be preferred over the other. In my opinion, this part is the hardpest part in the application process. How to contribute? There are so many things you can do that count as contributions:

  • Solve starter bugs/issues. These are issues presented by the organization mentors to help new contributors get familiar with the codebase, architecture, coding styles, etc... You will probably find them in the organization's description or Github repo.

  • Make a pull request to add a certain feature. You can fork some projects, clone them locally, and start to play with them a little bit. You can also make pull requests as you like. Try to follow their guidelines in creating a pull request. If you get a single pull request merged, you are on the right track to being accepted.

  • Create issues. If you see an unexpected behavior in some project, you are encouraged to create a new issue on their Github repo.

  • Fix typos. Believe me, this is not a joke, fixing typos also counts as a contribution which means you are active and interested in the organization.

You should read the organization/project contribution guidelines before you start contributing to the organization. These guidelines can be found in the main repository or in the organization's GSoC page.

2. Select a project

As stated above, each organization has a list of project ideas (like this one). Each project idea is accompanied by some information regarding the expected outcome of the project, expected difficulty, a rough estimate of how many hours are needed to implement this project, and the technologies that are required (this can change from project to project inside the same organization). Projects can range from adding a small plugin or a feature in an application to building a complex enterprise-sized system. If you have some questions regarding a specific project, don't hesitate to ask the community of the organization.

There are three types of projects: small-sized, medium-sized, and large-sized. Small-sized projects require ~90 hours of workd, medium-sized projects require ~175 hours, while large-sized ones require ~350 hours. How to know the size of a certain project? It's usually stated in the project ideas list alongside some other info such as the project difficulty, required knowledge, potential mentors, and links to relevant discussions.

Based on the information you gathered in the previous step, you should be able to select the project that you are going to work on for the duration of the program. Just like in the previous step, ChatGPT is your friend. It's favorable (but not required) to select your project based on the following:

  • Knowledge of the Project domain: The more you know about a project, the more you are likely to complete it successfully. In my case, I had some research background from high school which helped me a little in my project.

  • Interest: Choosing a project that interests you is worth the time and effort.

  • Manageable: Select a project that you are confident about completing in the assigned time frame.

3. Prepare a proposal

Congratulations! You carefully decided on a project. Now it's time for the most critical and time-consuming part of the application process (can take more than a week to complete): The proposal. First of all, what is a proposal? It's a document that should include all the information you gathered about the project you are going to work on. The proposal is written for the mentors as the audience. The recommended approach to prepare the proposal (or any article/document for that matter) is to first write the headlines, then iteratively add more and more details until you are finished with the initial draft. If your organization has its own proposal template, you should stick to it. Otherwise, you can use a generic proposal structure. Generally, a proposal MIGHT include the following sections:

  • Name and contact information: This is preferred to be at the top of your proposal where you provide all your contact information including your full name, address, timezone, and any other relevant personal links (Github and LinkedIn for example).

  • Introduction: This is where you write a summary about your project consisting of the problem you are trying to solve, prior solutions, your solution to the problem, and any other relevant links that support your argument.

  • Deliverables: Break down the outcome of your project into manageable milestones and list them here.

  • Implementation: This is where you include how you will implement your project idea. You should not just explain the high-level mechanisms, you should also include the exact implementation details including algorithms, libraries, or external utilities that you will use to help you while coding. Charts and graphs can also be used to explain your plans more clearly. Try to be detailed as much as you can to produce a high-quality proposal, which, subsequently, increases your chances.

  • Timeline: Here, you state what work you will accomplish by the end of each week throughout the program. Note, however, that you can update your timeline anytime you want even during the coding phase to adapt to the changes and experiences you encounter. But don't do so without the agreement of your mentor.

  • Prior contributions to the organization: Any ideas, issues, or pull requests you contributed to the organization should be listed in this section. As said before, this is very important because it proves you have a basic understanding of the organization structure, coding style, and code review cycle.

  • Programming skills: I think this section has little to zero effect on your proposal quality and acceptance chance, but it's nice to inform the mentors that you are a talented person who has a diversity of skills. You can list some relevant side projects you worked on as well.

After selecting the project, you should immediately start working on your proposal and submit it as early as you can. Don't worry, you can edit it any number of times before the deadline. You are encouraged to submit it early because you will get feedback from mentors on how to further improve your proposal.

My Proposal

Here's the proposal that got me accepted into GSoC in 2021. It's not the best proposal in the world but it should help you at least envision how a proposal looks like and see the above points in action. If you see some cringe parts, just skip them; I was a freshman back then xD

Let the coding begin!

Hi ${NAME}, Your proposal ${PROPOSAL_NAME} has been accepted!

If you see this message on the 1st of May 2024, then you are lucky to spend your summer coding an open-source project and making some money. But before that, you will spend three weeks known as the community bonding period. This period is for you to:

  • Socialize and interact with other organization members and mentors.

  • Learn more about the organization's mission and vision.

  • Clarify, if any, the ambiguous portions in the proposal.

You also have the freedom to start coding and working on your project ahead of time. After the community bonding period, you will be officially in the coding phase of the program. During each week, you will be coding the features you specified for that week in the timeline. If you finish early, you have two options: either relax a bit and just wait for the next week to start or you can complete a portion of next week's work. Note, however, that your mentor should have knowledge of everything you do and you should consult him first before deciding on anything. Mentors are also engineers who have full-time jobs themselves, so try to be nice to them as much as you can. In addition, try to make your questions clear and concise to make it a bit easy for them to help you. If in a particular week, you did not manage to complete the assigned work because of whatever reason, It's OK. It's not like they will send an assassin to chase after you (or will they?). The important thing is to tell your mentor the reason why you didn't complete the work and try to compensate for that by working harder the next week. If for some reason, you had to update the timeline, that's also OK. However, as you might have guessed, you should not do so without first consulting your mentor.

GSoC has two evaluation forms. The first evaluation is in the middle of the program period and the final evaluation is at the end of the program. In each evaluation, you and your mentor will be asked about each other's performance. If your mentor has no problem you will pass the evaluation. Before each evaluation, I recommend you talk with your mentor a little bit just to be clear about any problems that might affect your evaluation result.

Stipends

For a lot of people, including me, money is the biggest motive to apply to GSoC. Rest assured, the program will make you satisfied when it comes to that regard. As said above, If you are an Egyptian resident, you will get 750 USD for a small-sized project, 1500 USD for a medium-sized project, and 3000 USD for a large-sized project. Whether you work on a small, medium, or large-sized project, you will be paid 45% of the total stipend upon passing the first evaluation and the remaining 55% after completing the entire program.

In one of the emails that you will receive upon acceptance, you will be delivered a Payoneer account that will help you receive your stipends. You have two options regarding that:

  1. Transfer the money directly to a bank account of your choice.

  2. Transfer the money to your Payoneer online card.

You can find more details about stipends here.

FAQ

I want to contribute to a particular organization/project but I don't have much knowledge about the required technologies. Does that mean I don't have any chance?

That's OK, you still have a chance. There will be a huge time gap (roughly a month and a half) from after the contributors' application deadline until the beginning of the coding phase. In my opinion, this period is more than enough for you to learn more about the technologies that you are going to need in the project.

The first month of the coding phase may collide with my exams. Any suggestions?

You can coordinate with your mentor such that the workload in the exam period is lightweight. Then, after you finish your exams, you can go full-time working on your project.

I have a short list of projects but it's very hard for me to choose a single one of them and work on it. What should I do?

Well, you can research them much more and make sure you have a basic idea about how each one of them is going to be implemented. You can ask the organization's mentors about anything that comes to your mind. After doing research, you will probably know by then which project you feel like doing. If you still can't decide, you can work on multiple proposals for multiple projects in parallel. Google allows you to submit up to three proposals for three different projects (they can be from different organizations). However, keep in mind that it's a trade-off: multiple proposals mean you have multiple chances but the quality of each individual proposal is not that high, and a single proposal means a one-shot but a maximized quality for that sole proposal.

Additional Resources

Conclusion

I hope by now that it's clear Why Google Summer of Code is a golden opportunity. It's a nice program that makes you learn a lot of practical skills and grants you a decent amount of money. I strongly encourage you to give it a shot.

I hope you enjoyed my first article and became somewhat motivated to apply to GSoC. Have a good time :)

Changelog

2024

  • Added a section for Additional Resources.

  • Added information about small projects.

  • Added a bullet point in the benefits of GSoC.

  • Added additional information about contributions and contribution guidelines.

  • Added a statement about each project's information.

  • Added a statement about the relevance of the organization/project in the organization filtration section.

  • Added one or two statements about ChatGPT in the organization filtration section.

  • Updated the duration of the community bonding period.

  • Updated the dates to refer to the upcoming 2024 program.

  • Rephrased some statements in the requirements section.

  • Rephrased the point about time zones in the challenges section.

  • Removed an incorrect statement regarding transaction costs.

  • Removed acceptance rate information.

  • Removed organizations that did not participate in the 2023 program.

  • Removed an irrelevant point in the introduction.

  • Fixed some typos and grammatical mistakes.

2023

  • Added a section for FAQ.

  • Added a section for Stipends.

  • Shared my proposal.

  • Shared a tool that helps with organization filtration.

  • Updated the dates to refer to the upcoming 2023 program.

  • Added an extra point to the technical benefits of GSoC.

  • Added more info and stats about the acceptance rate.

  • Added more info about the medium and large-sized projects.

  • Removed some organizations that didn't participate in the 2022 program.

  • Added a statement or two about English proficiency.

  • Rephrased some statements in the requirements section.

  • Removed some useless and unfunny phrases in the conclusion.

  • Fixed some typos.