Today I am going to write about a recent experience of mine, something that matters a lot in my life!
Although, The Good News first. I got selected in Outreachy Round 12.
So I am going to write my complete journey, from the beginning to the selection.
I got to know about this program from my college senior Shaifali Agrawal. who interned in Outreachy’9 (when it was referred to as Outreach Program for Women) as well as in Google Summer of Code (GSoC) 2015 and of course, is an open source enthusiast just like me. Thanks to her for introducing and guiding me through this path.
In the beginning, I just knew that Outreachy is some program which is very difficult to get into and it will provide me learning. Later on, while discussing with Shaifali about the internship, her mentor, her co-interns, the work she was doing etc., I understood the importance of this opportunity.
After discussing with her, I realized that there was learning in various aspects.
“The art of Communicating”, You learn how to work with people thousands of miles away from you. Where in confusion, you can’t discuss things face to face, you need to be very elaborative to make your points clear.
“Coding Standards and Best Practices”, You get to work on a project that has numerous eyes on it. This enforces standards implicitly, you can’t make excuses then (for e.g. ‘I didn’t get time to write comments’). Because it’s like an unwritten rule here.
“Patience”, It makes you learn to have patience. Yes, this is very important when you are working on open source projects. This is how they maintain quality and stability in the product. This includes code reviews, approvals among other things before your code is live. It removes any traces of mistakes.
“Community”, Open source is about community. There is a big community of people working for a common purpose. You find like-minded people. Your ideas, beliefs get accompanied and hence they get polished. Your understanding deepens, your views broadens.
“Technical”, Last but of course not the least, you get deep knowledge of the language/platform of your choice (on the basis of which, you chose the project). Since I and Shaifali are Pythonistas, so we were primarily into Python. (including design patterns, testing approaches, and frameworks, advanced concepts of the language).
And of course, you get a fair amount of money, that you can re-invest in learning.
So, after watching Shaifali go through this amazing process, I got interested in it too. And as I mentioned above, it is a treasure box of learning and so I could not afford to miss it.
I first tried for GSoC’15. I was beginning to work on Honeynet at that time, so I tried for the same, read documents from their interaction page. Scanned the project’s ideas list. Got few projects of interest, so tried to understand them. But since I was too late (I started around 7 days before the application deadline), I had no confidence and faith in my efforts and so I gave up too. I must say, it was a Big Mistake.
Yes, it was a big mistake to give up. Because seriously, after going through this complete procedure in a long time, I have figured that it doesn’t really make a big difference how much time is left. What matters is, how much faith you have in yourself and how long are you determined not to give up.
I was afraid that I will need to write a timeline, and I had no idea about the project so how would I? Moreover, it required a bug fix also (again a “How”). But now I realize that it was an unnecessary fear. It is where the community comes into play. I would like to advice:
You should not make any assumptions about anything on your own. As soon as you have finalized a project (or even an organization), first thing should be interaction with the mentors and coordinators. They can help you in understanding the project and procedure.
Had I talked to the coordinators, I might have found out some way out of the fears. I might have made it through GSoC’15, who knows. But the thing is I couldn’t because I made that “Big Mistake”.
Anyways, what’s gone is gone. So moving on…
The first attempt
I am calling it, “The First Attempt”; because of my so-called assumption of “There are better chances if you start early”. I started quite early this time. (This time, it was for Outreachy’11).
I started along with one of my classmate and a senior (Rohini Choudhary). All of us first scanned the organization list. Then we reached out to the mentors individually for projects of our interests (and we spent a lot of time doing this). I guess over-planning kills the plan itself and this happened with us as well. We spent too much time in selecting the organization. Although it is good to give time to select the project, because you have to work on it for a fairly long duration of time.
I might sound contradicting, but this is the thing; you need to find the finish line yourself. Honestly, I couldn’t; and paid off.
What I learned this time, was that efforts matter, but they should be in right direction. You should take enough time to select the project but not much that you don’t get time to understand the project. Although there were other reasons also; some of the organizations didn’t respond as expected. We were stuck for a long time with no clue of what to do next.
Then we all agreed upon a single organization with different components. (It was OpenStack, and since it’s components are projects in itself, so we selected different projects indeed). Among three of us, only Rohini found true interest in the project. Two of us were still not convinced, but still we tried.
Beware! Don’t just settle on any organization/project because you don’t seem to have any other option. Believe me, there are fairly enough options. Because when you do it without interest, you end up in what the two of us did. Read along…
The next step was to fix a bug. So we started with setting up the development environment. Rohini successfully set it up and also fixed few issues. She continued. While both of us could not even set the environment up.
Slowly, we started losing it. We got busy with other things in parallel.
You need to have focus, you can’t stand in two boats simultaneously. Keep this in mind. It’s not only for this program but it applies in anything you do. Because I assure you, it led us nowhere.
What I learned from this attempt was (and this from Rohini’s efforts more than my own experience) that you need to have focus. If you successfully crossed the first step (selecting an organization and project), then stay focused and try your best. But also keep in mind, that if things are not going right (and especially when you don’t seem to have a damn interest in the project), then it’s a smart decision to switch the project soon, don’t waste time on something that’s not gonna happen and when you know it inside out.
But among all this, one thing remains constant and that is, don’t make that “Big Mistake”. Because even this time, the reason for failure was the same “Big Mistake” of giving up.
So again, moving on…
Now I might sound hopeless to use this heading. Yes, I was somehow losing hope.
But the post title had to be justified. I couldn’t give up this easy, so another try.
I started much earlier this time. And this time for GSoC’16 :-P.
This time, I kept all previously noted points in mind.
- Start Early.
- Select an Organization of true interest.
- Interact with the community before making any assumptions.
- Start contributing without thinking for a moment later on.
- Have patience.
- Keep in touch with people (mentors/coordinators/coparticipants).
- Be smart enough to move on, when things don’t fall in place.
I did all these things. I was truly interested in CPython. The community is strong, and the language is, of course, my favorite. So this time, the selection was pretty straight forward and correct. At least I was not hanging in the middle of choices.
For the start, I went through the developer docs and set up the environment. From there only I was headed to bug tracker to look for issues. But for a long time (around 7 days) I couldn’t find any issue to solve on my own. It was the time to apply the 3rd point. They have a mailing list for newbies, I asked there. People responded, and helped me find some issues that I could solve. I solved few of them, submitted patches. Then came the waiting period. As I mentioned above, “Patience” is required in open source.
Since the project is big, people are involved in many things at a time. So they can’t review your code instantly.
Developers reviewed, commented, I iterated on the code and the process went on for around 3-4 iterations. It took around a month for my first patch to merge.
But the happiness and contentment of that first merge are unforgettable. I was overwhelmed with that tiny first success. I got back my confidence and hope.
I kept looking for issues to solve, also kept in touch with the community by subscribing their mailing lists, hanging out on IRC. You see, the “Communication” part played it’s role here.
But then came the time to apply the last point. I soon figured out that I was not capable of getting in GSoC’16 with CPython. Probably I thought wrong again, probably I could get in, but at that time, I decided to look for other projects.
Although I don’t suggest this as a right decision to you, because it was again the result of an unnecessary fear of competition. I compared my capabilities with others. I measured my efforts on an inappropriate scale.
It was around a month before the application submission deadline. I was looking for organizations in GSoC listing.
Looked through many of them, read their project ideas, joined several mailing lists,
and set up development environments for around 3-4 of them (in which I found interest of course).
The Final Step
A random day, I was looking through the organization list of Outreachy’12 and saw openshift-origin there. The description looked interesting. I followed the link to their Github wiki. There I found this project FTL-Installer. It’s Overview looked interesting to me. Although It was going to start from scratch, but the idea caught my attention. So I went to IRC, talked to the mentors. The mentors were so quick to reply. I explained my interest to them. They first tried to make me understand the level of complexity (as It was a fresh project so there was no pre-cooked code base to learn from), and suggested to try for some other project.
But I was determined to not switch this time. Finally, they were ready to help. They gave me a starter bug to work on. I coded it, submitted a PR, iterations happened, and it got merged.
From then on, I left everything else. This was the time to apply the rule of thumb, Focus. I kept hanging on the IRC daily. Kept pinging the mentors for further progress. Then the day came; the application deadline. I submitted my application. Wrote it 2 days before the deadline, got it reviewed from two of my seniors I mentioned above and also forwarded to mentors for unofficial review.
At the same time, applications were being accepted for GSoC too. I was suggested to try for that too (which I think, was a good suggestion). But I didn’t take that.
This is something I am not certain of suggesting you as the author of this post right now. I would say, read it as my experience and use your own mind here.
Even after submitting the application, I maintained the communication. I used to ping the mentors constantly for new tasks. They were always instant to respond. I think this is an important factor, with everything else, the community response matters a lot.
And the day of result arrived.
As I informed in the beginning of the post, I was selected. :)
I look ahead to learn a lot from this internship. But I must say, the whole procedure was full of learning in itself. I already noted the key points above, which were the extracted lessons from the process. Though this was my story, someone else out there might have a different one. After all, everyone has their own way of doing the same thing. But few things are good to learn from other’s experiences. I also learned few of them from others only ;).
So do try your own way, keep the above points in mind and don’t forget…
“Don’t Give Up… Till You Get In”
PS: Special thanks to Amber Jain for helping me improve the post.