Growing as a developer through the MLH Fellowship
Tags: opensource, reactnative, mlhgrad, github
Published: 2020-08-20 15:30:26

[Introduction/comment]: # (All of this is placeholder text. Use this format or another of your choosing to introduce your story and/or the technical details of participating in the MLH program!)

"How much you learn from this program will be a function of how much effort you put into it." -- [Jani Eväkallio](https://twitter.com/jevakallio), 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](https://fellowship.mlh.io/). 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.

![This is my PR at the end of the fellowship to the React-Native-CLI](https://dev-to-uploads.s3.amazonaws.com/i/krhcsdqqyg6c6xesr3u5.png)
<center>*This is my [PR](https://github.com/react-native-community/cli/pull/1246) at the end of the fellowship to the React-Native-CLI*</center>

## How did I get started with the MLH Fellowship
[Note]:  # (What led you to participate? What were some of your anticipations and what was the reality? What did you learn from code-reviews? What were challenges and wins? Etc.)
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

[Note]: # (Our markdown editor supports pretty embeds. If you're sharing a GitHub repo, try this syntax: `{% github link_to_your_repo %}`)
The fellowship's duration is 12 weeks, two of which are Hackathon weeks (a signature feature of MLH :wink:) 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](https://github.com/facebook/hermes) in a [React Native](https://github.com/facebook/react-native) app. I worked with my teammate [Saphal Patro](https://twitter.com/saphalinsaan) under the guidance of [Parashuram N](https://twitter.com/nparashuram), who is the project manager from Facebook and [Jani Eväkallio](https://twitter.com/jevakallio), 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](https://developers.google.com/web/tools/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](https://www.npmjs.com/package/hermes-profile-transformer), so go check it out!

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/ryv3ic6oywo1oonou8sd.png)
<center>*Screenshot of a transformed Chrome performance profile*</center>

In addition, we added a new command to the [React Native CLI](https://github.com/react-native-community/cli) that converts and pulls the profile to the local machine. The command will land soon within 1-2 weeks once our [Pull Request](https://github.com/react-native-community/cli/pull/1246) 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](https://github.com/taneliang/stack-attack) started from a small project that my teammates [E-Liang Tan](https://twitter.com/taneliang), [Manya Agarwal](https://twitter.com/manya_ag), [Saphal Patro](https://twitter.com/saphalinsaan) 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 :rocket:

### 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 :sweat_smile:. 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 :rocket:
- The coding process started with diving into the giant codebases, including [React Native CLI](https://github.com/react-native-community/cli), [Speedscope](https://github.com/jlfwong/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 :tada: 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.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/lwh29auwmi3o9e73f8ze.jpg)

## 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 :satisfied:) -- all the people in my Pod :tada: All the 10 members plus Big Jani make the perfect team, or should I call a **family**, after 12 weeks :heart: 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 :joy:. All of these experiences have made the very memorable Fellowship that I couldn't have asked more of :pleading_face:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/mjxf9o8xqfvo6fhdy8ae.png)
<center>*My pod at a weekly retrospective*</center>


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 :sunglasses:

**Good news**: The MLH Fellowship is coming back in the Fall, Spring & Summer and [application](https://fellowship.mlh.io/) is open NOW :tada: Feel free to [contact](https://twitter.com/jessie_anh_ng) me for any questions about my experience! 

**Thanks for reading!**

[Final Note]: # (CONGRATULATIONS on your MLH graduation!!! You rule!)