In early May 2020, halfway through my exchange program and at the peak of the COVID-19 crisis, I didn't have any idea what I was going to do next.
One day a friend sent me a link for the MLH Fellowship program. I applied.
I have always been super interested in Open Source development, ever since I got into college and started coding 5 years ago. However, I never really got into it, either because (1) I didn't have enough time, (2) had other priorities or (3) got discouraged by toxic people.
Being paid to do this kind of work, alongside other super impressive students and experienced maintainers and mentors, was definitely a one-in-a-lifetime experience.
If you like software development, enjoy contributing to Open Source or would like to start (even though you don't know much about it yet) apply. Just do it. It takes 10 minutes tops. Do it, I'll wait.
The overall application schedule is:
Online application: you fill a form and answer questions like "why do you want to be a fellow" and "what are your preferred programming languages".
General interview: a 10-minute interview where you explain where you come from and what are you interested in.
Technical interview: you choose a piece of code you wrote and think it's representative of your abilities, and explain it to your interviewer.
A couple days after I applied I got an email to participate on the first, non-technical, interview. It was super casual and it took at best 10 minutes.
My interviewer had a lot of background noise and his microphone wasn't the best so I had to ask him to repeat a lot of the questions. He even typed some of them on the chat. I was worried that he would think I didn't speak English very well or that I didn't have a good connection (which wasn't the case, but in a 10-minute interview you never know, so it's also a bit of luck).
I was super relieved when I got the news that I had passed to the next phase.
Later that day I received an invitation to the technical interview. I scheduled it to about a week after the first one.
Here your task is to share your screen and show your interviewer one piece of code you wrote that you find interesting. I didn't have many amazing side projects, so I chose a queue handling app I was doing for an internship selection process. It wasn't impressive at all.
But then how did I get selected among these other super impressive fellows (some of which had worked as interns at companies like Twitter and Google)? Well, good thing about getting into the program is that you can actually message the person that interviewed you.
I wanted to know what was your impression of me, what you thought were my strengths and weaknesses, and what made you recommend me for the program at the end of the day
I don't even know if you are allowed to give me this information, so I do apologize if you are not
I remember I liked seeing your advanced vim usage (which indicates you taught yourself)
And that you setup Docker on your project, which is good follow through into a totally separate world of devops
And you could tell me what a PATH variable is. Most cannot. This was big
So I guess one could say the code you choose doesn't matter. My tips are:
- Are you passionate about code? Yes? Can you prove it? Did you build any projects with that passion?
- Do you like vim? Neat! Can you show me something cool about it?
- Have you been using Linux exclusively for almost 5 years now? That's impressive! What are some hacks you've done with it or learned along the way?
I would've never guessed that Vim (I actually use Neovim) would get me into a program like this but, when you stop to think about it, it makes sense. I've learned Vim and touch typing all by myself and today I'm practically fluent on vim (meaning I can do my day-to-day stuff, not that I'm one of those vim magicians).
Bottom line: it's not about how big your project is. It's about how it demonstrates a valuable piece of your personality.
Your pod is the group of people (~10 fellows + 1 mentor) you'll be spending most of your time with. You work on the same set of projects, pair program, review each others' codes and play games together.
MLH will try to group you with people that are more or less in your timezone, but in my case we were probably the most spread out group of people in the fellowship (from Canada and US all the way to Europe and Africa).
You don't necessarily work on one sole project the entire program. In fact, that's very unlikely. My pod had about 10 different Open Source projects: FastAPI, Typer, Howdoi, HTTPie, Beego, and the Pallets projects (such as Flask, Werkzeug and Click).
What's interesting about contributing to Open Source is that you start with very small contributions and quickly find yourself doing much bigger ones. After a while you get comfortable with the general workflow and even those who seemed super challenging end up being only a very small and specific commit.
Another great thing about the MLH Fellowship is that you get direct contact with maintainers on the Discord server. They're there! Feel free to message them anytime.
MLH knows a lot of people, so you'll get a lot of interesting talks throughout the program from all sorts of different people. Can't attend a talk live? No problems! Most talks are recorded and released on Youtube.
Other than the talks and workshops, MLH is really into promoting hackathons, so you bet they have fellowship hackathons as well! There are two hackathons during the fellowship. In the first week of the program there's the kickoff hackathon, where me and my pod mates did a home task management app. In the in the middle of the program there's the halfway hackathon where me and my team of fellows got first place for Best Showcase / Portfolio Project with the Fellowship Wrapped app.
Also, fellows can organize their own events, and they are strongly encouraged to do so. As I'm into security stuff, I put together a CTF (Capture The Flag) competition for the fellows. MLH is even giving some prizes for the top teams!
Getting a fellowship is not easy. I've been into Computer Science for 5 years now, I've applied to hundreds of programs and either got rejected or didn't even get a reply.
If you don't get in, that doesn't mean you're not good enough. It just means that you didn't get in. Nothing more than that.
Go work on what you like to work. Go build the skills you think are important. Go interact with other people.
People hate to say this, but a big part of life is luck. If you try more times, you're more likely to land a job or internship. Once you do, it gets easier to land the second one, and so on and so forth.
You just need one "yes". Don't stop trying.
I can say from the bottom of my heart that this fellowship was by far the best professional experience I've had, and I am super thankful to all the friends I've made on the way and to all the MLH crew for putting so much effort into it <3