"How much you learn from this program will be a function of how much effort you put into it." -- Jani EvΓ€kallio, my mentor at the MLH Fellowship
My mentor, or by how my pod dearly call him "Big Jani", said this to us at the beginning of the MLH Fellowship. Now that nearly 12 weeks have passed and our program is coming to an end, I truly grasp how this sentence sums up my amazing experience being in the inaugural class of MLH fellows.
Summer 2020 has been one of the most life-changing experiences for me thanks to the MLH Fellowship. I got introduced to the world of open source and learned so much about real-life software engineering skills and personal development.
This blog is about my journey, growing from a computer science student with little knowledge about large-scale development to an open source contributor who enhances a framework used by millions around the world.
How did I get started with the MLH Fellowship
I applied to the MLH Fellowship in early May, a month after receiving the news that my internship was cancelled due to COVID-19. The program immediately drew my attention because of the scale and impact of the work that fellows will conduct. The open source projects that would participate included React, Jest, Homebrew, etc. In addition, students would be mentored by experienced software engineers who have been working extensively in the open source community.
After passing two rounds of interviews (behavioral and technical), I officially got selected for the program along with over 100 other students from around the world. I felt extremely proud and excited for the program to start in June 1; I remembered sharing the news via a LinkedIn post and eagerly connecting with other fellows.
Which project did I contribute to during the Fellowship
The fellowship's duration is 12 weeks, two of which are Hackathon weeks (a signature feature of MLH π) where we team up 3-4 fellows to work on a project of choice. The rest 10 weeks is time for contributing to our main open source project.
I worked on React Native Hermes Sampling Profiler, which is towards the goal to visualize the performance of JavaScript running on Hermes in a React Native app. I worked with my teammate Saphal Patro under the guidance of Parashuram N, who is the project manager from Facebook and Jani EvΓ€kallio, my mentor at the Fellowship.
In this project, we wrote a tool that transforms the Hermes profile to the Chrome event tracing format. This allows developers to use Chrome DevTools (the Performance tab) to visualize their app's sampling profile, thus understands which function takes a long time. The tool has been published an an npm package Hermes-profile-transformer, so go check it out!
In addition, we added a new command to the React Native CLI that converts and pulls the profile to the local machine. The command will land soon within 1-2 weeks once our Pull Request is merged! This will enhance the experience of thousands of developers who are using React Native as the mobile application platform.
What are the challenges and learning points from the 12 weeks
1. Open source collaboration on GitHub
This summer was the first time I contributed to open source, so I was not familiar with the open source practices and collaboration on GitHub. MLH Fellowship gave us an introductory course to Git and GitHub at the beginning of the program, through which I polished my git knowledge. I also got used to multiple components such as PRs (pull requests), issues, kanban project boards, etc. while doing the projects.
Another opportunity that enabled me to learn a lot about how git works was through doing Stack-Attack. Stack-Attack started from a small project that my teammates E-Liang Tan, Manya Agarwal, Saphal Patro and I worked on for the Halfway Hackathon. We decided to continue the project after the hackathon as a lot of people were interested in using the tool for stacked PRs. Thus, we've been working hard and expect to ship the tool in 1-2 weeks π
2. Sampling profiler
We started our main project from the second week by meeting the project maintainer, asking for more details, getting familiar with the tools involved (Hermes and React Native in my case). The first challenge that my teammate and I encountered was there was not a lot of documentation on how Hermes sampling profiler works. We needed to make a number of assumptions and try different approaches to process the profiler. I remembered we did not accomplish much the first 2-3 weeks of the project, spending time understanding the structure of the Hermes profile.
After some exploration, starting from week 4, we decided to have weekly meetings with the project maintainer from Facebook (Ram and Neil). We got a lot of questions answered about whether our assumptions and approach are in the right direction. We learned an important thing about open source through this: communicate frequently with the project maintainers to avoid getting down the rabbit hole. If they don't give a definite answer, they may help connect you with other people.
3. TypeScript and writing clean code
- Before the project, I was not very familiar with TypeScript; I was coding primarily in Java and C. Then I came to know the entire codebase is in TypeScript π . I talked to my mentor as well as my teammate about this, who then both told me it would be a steep learning curve but they trusted I could do it π
- The coding process started with diving into the giant codebases, including React Native CLI, Speedscope, etc. and understanding their structure, functionalities, and coding conventions. This step helped me get used to the language and the requirements of the project I was contributing to.
- A huge support I received was pair programming and code review sessions with my mentor Jani. I remembered all the 1-2 hour sessions where Jani helped me understand asynchronous programming, break up giant functions into small utility functions, and reviewed my PR line by line. I am extremely grateful for my mentor and want to give the biggest shoutout to him π I've improved my coding skills a lot so that it is up to the standard and convention of open source.
4. Personal branding and soft skills
Besides technical knowledge, a huge gain from the MLH Fellowship is soft skills for developers. Throughout the program, there are multiple talks, roundtable discussions, or even casual conversations on teamwork, personal branding, working remotely, etc. These discussions have given me useful takeaways for my journey as a developer.
Specifically in my pod, my mentor has held roundtable discussions on topics such as "Developer Twitter and personal branding", and "Software developers communication skills". We all joined to talk about our perspectives on the topic, as well as listened to our mentor's tips from his experiences. I've benefited a lot from these sections as those personal development skills though not mentioned at college are essential to our growth as developers.
Other thoughts && feelings
Woohoo, so you've reached the end of the blog. Here I'll disclose the thing I love most about the MLH Fellowship (all the above things still count though π) -- all the people in my Pod π All the 10 members plus Big Jani make the perfect team, or should I call a family, after 12 weeks β€οΈ 11 individuals with different backgrounds, talents, interests but share a common thing: a great team spirit. I'll always remember the support I got while presenting in our Show & Tell, the late night bug fixing with Saphal, E-Liang, or the watch party of the Halfway Hackathon which Stack-Attack ended up winning π. All of these experiences have made the very memorable Fellowship that I couldn't have asked more of π₯Ί
Last but not least, I want to thank the MLH crew for working so hard to make this amazing experience for all the fellows. This has been a truly productive and fun summer, we've been able to learn so many new things and meeting a lot of awesome people π
Good news: The MLH Fellowship is coming back in the Fall, Spring & Summer and application is open NOW π Feel free to contact me for any questions about my experience!
Thanks for reading!
Top comments (6)
Congrats Jessie!
Tell me did you at any point deal with imposter syndrome? If you did how did u manage it?
Hey, thanks for commenting! I would say yes, I did have imposter syndrome at the beginning of the project. That was when I wasn't familiar with both TypeScript and the sampling profiler I was working on.
I dealt with it by constantly learning, listening to people's feedback and self-congratulating whenever I improved or finished a task. I think the most effective thing was maintaining a positive attitude and thinking that it'd be a learning experience rather than something super competitive or result-oriented! Hope that helps!
LoVe thisπππ
Do you mind if I use your comment in a blog post. Here is my blog jackiebinya.github.io/
I want to write an article about dealing with imposter syndrome.
Hey yeah absolutely, feel free to include it! That sounds exciting, let me know when you finish the blog π
Sounds great :-) However, I think it would be great to support small Open Source projects somehow, as the bigger projects are mostly sponsored by big companies.
Yeah I agree, every contribution to OS projects, whether it's a big added feature or a small documentation tweak will be greatly appreciated! And similarly, there shouldn't be "trending" or big projects only that developers contribute to.