It’s that time of the year again! I did not manage to write a recap about my 2018, so I’ll include some reflection about that year in this post as well.


I joined Igalia in 2018, and entered the Igalia Assembly in 2019. It’s amazing to work in a cooperative that makes all its decisions based on consensus. I have learned a lot from my fellow Igalians, especially on coordination, communication, and dealing with all kinds of tricky situations that a consensus-seeking organization may run into.

For the past year I have been working on various aspects of Node.js, including refactoring the bootstrap of Node.js core, embedding pre-built V8 code cache and V8 startup snapshot into Node.js binaries to improve the startup performance, porting and maintaining the WPT runner for Node.js core, and improving profiling and native memory tracking facilities. There is still plenty of work left to be done and I am looking forward to spending more time on it next year.

I have also been contributing to the implementation of language features and the embedder API in V8, and I became a V8 committer in 2019.

It has been fun hacking on various parts of these codebases, improving my design doc writing skills, and collaborating with many insightful reviewers. I am very grateful to Igalia and Bloomberg for supporting my work, and also to all the Node.js collaborators and V8 reviewers for helping me through all these patches.

Travels & events

I tried to reduce my travels this year and to no surprise, I failed.

In January I gave a talk at D2 about how llnode works by reverse-engineering the V8 heap layouts. After attending D2 for booth duties as an Alibaba employee for three years, I finally gave a talk there, even though this time around I no longer worked at Alibaba. D2 had dialed down its Alibaba-ness a lot since this one, and it definitely improved a lot in many regards from my perspective.

In March I attended the Node.js diagnostics summit in Google’s Munich office. This was my first time travelling to Munich, which was quite different from Berlin, the only other German city that I’ve been to. As a result of the discussions at the event, I added the --cpu-prof (as a replacement to --prof which was less supported compared to V8’s CPU profiler) and --heap-prof flags to Node.js for ease of profiling.

In April I gave a talk at the Bytedance office in Beijing on how to contribute to Node.js core, and mentored a Code+Learn session there.

In May I travelled to A Coruña for the Igalia Summit where I had a lot of fun meeting other Igalians. After that I went to Berlin for the Node.js collaboration summit and JSConf EU. At the collaboration summit, I gave a talk about what I had been working on - refactoring the bootstrap of Node.js core. I also gave a talk at JSConf EU on Web APIs in Node.js core (covering the work of many others and with the help of reviews from some of them). JSConf EU has been a very special conference to me and it was a great honor to finally be able to give a talk at this conference. It was amazing to realize how much I’ve grown since the first JSConf EU I attended in 2017.

In September I gave a talk at Node Subway about the bootstrap of Node.js in Chinese. This was my first time giving a talk at a tech meetup in walking distance from my apartment. I also attended my first W3C TPAC this September in Fukuoka and learned a lot about the working modes of different groups contributing to the Web Platform.

In October I travelled to A Coruña for the Igalia Summit and Web Engines Hackfest. I also gave my first talk at Web Engines Hackfest with my coworker Caio Lima on the implementation of class features in V8 and JSC. This was my first time giving a talk as a co-speaker, and it worked much better than I expected (thanks to the reviews from Caio and my other coworkers!). It was very fascinating to learn about how JSC and V8 differ specifically in language feature implementations when preparing for the talk - unfortunately the information we could squeeze into the talk was quite limited.

In November I mentored another Code+Learn at the China Open Source Conference in Shanghai. Before the session I also gave an introduction to the codebase and the workflow of Node.js core, with the help of several other Chinese Node.js collaborators who were also there as mentors. Unlike most conferences I’ve been to, there was very little content about JavaScript or Node.js at this event, and it was great to learn about the perspectives of other open source communities.

In December I gave a talk at Node+JS Interactive in Montreal about… once again, the bootstrap of Node.js - though this time the talk was guided by the process model of Node.js, and I only briefly mentioned what had been changing in the codebase. This was my 4th talk at Node(+JS/.js) Interactive. I also attended D2 in December and was happy to just chill in the audience and chat with other Chinese developers again.

