Google Summer of Code 101: A Practical Guide with Resources!

Google Summer of Code 101: A Practical Guide with Resources!

📜Introduction

In 2022 I had a great opportunity to work with the MetaBrainz Foundation as a Google Summer of Code contributor, where for 18 weeks, I worked on Cleaning The Music Listening Histories Dataset project with my fantastic mentor alastairp and gained valuable experience in Software Development, and Data Science, Analytics and Data Engineering on a daily basis!

And after speaking to many interested candidates and fellow contributors, reflecting on my own experience with GSoC, and abusing ChatGPT to write this blog, I have compiled a variety of helpful resources and tips broken down into crisp and clear bullet points.

I’ve tried making this blog as densely packed with information as I could, which is why I’d really recommend you all to read it carefully, reading it again as required, and using the external resources to your advantage too.

If you have any questions, feel free to find me on:
🧑‍💼 Linkedin: https://www.linkedin.com/in/prathamesh-ghatole/
🐦 Twitter: https://twitter.com/PrathameshG69
🧑‍💻 GitHub: https://github.com/Prathamesh-Ghatole/
📨 Email: prathamesh.s.ghatole@gmail.com

Now onward with the blog! 🏇🏇🏇

⁉️What’s GSoC? (duh)

  • Google Summer of Code (GSoC) is a global program that offers students the opportunity to work on open-source projects over the summer. Sponsored by Google, GSoC provides stipends to students who are accepted into the program to work on a specific project with an open-source organization.

  • The program is designed to encourage student participation in open-source projects and to help students gain experience in software development. Selected students are paired with a mentor from the organization and work on a project over the summer, with the goal of completing it by the end of the program.

  • GSoC is a highly competitive program and is open to students from around the world. It is an excellent opportunity for students to gain experience in software development, work with leading open-source organizations, and make a meaningful contribution to open-source projects.

🤔Why GSoC?

If you get selected, you’ll receive the following benefits:

  • Gain Experience working on a high-quality, large-scale, real-world project.

  • Mentorship - You’ll be guided by highly experienced mentors for the 12 weeks of your program duration. (Shoutout to my mentor alastairp :))

  • Earn a stipend - GSoC provides a stipend to students who are accepted into the program. In India, Medium sized projects pay $1500 while Large sized projects pay $3000!

  • Be a part of a community & expand your network - Connect with like-minded & experienced developers, mentors, and other Google Summer of Code participants.

  • Earn a reputation - GSoC is a well-respected and highly competitive program. Running since 2005, it has a strong track record of engaging students and communities in open-source work. Completing this program can be a highly valuable credential to your portfolio.

  • Make a meaningful contribution to the open-source community - The importance of Open-Source Software in the tech industry cannot be overstated. Gaining experience with OSS workflows and culture can be highly beneficial for any tech role.

📦Pre-requisites:

Pre-requisites vary from project to project, but the following skills are essential:

  • Intermediate programming skills in at least one popular programming language like Python, C, C++, HTML/CSS/JS, Java, etc.

  • Familiarity with Linux for software development.

  • Familiarity with basic open-source development tools and workflows (Git, GitHub, etc.)

  • Google-Fu: The ability to independently find and implement solutions to problems using documentation, and internet resources.

  • Credibility: Maintain your public profiles like GitHub, Linkedin, Twitter, resumes, personal portfolio sites, etc. A person sitting thousands of kilometers away from you should be able to judge you positively based on your public profile.

💡NOTE: Beware of Imposter Syndrome!

⚒️How to build these skills?

  • Participate in Hackathons.

  • Build and show off your personal projects on GitHub and other socials.

  • Learn in Public to build credibility.

  • Get used to Linux - Dual boot Ubuntu (or any other distro) and use it as your daily operating system for a while to really understand the practical usage of Linux.

STEP I: 💪Getting Started

STEP II: 🏠Find an Organization

  1. Find an organization:

    • First, start by looking out for 2-3 interesting organizations from the GSoC organizations page.

    • Use filters and the search bar to look up organizations that align well with your interests and skills. You should be able to demonstrate your passion and technical expertise in the organizations you’re trying to get into.

    • If you're applying in 2023 and the list of organizations is not yet available, check out the list of selected organizations from the past 5 years. Organizations that have consistently participated are likely to appear again next year.

  2. Explore the organization:

💡 Reach out to these people and ask them relevant questions after you’ve done your own research. I can’t describe how many folks have reached out to me with questions that can be solved with just a simple google search. It’s annoying. 🥲

