Get these notes delivered to your inbox:

Hey friends!

It's been a long time (over a month) since I wrote some notes, and I think I've learned quite a bit since then.

The biggest thing that happened was that I spent 30 days, spanned across October and November doing a 30 day challenge to write every day. While my "weekly" (err... monthly?) notes are nice, they aren't meant to have much of a shelf life - if at all. I love the conversational style of these notes, but they don't age well on the internet. In contrast, articles stay relevant for far longer. Sigh, the medium is indeed the message.

In those 30 days, the plethora of articles I produced allowed me express myself across multiple dimensions:

The result? I feel more comfortable online. In the past, when I only had a few pieces of writing on the internet, it felt like each article had to represent me. Like the minority in a group discussion when the topic suddenly stumbles to race and all eyes turn to them to give a portrayal of "the Asian perspective" (as if there is a singular, united opinion), each article felt like it had to be a great "ambassador" to everyone who was stumbling on my website for the first time.

I cringe when I see some of my old pieces in isolation (for example, some random thoughts on Airpods), but combined with the 30 articles I wrote this month, they form a nest of ideas that authentically represent who I am.

Now, being a complex individual online is bad branding. For example, Kent Dodds is primarily "The Mormon who teaches React Unit Testing". I know nothing else about him, other than his courses outside of unit testing and snapshot testing are also quite reputable.

Branding benefits from focus.

But I'm not trying to grow a personal brand, per se. I'm trying to live a life of self expression.

Which brings us to the topic I want to write about today

Self Expression

But to express oneself honestly, not lying to myself, and to express myself honestly - that - my friend, is very hard to do.

-Bruce Lee

Over the last few days, I've been thinking about this quote from Bruce Lee quite a bit. In part because I'm trying to incorporate multiple different sides of myself in whatever it is I do "next".

In my previous jobs, especially at Uber - which is the largest company I've worked for, I felt a certain confinement. Even though my managers were great and supportive, there's something in the atmosphere of tech that just seemed to tell me "You're only an engineer. Strive to become a Senior Engineer, and then a manager, and fulfill your destiny".

I actually think that might be a fine outcome, but I don't like the path I was taking to get there. Something felt off, and I couldn't quite put my finger on it. It was as if I had joined Uber by convenience (although, let me tell you, the job search is anything but convenient), that there were forces beyond my control which guided me into a job where I didn't find an honest expression of who I am.

And that led me to quit in January. For the larger part of pandemic-dominated 2020, I built projects and products with Nick. Some of these were honest attempts at self expression:

  • Software Mentor
  • Summer of Shipping
  • SpaceTime

Others were not, and the outcome felt pre-ordained:

  • With Feather, I didn't feel like this was the right expression of what I needed to do. And sure enough, the universe conspired to expose that pretty quickly

My 30 day writing challenge created no real benefits. I didn't suddenly see a rise in traffic to my website. I didn't create anything insanely popular. But I did manage to make myself comfortable. I know now that whatever I do next will balance all of those dimensions of myself (scroll back above to see a list of some of those dimensions)

And so, here's what I'm looking for in whatever I do next:

  • Something or some place that empowers Asian Americans to be comfortable and proud of their heritage. No need to erase yourself to fit in America. That might have been necessary in 1920, or 1980, or even 2010, but 2020 is time for a new consciousness
  • Thoughtful Software - at some point, I realized that it's not clean code or high quality code that I really care about, it's about thoughtfulness. Engineers who are empathetic to both the human and the machine are exceedingly rare.
  • Self esteem - I personally believe that one of the greatest deficiencies on the planet is self esteem. It's like we're missing the world's most important vitamin and everyone's getting sick from insecurity. I love to teach because it raises self esteem. I focus on productivity because it reinforces (or detracts from) self esteem. I care about racial issues because racism attacks self esteem. Whatever I do, I hope I will either directly or indirectly be able to raise self esteem in others
  • Optimizing for flow - there's something sublime about flow states. When you're immersed in a task, in full focus and flow, it's almost a religious experience. You achieve great things when in flow. I believe that we should optimize for "time in flow". Things like meditation, self esteem, mastery all help us get there. I suspect that minorities have a more difficult time to get in flow when they're uncomfortable or feel marginalized. It's a barrier to flow. Really, if you look at all the above points, you'll realize that they all lead to flow.

That last one is weird. Not many people see things this way, and I agree it's a weird mission to optimize the world for getting people into flow states. But if you see flow as an emergent quality that occurs when Maslow's hierarchy of needs is properly satisfied, then you really see that optimizing for flow is a rather humanist philosophy.

So, that's how I'm looking to express myself right now. I'm sure my views will evolve, but this is where things stand at this very specific moment. And whatever I do next, it will be based on expressing those values.


I didn't want to end this week's note on something so deep. I also wanted to discuss something light hearted.

Some of you might have heard, but I'm getting more and more fanatical about Typeracer. I recently just surpassed 4000 races and wrote a reflection about my progress.

In that post, there are graphs that look like this: Typeracer graph

Well, those graphs are a huge pain in the ass to make, because I download data from Typeracer as a CSV, go into Google Sheets and make a graph every now and then. It's a process that easily burns 3-5 minutes every time I want to update my results.

But recently, I realized that the Typeracer API is pretty easy to use, and it's possible to get this data programmatically!

Behold, a tool that plots the moving average of my typing race data! (link)

The UI looks terrible right now, but it's effective. But there are benefits to doing this programmatically beyond the time savings. In addition to my own data, I was able to pull data for other racers:

What's amazing about this, is you can see how these different racers improve over time. Anecdotally, I've noticed that some people seem to plateau around 110-130 WPM (i.e. frostequinox, rogeratbao, parkevan27), and some, who stick with it for a long time seem to be able to break out of a plateau (see foggyy, who was "stuck" in the 130-140WPM for around 20,000 races before breaking through and seeing speeds in the 160 WPM range!)

Technical aside The way this works is that I've pulled the data and saved it into S3 as json files. I've only done this for 9 users (myself included), but the idea is to turn this process into an AWS Lambda and open up to anyone who wants to see their data. If you play with the query parameter user={your-username} - it won't work for anyone other than the profiles I've already generated files for. But on demand user data is coming 😉

Over time, I'll collect enough data in S3 to perform a large population study. I can finally answer the question - "How many races does it take, to increase your WPM by 1?".

Another aside I think building this tool would make for an excellent take-home interview problem. What it tests:

  • Can you make API calls to Typeracer?
  • Can improve performance so you don't have to call Typeracer every time? (I.e. in my case, I saved the results in S3, like a cache. Fun problems about eventual consistency, and cache invalidation can occur in the onsite)
  • Can you write code that calculates a moving average?
  • Can you work with graphing libraries? (in my case, D3)


Alright, and on the topic of Typeracer, let me share a couple of quotes that I had to type up during Typeracer that really made me stop and think:

From Hyperion

Words bend our thinking to infinite paths of self-delusion, and the fact that we spend most of our mental lives in brain mansions built of words means that we lack the objectivity necessary to see the terrible distortion of reality which language brings.

From Technical Education

Perhaps the most valuable result of all education is the ability to make yourself do the thing you have to do, when it ought to be done, whether you like it or not; it is the first lesson that ought to be learned; and however early a man's training begins, it is probably the last lesson that he learns thoroughly.

Alright, that's all for now! Go forth and express yourself


Get these notes delivered to your inbox: