I decided to write a recap of my 2017 because looking back, it was a very important year to me.
I got involved with the Node.js project in 2016 (I was a Node.js user previously, but had not been a contributor until then). In 2017, I started to contribute to Node core and related projects regularly. I was nominated to become a collaborator at the end of 2016. I was a bit surprised to find that my first PR submitted in 2017 was my Node.js core collaborator onboarding PR, which added myself to the README of nodejs/node. (The most important part of onboarding, however, is getting invited into the @nodejs/collaborators team, which also gives you access to the CI. The onboarding PR is more of a formality).
In May I was nominated to become a member the Node.js CTC (Core Technical Committee). Later CTC was merged with the TSC (Technical Steering Committee), so I am currently a member of the Node.js TSC.
These titles may sound like a big deal, but when you start to hang out on the issue tracker regularly, they basically just mean the people behind them are willing to spend enough time working on this project - not just submitting PRs, but also reviewing code, mentoring new contributors, triaging issues, investigating CI flakes, doing backports and releases .etc.
Maintaining a big open source project is time-consuming, and it’s hard to seek consensus in a project without a BDFL (I learned this term from fellow TSC member Myles Borin’s talk Open Source Governance Models: From BDFL to Consensus Seeking, which was an amazing). I have learned a great deal from other Node.js contributors in 2017, not just about the technical nitty-gritties, but also about sympathy, communication, and self-care.
In general, the Node.js collaborators is a group of friendly people, we have our differences but we usually try to be nice to each other and respect each other’s opinions. Node.js was the first open source project with a big community that I’ve gotten involved with, so I basically just watched and and followed what other people did on the issue tracker. Here are some important things that I’ve learned that are not obvious from simply looking at the code changes:
Reviewing takes time and energy, especially when it involves a big diff, so be patient when you ping people for reviews, and thank your reviewers when the PR lands.
When you just get started with a project, it’s easy to feel like an outsider and get disheartened when the reviewers (i.e. insiders) appear to be dissatisfied with your changes. For PRs submitted by new contributors:
- Be careful about putting the big red cross of “Changes Requested” on PRs. If you are not going to block it, use “Comment” instead.
- Try not to submit nits (nit-picking reviews, e.g. style nits) if it’s really not a big deal.
- Greet them in your first review, thank and welcome them when you land their commits.
- Use a softer tone when you request changes, do not appear to be commanding. Specifically, say things like “Can you”, “Please”, “May I suggest” more often. Be more concrete about what you have in mind if they seem to be unfamiliar with the project.
For example, it’s totally OK for a non-native English speaker to submit significant changes to the English documentation, although I don’t think there are a lot of people aware of this. I am not a non-native English speaker, and I come to heavily rely on my fellow collaborators to correct my language mistakes during the review process, even though I try not to make them with my best effort.
When I encourage other Chinese developers to submit PRs, I often get responses like “but my English is not good enough”. Well, it really isn’t a big deal, everybody can learn English with enough training. Submitting PRs and addressing reviews are great ways to learn technical English. I had a course dedicated to English technical communication in college and I so wish we could do documentation PRs to large OSS projects back then.
To make changes to code you are not familiar with, good debugger skills and googling skills can get you a long way. I used to start with reading the code (a lot of people trying to contribute also tend to do that), but usually to fix something all you need to do is coming up with a test case, and following the relevant code paths using a good debugger. Most of the times you don’t really need to read through 100K lines of code in order to make changes to a specific code path and get the code behave as you would like. The code base is much less intimidating if you focus on what you actually need to touch.
I have been to several conferences and events in 2017:
- May: Attending JSConf EU & Node.js collaboration summit in Berlin
- July: Attending JSConf China and mentoring a Code-and-Learn session there in Shanghai
- October: Speaking at Node.js Interactive North America and attending another Node.js collaboration summit in Vancouver
- November: Speaking at NodeFest in Tokyo
Travelling to another country takes a lot of energy, but looking back, I would say it’s worth it because whenever I came back from a international conference or meeting, I always brought back a list of important things to do and became very motivated to clear my backlog. I have learned that maintainer’s burnout is real in 2017, and travelling does help with that. Meeting and talking to other contributors in person also help you move things forward in a way that’s not possible on Github.
I was on the Speaker’s Committee of NINA 2017, and I learned how the blind review on conference talk proposals works. It was interesting to see things from another angle of a technical conference.
I don’t think I’ve talked in English to a person for more than ten minutes in total before I went to NINA 2016, and it was my first time travelling to another country when I gave the my first conference talk there - I didn’t even have a passport before I confirmed I was going! But in 2017, I would say I almost used English as often as I used Chinese. Even though I live in China and work in Chinese during the day, I need to read and write English on the issue tracker almost everyday, and I did travel to three countries in 2017 where I used English to communicate with others.
It was amazing getting to know people from completely different countries i.e. completely different cultures, and working with them regularly. I never would’ve believed if five years ago (roughly when I stared college) you told me that one day, I would collaborate with foreign strangers online to make a piece of free software better. But this is what I actually do everyday nowadays, and it is what I am passionate about.
I was surprised by my ability to chat with random strangers when I was at JSConf EU. I was really shy in NINA 2016, but in JSConf EU I didn’t have much trouble greeting strangers and talking with them about random topics. I think one of the reasons was that there were so many women around in JSConf that I felt much more comfortable to socialize. That and also I became more comfortable talking in English with enough practice on GitHub. I was also less quite when I was in NINA 2017 and NodeFest Tokyo, partly because I already knew a few other attendees and hanged out with them.
I started to learn Japanese by myself when I was in middle school (almost ten years ago) because of a fandom, and did a lot of translations of Japanese articles, radio shows and TV shows when I was in high school, but my Japanese has become rusty since college. I had to use English to get services when I travelled to Tokyo for NodeFest 2017, mostly because I was afraid of using keigo wrong and offending anybody, but I was glad I could still understand most of the Japanese talks that I’ve attended.
I also started to learn Korean in 2017. CJK languages are very close to each other, so Korean becomes the lowest hanging fruit once you know basic Chinese and Japanese. It’s actually a lot easier to learn than I imagined, because Korean is very similar to Japanese grammatically, and CJK languages share a lot of vocabularies so I can guess a lot of stuff by just reading Korean out loud. The most difficult part for me is learning to read Hangul efficiently - it’s very easy to learn how to read Hangul itself, since it’s just a simple alphabet, but it takes a lot of practice to read it fast enough. It feels very much like reading Chinese in Pinyin, which has always been awkward for me.
Learning a foreign language helps me to be open-minded and not get fooled by the fake news. There are so many fake news about other countries in SNS nowadays, even when it’s easy to tell they are fake once you know how to google the keywords in the right language. Reading about people from another country in their own language also helps me get rid of some prejudices that I am not even aware of.
2017 was probably my hardest-working year in my life. Outside my day job, I was constantly on Github, so I did not have much time taking care of myself for a while. I was the most active on Github during the Chinese New Year in 2017 (if you don’t know what it is, think of it as the Chinese counterpart of Christmas), and that was definitely not a good thing.
Depression runs in my family. I have close relatives who killed themselves due to depression from both sides of my family, and there are more people taking pills. I was mentally miserable prior to my college graduation in 2016 and it took me a lot of effort to get myself back on track. So in early 2017 when I noticed similar signs again I started to take it seriously and stopped being active on Github for a while, just to give myself a break. I don’t think it’s related to my Github activities, however, the symptoms just appear when I work myself too hard - although it didn’t help that I could not do much open source stuff in working hours during that time, so I practically had to double my working time if I wanted to take care of both sides.
I did a lot of hiking around Hangzhou and visited a lot of local cafes & restaurants on weekends during the summer, and that helped me maintain my mental health in a peculiar way. I wrote 150+ reviews for different local cafes & restaurants and it’s fun to watch how my taste changed in 2017. I am happy to say that I am pretty healthy mentally these days.
At one point in 2017 my BMI and BFR reached unhealthy levels so I decided to control my diet and started to workout.
I designed my diet and workout routines after reading a textbook on nutrition and a textbook on exercise physiology - I like reading textbooks, also I read the English ones to improve my English, sometimes it feels like learning high school biology again in English texts. The plan was actually more about living a healthy life than losing weight, and I made sure I eat at least three meals each day with healthy ingredients - say, I would stay away from anything fried, but I would not mind eating boiled corns or sweet potatoes (and they are surprisingly tasty) as long as my calories intake is within a desired range at the end of the day. That way I usually would have to eat more vegetables to get the nutritions I want. I also started to eat less red meat because it is a known factor of colon cancer, which happened to one of my family members, although all I need to do is to eat chicken or fish when I have a choice.
I grew about 5kg in early 2017, then lost about 9kg, but subsequently grew 5kg back because I suck at self-control during the winter - so yeah, I am still a little bit unhealthy according to the numbers, but I am also pretty confident that I can start losing weight again when the summer returns.