Rinse and repeat the above 2 steps, and make a list of a few organizations that interest you.

You can submit up to three proposals for GSoC, but I suggest only researching a few organizations that interest you. Finalize one organization as soon as possible and focus all your efforts there.

STEP III: 👨‍👩‍👧‍👦Get Involved with the Community

💡 It’s about the community, not about the code. - This is one of the most CRUCIAL parts of getting selected in GSoC, and a sure-shot way to miss your opportunity if ignored.

  • If you've done your homework, you likely have an idea of which areas of the organization interest you the most. Now get into your community’s public communication channels (Discord / Slack / IRC, etc.), and do the following:

    1. Briefly introduce yourself.

    2. Talk about the projects of the community that interest you.

    3. Mention any projects you've dabbled around in the community's codebase, any bugs you've attempted to fix, any issues you've encountered, and any topics you'd like to learn more about, etc.

    4. Ask how you could further contribute to projects/areas that interest you based on your skill set.

  • Participating in projects and contributing code, documentation, or other resources can help you gain valuable experience and build relationships within the community. This will also give you a chance to learn about the project and understand its needs.

  • If you’re early, most organizations might not have yet published their projects list. But that’s alright. At this moment, just try to get your foot in the door by interacting with people and mentors, asking questions, attempting to fix basic bugs/issues, contributing to documentation, etc.

💡 Does it all feel overwhelming? Start small. Start by fixing Typos. Start by fixing simple HTML errors. Start by using “good first bug” type issues that your organization might’ve set aside for newcomers. 👀
e.g. Issue Navigator - MetaBrainz JIRA - Good First Bugs

  • While it's true that "there are no dumb questions", there are better and worse ways to ask questions. Organizations also tend to choose students who can find answers to their own questions. Do your own research before asking. Avoid generic and super broad questions - see if such questions have been already answered somewhere.

  • Show up to discussions, ask questions and contribute code/documentation CONSISTENTLY until the day you get selected. Your constant engagement will reflect your passion and seriousness.

STEP IV: 🧑‍💻Select a Project

  • If you have identified a few interesting projects, it is time to select the one that interests you the most. Again, you can submit up to three proposals on your GSoC dashboard, but it is HIGHLY recommended to focus on one project at a time and give it your all.

  • Most organizations publish their own project lists around February... That's when the normies start jumping in, and frankly, it's a little late to start (but still worth an attempt)
    e.g. Development/Summer of Code/2022/ListenBrainz - MusicBrainz Wiki

  • Most projects require more skills than you currently possess. That's usually okay, as long as you have the core skills needed for the project. Additionally, you must be willing and able to learn new things as you go.

  • Once you have a project, gain an in-depth understanding, and take notes of:

    • The problem statement

    • The proposed solution

    • What skills you’ll need to acquire to implement the solution

    • Skills that you already have.

    • Any contributions or Pull Requests you’ve made so far for the project.

💡Keeping track of this information will also later help you in building a proposal.

  • Use this opportunity to build familiarity with Git, Linux, and good development practices along the way.

  • Also, remember to keep learning in public and polish your profiles along the way.

