LFX Mentorship: How to Get Selected
A Guide to Getting Selected in LFX mentorship.
Hey There, I am Prateek Singh, I graduated LFX in 2023 Jun-Aug Session under the Cilium Project. I am also working full time as a Software Engineer under a startup, Fountane and I will graduate from College this year. In this article I will share how I got selected as an LFX mentee, I will also share my Project Proposal and guide you through the process. Let's get started.
The Key takeaways are:
Communication is the Key.
Be ready to learn a Lot, Fast.
Know what you want.
Get started early and do your hard work.
Now I will explain how it resides in my Journey through a general guideline I came up with. This guide includes major steps like
Where to look for projects.
How to Select a Project (or Discard them).
Initial Contact
Writing a Proposal and getting it reviewed.
What after Selection or Rejection.
Where to Look π΅π»
This is an important question. it defines you Search area. If you want to exclusively work under CNCF projects, the better place to look at is CNCF Mentoring Page. It will list the projects along with what tech they need. It will also have upstream URLs for issues where you can see the past discussions along with the emails of mentors.
This guide is specifically for the CNCF projects because they are my field of Experience. For the entire list of projects, visit the LFX official website because it will have Hyperledger, Linux kernel Projects and a lot more.
How to Discard Projects π€
The biggest issue is that there are too many projects ! It's hard to choose what you want to work on. If you are like me at that point, you wouldn't even know what tech you are very good with. In fact, you will not understand most of the projects. So the task is not Selecting a project, you should be good at discarding Projects.
Everyone has different preferences, but general guidelines are
Avoid Crowd as much as Possible.
Harder Projects have higher Chances of Selection.
Discard less active communities.
Filter the Projects on the Basis of tech stack.
Work on the issues that sound interesting.
Balance is important
Now, here is the reasoning for the above points.
Avoid Crowd ππ»
There are a lot of people there, just like you, probably more experienced than you. So you should consider places where there is less crowd. There are few ways to filter it out.
Choose Hard Projects: Hard projects will have less crowd than other projects, because it will require a lot of learning and the issues themselves would be tough. you would not understand a lot of things on the first read. Something similar happened with me.
Choose Hard Tech: Technologies like JavaScript, React and other Web Related projects tend to have a larger audience because a lot of people know Web Development. Choose technologies that are comparatively harder to work with, like Back-end Development, Ruby, Go, Python etc. I personally looked for Kubernetes and Go related Projects because I am really interested in that tech and it's comparatively hard.
Avoid Less Active Communities π
There are a lot of organisations, but not all of them are similarly active and willing to onboard new comers, simply because being a maintainer is hard and on-boarding new comers is harder.
My Personal Pick was CNCF, because almost all the projects there are hyperactive. People are willing to help and there are regular discussions going on. In fact, CNCF itself has a large number of sub-projects that has it's own list of Potential Idea List.
A less active community can often be dead-end because you wouldn't be able to connect with the mentors, get recommendations, get your proposal reviewed which are extremely important steps.
A simple way to check how active community is
When was the last commit ?
How active is their Public communication channels ?
How often do they have meetings ?
Tech Stack π¨π»βπ»
You don't need to know 100% of the things mentioned in the Tech requirement section but you should at-least know 50%-70% of things. Keep in mind, you would need 100% of it eventually, so be ready to pick it up during the time you write your proposal.
You don't have to be a master at that tech, you will learn a lot of things during the Mentorship but you should at-least be at Intermediate level with the programming language and understand the issue so that you can formulate a proposal.
In my case, the requirements were Go Programming language and Kubernetes, I was at intermediate level with both, because I planned it and prepared for it, but even that was not enough. Rest of the things I picked up while writing the proposal.
Interesting Issues π
This is subjective to every person, but I personally wanted to work on something that I find interesting. I was looking for a great learning experience and the feeling of "I did something great, that I am proud of". On the basis of this, I skipped a lot of CNCF projects that were around configuring metrics, building dashboards, developing SDKs etc. I wanted something new that I only understood about 20% of.
This was important for me because it kept me motivated for the entire learning journey, where I had to read a few books. I read the Kubebuilder book in 3-4 days along with a Kubernetes related book in almost a week and I learnt a lot. You should find what get's you interested.
Balance is Important βοΈ
Now following this discarding technique, create of list of at-least top 3 issues. I am suggesting 3 because you can apply to 3 Projects simultaneously in one cohort of LFX, so don't keep all your eggs in the same basket. Also, It's necessary to maintain a balance there as well.
In these three issues, have a backup plan, that maybe will have good crowd, comparatively easier tech stack and understandable issue description. Positive side being that you would be confident in yourself and you will write a proposal quickly, since you would understand many things from day one.
In these 3 issues you selected, I would recommend having 1 most favorite, 1 Backup and 1 projects that lie in between both.
Initial Contact π€
Now is the step where you introduce yourself to these three communities. They will have their own slack or other channels (it will be listed on the issue itself). Make an initial contact with the impression that you are new, willing to learn and interesting in working with the community as a mentee.
Don't hesitate to email/personal message the mentors, introduce yourself, show willingness and ask for help. My first email to the mentor looked like this.
Hello There !
I am Prateek, a CS, engineering undergrad from India. I am currently in my third year and I have been involved with the CNCF projects for a while. Since I have the basic understanding of Kubernetes, it's components and Networking. And, I have been writing code in Go for a while, building web servers, writing tests and a little bit of network programming. I believe I should start contributing.
While going through the idea list, I came across this issue <issue link> I am interested in contributing to this project since I will be able to learn a lot. I am going through the docs to better understand the project but it would be great help if you could point/list a few things out to get me started with my learning journey so that I can write a good proposal and eventually contribute if get selected.
Thank you.
as a response of it, the mentor pointed me towards some resources to read, specifically the Kubebuilder book. This was a great starting point for me, I finished the book in 3-4 days and reverted back with a basic proposal outline. That is how you should do too, learn quickly.
I send similar messages to other 2 organisations, in their public channels and DMs, some of them were quick to reply and some of them were not. The three organisations I chose were Cilium, Meshery and Keptn. All three responded but my conversations were going amazing with Cilium.
Now there is no guarantee that you will get replies quickly, or too direct, maybe I got lucky ? but that doesn't matter, be persistent, ask better questions, do you hard work to figure out a concept and ask questions regarding what you did not understand. Keep this principle in mind, "Walk 10 steps, then ask for help in 1 step".
Proposal βοΈ
This is important, generally people write Proposal for GSoC only and there is no specific guideline of writing proposal in LFX but I have seen mentors discussing about lack of clarity and information about the mentees and suggesting students to write proposals so I highly recommend writing a proposal, it separates you from other and help you better understand the issue itself.
I personally wrote the proposal because I first applied for this issue in GSoC (Google Summer of Code), where they liked my proposal but the organisation did not get slot in GSoC itself, so when the project re-applied the same issue in LFX, I submitted the same proposal and got selected.
Write a proposal as soon as possible and start asking for reviews from the mentor, they will help you with tweaks, suggestions and correct you if you are making any mistakes. This is the first point of making good relations with the mentor which is very important.
Here is my Proposal that got selected
I did a lot of research for this, I did the best I could, went through the codebase, tried to make a picture in my mind, I spent around 3 days on my own with the code. I would recommend going all the way at this step.
Fast forwarding, After many changes and iteration, your proposal will receive a green light from the mentor. This does not guarantee that you are selected because there will be other people too who might be writing proposals. This green light suggests that you have understood the issue well and you might have a good plan of implementation and the best part, The mentors know about it ! They will consider other things that will make the Mentorship a better experience for both Mentor and Mentee, things like "Ease of Communication", "Pace of learning", "reason for Applying" etc.
Stay Active π§ββοΈ
Even when your proposal receives a green light, don't stop there. You should work on proposals with other 2 organisations as well if you want to increase your chances. Another thing you can do is start smaller contributions in the project.
Look for good first issues, talk in public forums, ask questions etc. Try to better understand the Code. It would be a huge plus if you get a PR merged during the selection process, add it in your proposal and tell it to your mentor. More time you spend with the community, the Code and the issues, your chances will increase of getting selected.
Final Step βΌ»
There are two things that can happen now, let's discuss how to deal with both of them.
You get Selected π₯³
Well, Congratulations. All your hard work paid off and now you will work with a senior Engineer, learning cool stuff and doing amazing things for the next three months. Make the best out of this opportunity.
Talk a lot, attend regular meetings and learn as much as you can. Develop better relationship with the mentor. This is the part where you will get the most out of all your hard work so far. I am not experienced enough to tell you how to efficiently learn from Senior engineers that is for you to figure it out.
You Did not Get Selected π₯³
Well, Congratulations. All your hard work paid off and now you will work with a senior Engineer, learning cool stuff and doing amazing things. Make the best out of this Opportunity.
The above repetition is intentional, getting selected or rejected for LFX doesn't change the fact that you can learn a lot from Open Source. The only thing that changes is you will not be paid (for now) for it. But as you can see in the entire article, it was not about Money to begin with. Tech Pays enough if you are skilled, the best way to get skilled is learn and the best way of learn is to learn from experienced people. You get it all with working in an amazing Open Source Community, which you finally found after all you hard work following the above steps !
If you want to know more detailed guide about Open Source in General, check this article of mine that has helped many people. Learning Through Open Source
If you want more detailed experience of my LFX Journey, comment and I will write about things like "What I learnt", "How I talked", "My approach to Problem Solving and Learning" etc.