This is a story about my MLH (Major League Hacking) Fellowship journey. Fasten your seat-belts and enjoy. 🚀
Table Of Contents:
- What is MLH Fellowship?
- Questions about MLH and application process
- My experience with MLH (Open-Source track)
- A few more things I need to tell you
- The closing words
MLH Fellowship is officially defined as:
The MLH Fellowship is a 12-week internship alternative for aspiring software engineers. Our programs pair fun, educational curriculum with practical experience that you can put on your resume right away. It's collaborative, remote, and happens under the guidance of expert mentors.
I would emphasize a few things here:
MLH Fellowship is an internship alternative. It lasts for 12 weeks and has three tracks:
- Explorer - for the developers (students) who are less experienced or who are just kickstarting their development journey
- Open-Source - for the more experienced developers (students) who strive for Open-Source contribution
- Externship track - this is the newest track added to the MLH Fellowship program. It is oriented to company contribution. As far as I know, in the previous batch, students on this track were working with the Department of Defense companies.
It has four goals (in my opinion 😄) :
- learn 🧑🎓
- code and contribute 🧑💻
- share your knowledge, be collaborative and help others 🙌
- have fun 🎉
It is a great opportunity and experience for everyone - for beginners and those with some (or a lot of) experience 🏆
It is fully remote engagement
OK, that was an introductory story. Now, I'll describe a few things in the Q&A interview manner - I'll post questions that everyone is interested in, and of course, I'll answer them.
Well, the first thing is definitely to discover the MLH Fellowship 😄. I, myself discovered it by reading a blog post. So, I hope my post will help someone too 😉.
The next step is to apply for the fellowship. Currently, while I'm writing this article, applications are still opened for the next Spring Batch, but they will be closed soon, so hurry up and apply! The application form is long, and it will take about 30-45 mins to fill out. You'll provide your personal details, your experience, a motivation why are you applying, a project you're most proud of...
Be aware, the project you mention and describe in your application form is very important, it should be your racing-horse and it will be part of your interview. Another thing that is very very important is: The earlier you apply, the sooner you'll get your interview invitation, the bigger your chances are to be selected.
In my case, I applied about three weeks before the application deadline. All applications are served on a rolling basis (first come, first served), so make sure you apply early.
OK, Nenad, you said that we should apply for this batch (and we have just a few days left) and now you're saying that we should apply early. Contradiction 🤔? Well....no... Don't worry, If you're good, you won't be rejected. If all the seats for the first upcoming batch are occupied, your application will be redirected to the next batch (I'm not sure, I forgot that, but I think you need to confirm this in your application).
There are three active batches (Spring, Summer, Fall). Yeah, three chances in a year to become an MLH Fellow (sounds good). The next batch (at the moment of writing this article) starts on January 18th and ends on April 12th. Make sure you fill out the form carefully and provide the necessary details because those applications are reviewed only once. Another thing I need to emphasize, the number of applicants is far over the number of available seats. In my batch, we had about 170 available places and more than 30000 applications, so do your best in every step of the selection process.
More info (and where you can apply): MLH Fellowship programs
Well, there are a few things that make you eligible for this fellowship:
- Age: you must be over the age of 18 or over age 13 with your parent's permission.
- Residency: you must not reside in a country embargoed by the United States.
- Time Commitment: you are able to commit the required hours per week to the program
- Communication: you're proficient (enough) with English, both written and spoken.
- Coding Experience: you can code proficiently in at least one programming language
- Environment: you have regular access to a quiet workspace for meetings & coding.
- A/V Setup: you have regular access to a video call quality Internet connection, webcam, & microphone.
I need to elaborate on a few things here:
- Time Commitment - this program has two time commitment modes:
In your application you choose your time commitment mode.
- part-time mode where you should make 20 hrs of work of commitment per week
- full-time mode where you should make 40 hrs of work of commitment per week
- Coding experience- it is expected you have decent skills in at least one programming language. Of course, it is great if you have solid skills in more than one language/framework. You will provide these details in your application. In most cases, you will use your strongest language in your technical interview, as well as during fellowship commitment. But, nothing is so strict. The main purposes of the fellowship are learning and contribution, the stack you're using is not the barrier. For example, my strongest language is Python 🐍 and that was the language I provided as the strongest and that I was supposed to use in my open-source contribution. Nope, I didn't do that. I used Ruby, or more precisely Ruby on Rails. Before the fellowship, I had used Ruby once and that was two or even three years ago. So, in a week I refreshed my Ruby knowledge and went through a few tutorials about Ruby on Rails. And yeah, I had successfully contributed to an open-source project I had worked on. So, be relaxed, a technology stack you use is not a barrier. 😉
- Network and A/V setup - it is expected that you have a decent network connection, camera, and audio set so you can communicate with your mentors, collaborators, staff etc. Of course, if you face some network issues (or network breakdown) during your fellowship, it is completely fine. Everyone is so flexible and will understand that. For your A/V setup, your embedded A/V from the laptop or the simplest camera and headset will do the job, it is not required to have a pro set like a YT-uber.
Note: It would be good to have a stable connection and A/V adjusted for your interviews because potentially it can downgrade your chances for passing them, but that also is not a catastrophe. A few of the fellows faced that and yet they passed their interviews. But to be sure, do your best to have everything you need before the interviews (that hold for every online interview you have).
Oh yeah. If your application looks interesting, you'll get an interview invitation. The first interview is actually very similar to a university admission interview. It takes no more than 10 minutes (Google Meet or Zoom). You choose a time slot that suits you and based on that and interviewer availability you got paired with the interviewer. In that interview, an interviewer will check your eligibility (all of the things I mentioned earlier) and you'll have a short chat. The goal of that interview is knowing you better, what is the motivation behind your application, why do you think you would be a good match for the role...It is similar to an HR interview at every company.
- Don't be afraid, be relaxed, and be yourself (honest).
- Be professional and show respect to your interviewer - be there on time and be polite. Do your best with the technical setup (network connection, A/V setup, make a quiet background, etc.)
- Be communicative (it is up to your personality and your language skills)
Follow these tips and you're good to go.
If you do well here, you'll get an invitation for the next round - a technical interview. The technical interview requires no live coding, DS & Algo, databases, OOP, or something similar... The goal is not to make pressure, but to let you show your potential. You remember that project you provided in your application. You'll discuss that project with your interviewer. It takes about ten minutes and your interviewer will ask you some questions to check your understanding of the language you used in the project, code structure, things you did and why you did them in that way, what would you change now...
For example: How you tested your app and why you did it that way? ...Line xyz, you wrote
blah blah, what that means? What are the pros and cons of using that in your code...
There are various things you could be asked but don't afraid of. You wrote that code, be sure you refresh the things regarding that project: architecture, setup, logic,...
Maybe the interviewer will be impressed with the editor you use, your code style and architecture, the approach you have when solving problems, etc.
After you finish this round, that's all. You did your job. The admission team will check your results and you will be notified soon (about 5 workdays). The final step is the acceptance mail. If your application and interviews went well, you'll get an email with the subject: Congratulations, you're going to be an MLH Fellow! 🎉
(hope you'll see this in your email 👏)
- An interviewer gives you some time to ask them whatever you want. Use that opportunity and ask something that you would like to know (be polite and ask something that is useful to know and I didn't provide info here 😂)
- Everyone in the MLH team is very kind and helpful. If something bothers you, you can contact them without hesitation.
- MLH tries to improve anything fellows or candidates find hard or complicated. You'll have feedback forms after every interview. Fill out that form and provide useful feedback. That will make the MLH admission experience better. Be honest (this doesn't affect your application result).
Very important note: Check your spam inbox (or other cards) if you use Gmail.
In your acceptance email, you will see various details, such as your pod number, pod leader name, meeting days, language you picked.
- Pod number: every fellow is assigned to a pod. A pod is generally a group of fellows (about 10-12) people. You're like a team in a company. You will meetings, work on hackathons, some of you will work on the same projects...You'll spend with these guys a lot of time.
- Pod leader: pod leader is like a TA at university. He/she is like a class tutor - maintain your meetings, give you hand when you have a problem (technical or some other), to be your support. If you have some problem, you'll probably first notify your pod leader.
- Meeting days: 2 days a week, you'll have standup meetings. In those meetings, you'll discuss your progress and use a template very similar to SCRUM: what did you do yesterday (from the last meeting), what you're gonna do today, do you have any problems and you can give shoutouts to the people who helped you, inspire you, share positive energy, etc. Also, you will share your feedback on weekly basis - what is good, what could be improved, what is bad - MLH pays a lot of attention to this. Fellows should be content and they're doing their best to make the fellow experience as best as possible.
- Technology choice: as I mentioned earlier it is not so strict and you can switch to other technology if that suits you more.
In my pod, we had a great atmosphere. Those guys were incredible. We had people from 4 different continents, with different backgrounds, skills, and interests, but we were great as a crew. We had really interesting meetings, full of good energy and fun.
You can apply for a stipend. In your application, you'll be asked if you want to apply for the stipend and after you get accepted, you'll apply separately for the stipend. Stipend application does not make an impact on your fellowship application. Stipends are not guaranteed, you will get them or you won't, it depends on your application which includes your life conditions and the country you live in. The stipend should be financial aid to help you cover the basic things you need for the fellowship. Of course, If you don't get a stipend, you can still participate in the fellowship if your financial situation is good enough.
In the first week, we had an introductory meeting. That's the first time I meet my pod mates and my pod leader (@khattakdev ). Also, Mike Swift, the CEO of MLH showed up and made a welcome. We had a short ice-breaker introduction - we were split into pairs and we should have introduced ourselves to each other and after then we should introduce our interlocutor to other pod mates. In the first week, we had an orientation hackathon. The goal of that hackathon is to get familiar with some open-source projects and technologies you could potentially work on later during the fellowship. We formed the three-man-teams and started working on our hackathon projects. You can make whatever you want (any idea), but you should pick something that is useful and that is very helpful to the community. You will be given a list of technologies/tools/projects your app should use (be made with) and of course, your project must be created with an open-source license. My team made an app that, based on the emotion that was recognized from the user's face (image) recommends a movie to improve/support your emotional state. We used BentoML, Flask and React to do that. Of course, you can use other open-source technologies, out of the list you will be given. This hackathon is a week-long. You made a submission on devpost and create a demo video for it. After that, in the next standup meeting, the pod leader will choose the best project that will participate in the finals where every pod will have their representative. The top three teams from this hackathon (winners) get some cool swags 🥇 🥈 🥉
In these two weeks, you will get assigned to an open-source project you will be working on in the next 10 weeks. There are a lot of cool projects like React, React Native, forem (dev.to), Amplify JS, Next.js... In this period you will also meet your mentor(s) who will be there to help you. Mentors are experienced developers who're there to help with your contribution, to check your progress and code work, but also to give you some advice about your work, career...
Our mentor gave us a list of projects that are available for our batch and we can choose from. He asked us to create a wishlist and sort 4 projects we would like to work on (so, yeah, your wishes count). I initially picked a project, but later (about a week after that) I got a chance to switch to another project which initially was my 2nd choice (just because of language). That project was forem - dev.to 😃 😏
As I said before, because I was not familiar with Ruby on Rails (the reason I put forem project on second place in my wish list), I spent the next week going through some tutorials and exploring the codebase of forem. 🌱
This period every fellow uses mostly for the intensive code contribution. Don't worry, you're not left alone, mentor and core maintainers will be there to help you. How the whole code contribution flow goes:
- fork the project, clone it and explore the codebase
- you get an issue to work on (core maintainer, mentor and yourself choose this or you can choose alone from the list of available issues)
- you code (and ask for the advice and hints if you got stuck) from your mentor and/or someone from the core team usually
- you have meetings with the core team where you can ask them and clarify your doubts
- you make a PR which is reviewed by your mentor and additionally from someone from the core team of the open-source project
- usually, you get some things to change (refactoring, code flow, additional checks, performance tips, design etc.)
- fulfill the requirements from the change request
- PR got approved and merged 🎉. Piece of cake hah 😂 (just kidding) I want to emphasize that every open-source maintainer is very helpful and their goal is you make a good contribution. The point is not about how good and experienced programmer you're or how many mistakes you make. It's about your progress and will to learn and grow. It's about your desire to contribute and help the community, it's about your growth and growth of the open-source idea and philosophy in yourself. So, learn, code, ask for help and help others ➿
Another hackathon, yep. This hackathon is not about getting familiar with the open-source projects you could potentially use in your contribution. The goal (at least in my batch) was to create something that will be useful to the community (MLH preferably) - to help MLH fellows with their experience (to make things easier and overall experience smooth), to help fellows learn and grow, to help them share their knowledge, to help them find a good issue to work on, .....
A lot of things you can work on. Of course, you create a team (preferably cross-pod), code and again winners get some cool swags. Very simple 😉
This period is very same as the weeks 4-7 period. You'll work on the open-source contribution actively.
In the last week, you'll polish your PRs and make them ready for merge. The main event is the MLH CTF challenge - a bunch of cool security-oriented challenges for every experience level. You can check out more about CTF challenges on Google.
As I said earlier, we had two meetings every week. In every meeting we had a standup notes review and one additional thing besides that:
- In our first meeting every week we had a panel discussion about various topics - work in startup vs work in big company, online vs on-campus education...
- in our second meeting every week we had a Show and Tell session - every week one of the fellows from the pod (or pod leader) prepare a lesson for us. That's the way to share your knowledge and expertise (but also your interests) with other fellows. Learn in every step.
Besides pod meetings, there are other meetings you should attend:
- meeting with your pod leader - your pod leader is your advisor and your SOS man. If you have any problem (setup your local env, face any logistic problem, have some suggestion or problem), pod leader is the person to address. You can arrange a meeting with your pod leader anytime. Arsalan, my pod leader was really helpful and he did his job very successfully. He was there to help, give a piece of advice and be the mediator in the communication. Also, he was very relaxed and brought a lot of fun to our meetings. Shoutouts to Arsalan 👏
- meetings with your mentor - a mentor is the person you'll regularly meet when you want some help or advice on how to solve something, to review your code, and help you with your issues. Mentors are always willing to help, they're experienced and they will be there to assist you. Also, they can help you with your resume polishing and give you some career advice. Use that opportunity.
- meetings with the core team of your project - these meetings occur on weekly basis. In those meetings, you'll discuss your issues, how to do something, in which direction to move your code flow, to sync with your ideas and thoughts. You must admit it is very cool to speak and collaborate with the guys who created a thing that is used by so many people (developers) mostly. I had an opportunity to talk to Ben (@ben ) - the lead dev and founder of the DEV project and Christina (@coffeecraftcode ) - the community manager. They're great people in the first place and they were very helpful and friendly. They gave us good direction and they were always ready to help. Shoutouts folks 👏
- meetings with other pod mates - this is a really great opportunity to find out more about these people, about their lives, their personalities, their skills and interests. You'll work with them for 3 months. In my pod, all of them (us 😄) were great. We had a people from Nigeria 🇳🇬, India 🇮🇳, Pakistan 🇵🇰, Zambia 🇿🇲, Haiti 🇭🇹, Bulgaria 🇧🇬 and Serbia 🇷🇸 (myself). Diversity at your palm 🙏 🙌 . Do not miss a chance to talk to your pod mates 1-on-1 (as many them as you can). My pod name was Fantastic Falcons. You can checkout our website here. Shoutouts to @pragativerma18 for the work she did making this website 👏.
cross-pod meetings - there were a few cross-pod meetings where you can meet pod mates from other pods.
MLH Fellowship = code + connect
Imposter syndrome - many fellows face this. Am I good enough, am I left behind, did I make the least PRs in my pod....
Simple advice: relax. Everyone's facing some problems at the beginning. Do your best and if you face any problems, look for help. Discord (way of communication during the fellowship) chat inbox of every fellow, mentor, pod leader, or MLH staff is ready to accept your message. Don't be afraid to ask. Personally, I tend to do things on my own, to find the solution myself, because in that way I learn the most. But, don't spend a whole week on some problem, if you cannot solve it on your own (with the internet help ofc), ask for help.
Time management problem - yeah, the biggest problem. You'll face this no matter your time commitment mode (part-time or full-time). Univesity obligations, exams, teaching assistant duties (in my case), part-time job, personal things... + code contribution + meetings. Many things at the same time, so this is completely normal. Everyone's facing that. First of all, make your schedule and try to find the best option for your organization. Generally, that is a problem you'll be facing all the time. Job, family, learning new things, hobby. Get used to that. ⌚
Code vs other things - my advice: code, code, and just code. Naah, just kidding. MLH organizes a lot of useful workshops and Q&A sessions. It is hard to manage your time and attend all of them (which would be great). But, attend at least some of them. I attended a few sessions and it is very cool to be able to ask the React core team from Facebook things you want to know. It's not just about the coding. The time you have (20 or 40 hrs) is the time you have for all of your MLH activities - coding, meetings, workshops...
Talk and let others talk - in your meetings, don't be afraid to say something and share your opinion. Be respectful and polite. Let others share their opinion and if you disagree, tell that, but be kind and respect other thoughts. We had a great activity regarding those panel discussions. We shared our opinions and discussed cool themes. We did that and we made fun. Our pod had cool people and we made fun of every activity. I'm sure every pod had that. Also, this is a great exercise for public speaking, it will help you with your self-confidence and it is a great way to get rid of your public speaking fears.
Learn - the overall goal of this fellowship (like every internship) is to help you level up your skills. So, learn, learn by doing, learn by reading, learn by experimenting. During the fellowship, I had gone through a few courses. Besides that, I have learnt Ruby on Rails and not by making TODO app, but by contributing to forem (dev.to) codebase which is really big. And also, when you're working on open-source, you'll definitely become very versatile with git and GitHub. Before this fellowship, I used git for all my projects (private and commercial), but I had never worked before on a project with more than 7800 commits and 15800 forks.
Open-Source contributor after the fellowship - one of the goals of this fellowship is to spread the open-source way of thinking. It's not about doing the job and pack your suitcases. Stay in open-source even after this fellowship (at least, try doing that). I'll do my best doing that.
@ben and @coffeecraftcode for the help and guidance they provided, their support and patience they showed 👏. Also, I want to shoutout @rhymes for his code reviews and useful guidelines during the coding - very concise 🌱. Forem (dev.to) community is lucky to have you.
In the end, I would like to give shoutouts to Arsalan (@khattakdev
) for his guidance and help he provided and other pod mates for a great time spent together. It was a pleasure working and having fun with you. Maybe one day, we'll collaborate on some other open-source or commercial project together.
That would be all. I hope this article will help you with your fellowship journey. If you have additional questions, feel free to reach out (preferably via Linkedin).
P.S. Happy holidays 🎅 🎄
P.P.S Happy hacking 🧑💻