STEP V: ✍️Work on a Proposal

  • GSoC requires you to submit a project proposal outlining your plan for the project and how you will contribute to it. Your proposal should be detailed and well-written, and it should clearly demonstrate your understanding of the project and your ability to complete it.

  • The key to crafting an effective proposal is to thoroughly understand a problem and create a detailed and super-specific 3-month or 12-week plan to address it.

  • You can check out my proposal for GSoC 2022 here: https://docs.google.com/document/d/1OeEGn973kj0BWKWvv_YlGVF4NbDonEIZQnDXtpEG-aI/edit?usp=sharing

  • Here is a general guideline for what should be included in a quality proposal:

    1. Your Contact Information:

      • Name

      • Email

      • GitHub Profile

      • Linkedin/Twitter (Optional, but recommended)

      • Your username for IRC, Discord, or Slack (whichever your organization uses).

      • The username of your Project Mentor.

      • Your time zone.

      • Your preferred languages of communication.

    2. Project Introduction/Abstract

    3. Problem statements

    4. Proposed solutions for each problem statement

    5. Clear end goals, and their specific outcomes.

    6. A list of stretch goals (if any)

    7. A DETAILED timeline (A weekly timeline with a few milestones is best)

    8. Personal Introduction & Misc. Information

      1. Give your brief introduction

      2. Demonstrate your passion for a project

      3. Demonstrate your past accomplishments, open-source contributions, work experience, etc.

      4. Talk about your relevant personal projects.

      5. Discuss your time availability and other commitments - How much time do you have available? How you’re planning on using it?

      6. Show off your skills.

      7. Share your resume if you have a good one.

  • You can use the hourglass technique for writing your proposal, which is a method for explaining complex or abstract concepts in a way that is easy for listeners to understand. It involves starting with a broad overview of the concept, then gradually narrowing the focus to specific details and examples, before expanding the focus again to discuss the broader implications and applications of the concept.

  • Here are some important considerations for writing a successful proposal:

    • Always check if you’re organization has published its own templates/requirements for a GSOC proposal.
      e.g. Development/Summer of Code/Application Template - MusicBrainz Wiki

    • Building a relationship with (soon-to-be) mentors and community members is essential. Without it, even the best proposals will be rejected.

    • Start building your proposal AT LEAST 2-3 weeks before the deadline.

    • If you have any ideas for the project, include them in your proposals. This will show your ability to think creatively on your own.

    • Refer to other proposals that got selected in your desired organization.

    • Include relevant images, diagrams, flowcharts, database tables, design mockups, etc.

    • The proposal should be clear and comprehensible to someone unfamiliar with the project.

    • Make sure to ask for feedback on your proposal from your mentors, members of the open-source community, and other experts. Go through plenty of iterations of improvement before submitting. This step is CRUCIAL - at the end of the day, it’s your project mentor who’s going to approve/reject your proposal anyway.

  • Here’s a Bonus Resource that I found really helpful:

💡BONUS TIPS

  • START EARLY (November onwards).

  • OSS codebases are huge and intimidating, but it’s worth pushing through the initial stages of frustration by starting small and narrowing your vision to only specific parts of the code that correspond to the issues you want to tackle.

  • Randomly popping up in a community a couple of weeks before the proposal deadline and submitting an undiscussed proposal is a sure-shot way to fail.

  • Try to interact with your fellow community members daily. Consistent participation shows your passion.

  • DSA? A god-tier Resume? No, you don’t need that for GSoC. But you do need the following:

    • Ability to come up with solutions to standard issues and bugs on your own using StackOverflow, Google Search, etc.

    • Ability to learn new things on the fly.

    • Taking the initiative and being motivated and passionate about the project you’re trying to get into.

    • Good written communication skills.

    • Endurance to work the long haul.

  • Organizations tend to choose candidates that are passionate about the community and its projects/goals and might stick long-term beyond their GSoC contribution period.

  • Organizations often publish their own guides and documentation for getting started, setting up development environments, GSoC guidelines, and communication guidelines. Make sure to use them to your advantage.

  • Good communication helps you build rapport and trust in the community. Follow best practices for communication: How to ask for help on IRC - RJ's Notes (jones.be)

  • Your first pull request doesn’t have to change the world. You can start by:

    • Fixing typing errors

    • Fixing simple HTML errors

    • Adding/Removing/Updating documentation

    • Leveraging “good first bug” type issues that most organizations keep aside for newcomers.

    • Getting help where needed (given that you’ve also already been diligently looking up solutions on your own.)

  • Get rid of your imposter syndrome.

  • Keep going - You miss all the shots you don’t take.

  • Decide if you want to make an extra $3000, gain valuable experience, earn a reputation, expand your network, contribute something meaningful to the world, and build your portfolio at the same time - or if you have any other priorities at the moment.

🙌Conclusion

  • GSoC is the best thing that has happened to my career so far, and I can’t stress enough how good it is for students trying to gain experience, get their foot in the industry, and build credibility.

  • I’d highly recommend all of you to give at least one serious attempt at this program because even if you fail to get selected, you’ll still be gaining seriously advantageous perks like:

    • Getting access to mentorship from the OSS community

    • Building a credible GitHub profile (with a proven track record of commits and PRs)

    • Expanding your network

    • Entering the global job market (and earning in $$$)

    • Learning real-world software development workflows

    • And potentially find causes that you’re passionate about like I did by combining my passion for Technology and Music at MetaBrainz :)

  • Lastly, writing and filling up this blog with strictly informative content was way harder than I expected and took a lot of effort. But I’ll consider it a win if even one of you readers finds it informative and engaging. And if you do, please consider sharing it with your friends! Thanks for reading :)

Did you find this article valuable?

Support Prathamesh Ghatole by becoming a sponsor. Any amount is appreciated!