I attended three TC39 meetings in person this year, all co-located with other trips of mine. I am not quite a language design person, and was there mostly trying to provide feedback as someone who contributes to Node.js and V8, but I have learned a lot from other delegates about the stories of many existing features that I’ve been interested in, as well as many different use cases of JavaScript. It was also interesting to learn more about how standard bodies work in general.

Other than open meetings and conferences, I also met with several teams in different companies and learned a lot about how people use the project I work on, how they work within their organizations, and their efforts to reach out to open standards and the open source community. It was an amazing experience talking to different developers around the world, and it also certainly helped me in many regards other than tech.

I went to Hong Kong and Sanya for vacation this year. Both were pretty good. I also learned that Hainan used to be part of Guangdong, so technically I have just been in the Greater-Guangdong region for vacations? :P


I’ve been improving my Korean this past year. Even though I still have trouble reading Hangul (but it works much better if I ask Google translate to read it out loud for me… even without reading the translations), I am more comfortable with watching Korean videos now. I also won the Korean culture contest hosted by my Korean coworkers at the fall Igalia Summit (I got 12 quizzes right out of 15). On the other hand I still need to pay more attention on keeping my Japanese from getting rusty - but I did speak some Japanese while I was in Fukuoka this year for TPAC, and I was quite comfortable reading and listening to Japanese while I was there.

I am still struggling with getting my Cantonese back on track. I now realize that I am afraid of speaking Cantonese simply because I tend to get the consonants or vowels wrong due to the influence of Mandarin, even though I almost always get the tones right because of I’ve picked up enough of those when I was a kid. So I’ve been trying to use Jyutping to correct my pronunciation.

I have also been slowly developing my Spanish during the past year. When I read Spanish wikipedia it’s not completely cryptic to me any more - at least I can try to guess about things and it sort of makes sense when I read the English translation. I know it’s not efficient to learn a language with tons of guesswork, but it’s fun to me and that’s all that matters.

I have been working almost completely in English since I joined Igalia. Strangely enough I think I have been making more English mistakes since then. I guess I was more cautious when I used less English, but now that I use English for work all the time, knowing that people I work with don’t usually care about English mistakes (and many of them are not native English speaker either), I start to let go and liberally make all sorts of mistakes. I also speak English much faster than I used to, partly because people I work with tend to speak fast so I picked up the speed, partly because I am now more confident when speaking English - and alas, speaking fast also leads to more mistakes. I have been chatting with people from different backgrounds on many subjects other than tech (e.g. languages, culture, history, and even politics!) this year, which made me realize I still struggled a lot when talking about these topics in English, though fortunately everyone I chatted with was very considerate and open-minded. Hopefully my English will improve next year on this front.

My Health

I think I’ve been doing great as far as mental health goes for the past year. My body fat percentage is still in an unhealthy range, but I did manage to lose some weight this year. Several people I met at D2 in December commented that I looked thinner compared to what I looked like at the D2 in January, so that’s a good sign I guess. There are more alarming things on the report of my annual medical checkup this year, but there’s nothing really dangerous, and most of them are common for programmers/women at my age anyway.

I caught a serious cold - probably the most serious one in my life - in September, probably because I went for a walk by the beach in Fukuoka without my jacket. I took several flights in the following weeks in the U.S. which made it much worse than I expected. In retrospect I should’ve taken my friend’s advice and at least went to the pharmacy for medication when the cold lasted for more than a week, but I got cold feet in the end since I was in the U.S., whose medical system was quite alien to me. The infection eventually got to my ears, which had never happened to me before. I went to the doctors as soon as I returned to Hangzhou and got cured fairly quickly after taking some antibiotics. I guess my take away from this are:

  1. Go get treatment immediately if the cold lasts for more than a week, even if you are in an unfamiliar place - I was in Cary visiting my friend at that point, but then come to think of it, I at least had company!
  2. When having a cold, avoid flights and wear ear plugs if you have to travel by air.