Young Reacts #242

I went to see a circus this weekend and was amazed by the performers’ extraordinary physical feats. On the way home, I thought about how I only learned to fully appreciate those feats and their talent and dedication to reach that level after I started training my body.

This experience made me think about how we often judge others’ work without fully understanding their challenges. For example, we might think that customer support is a simple job, but those who work in customer support know that it can be very demanding. Similarly, we might believe executives have an easy job, but they often have to make difficult decisions despite uncertainties.

The truth is, we can’t fully appreciate the work of others unless we walk in their shoes. Yet, it is impossible to try every role to build that context. That’s why being open-minded and learning from our colleagues is essential. By taking the time to understand their challenges, we can collaborate better.


Software Engineering ⚙️

TypeStat: Converts JavaScript to TypeScript and TypeScript to better TypeScript.

Once you start a TypeScript project with a less strict configuration, it becomes quite challenging and tedious to enable the stricter configuration (such as strictNullCheck or noImplicitAny). I’ve used Airbnb’s open-sourced project ts-migrate to enable those options, but the project could not fix the existing errors (and we had 20k+ errors!). This new project called TypeStat promises to fix the existing errors, and I can’t wait to try it.

Exploring GraphQL Clients: Apollo Client vs Relay vs URQL

When you adopt GraphQL, the client you choose will influence your architecture significantly (which I didn’t think about when I first used GraphQL). I’ve learned now that URQL is fit for the simplest use cases, Relay is for the most scaled and complex use cases, and Apollo Client is the middle ground between the two.

The question I am still thinking about is if there is a viable migration path from one library to another. If not, should you always choose Relay since it can solve the most complex use cases?

People ❤️

Meta updates RTO policy with stricter mandate

“Culture is the behavior you reward and punish,” and big tech companies are finally backing up their RTO policies with punishment. Meta announced that the employees’ compliance with RTO will be reflected in their performance evaluation, just as Google announced a few months ago.

Business 💰

HashiCorp Abandons Open Source for Business Source License

HashiCorp, the owner of a popular infrastructure management tool, Terraform, changed its license to prevent competitors from using it. HashiCorp is following other companies like MongoDB and Redis Labs, which abandoned open-source licenses for their business gains.

At this point, I wouldn’t build a company based on an open-source technology owned by another company without a contingency plan to maintain a fork.

Cruise: Pedestrian caused North Beach traffic jam, not Outside Lands

A day after CPUC allowed Cruise and Waymo to operate a paid service in San Francisco at all times, Cruise’s robotaxis malfunctioned and created a major traffic jam at a music festival. The crowd made navigating the streets challenging and degraded the cell service these robotaxis depend on. This incident shows that the safe rollout of robotaxis needs not just better machine learning but also contingency plans for extreme environments.

Nvidia GPU shortage is ‘top gossip’ of Silicon Valley

This article taught me two mind-blowing facts. First, a top-of-the-line GPU costs as much as $35k. Second, it takes over a few thousand of those GPUs to train the current generative AI models, which explains the GPU shortage.

Young Reacts #237

I had a chance to do a Q&A session with students from my alma mater high school, last week. Understandably, many asked about how they can boost their confidence when their peers seem to achieve so many things effortlessly.

A few years ago, I would have answered that there are also many people their age that cannot do what they do. So they shouldn’t feel so threatened. But now, I have a different answer.

It’s a losing battle to compare myself to anyone. There will always be anyone who seems to have a more successful career, have more friends, or overall have a happier life. We have to establish self-worth only from within ourselves, or else it sits on a shaky foundation. My ego still shrinks a little whenever I read about a success story, but I keep my head high as I am happy with my life.


Software Engineering ⚙️

The Concise TypeScript Book

The hardest aspect of TypeScript for me is its terminology. When I need to describe a behavior or look for reference material, I am often at a loss. That’s why I enjoy skimming through books like this to refresh my memory. If you want to understand TypeScript’s type-checking better, I recommend reading the chapter Exploring the Type System.

Decentralizing Social Interactions with ActivityPub

Meta’s Threads plans to adopt the decentralized social networking protocol called ActivityPub, so I wanted to understand how the protocol worked. It basically is a pub-sub system that enables a user of one app to send messages to a user of another app without anyone leaving their apps.

People ❤️

On Becoming a VP of Engineering

I always appreciate the thoughtful materials coming out of Honeycomb. This one from their VP of Engineering is no different. It talks about how she became a VP of engineering, what she thinks of her responsibilities, and how she has adjusted to her role.

Alignment > Autonomy

I am 100% behind the idea that “it’s easier to measure and feel high autonomy than it is to measure high alignment.” Even at Netflix, where “highly aligned, loosely coupled” is preached, we experienced some failure cases where individual product teams prioritized autonomy and built for their short-term gains. That was because bad alignment takes a long time to take its toll, and by that time, those who made those lousy trade-offs have already moved on and won’t face the accountability.

Fresh Work 80/15/5

Two beliefs I always share with my team are that we are paid so much for our judgment, so we need to use them, and that our skills depreciate over time, so we need to keep learning. The time split the author suggests is a good way to act on the beliefs: 80% to do the expected work, 15% to do the exploratory work, and 5% to fulfill curiosity.

Business 💰

Microsoft wins FTC fight to buy Activision Blizzard

A year and a half after the acquisition announcement, the acquisition is finally in sight as the UK regulatory body is also open to approving the deal. I look forward to how Blizzard will be transformed after the acquisition.

Young Reacts #230

I managed my first incident in my first oncall rotation last week. Luckily, I was already used to the stressful incidents from my time at Square, so I could coordinate and communicate calmly. Nothing is as stressful as hundreds of thousands of merchants missing their sales.


Software Engineering ⚙️

Admiral Rickover’s ‘Paper Reactor’ memo

This old memo on nuclear reactors reminded me of the danger of preaching ideas on paper without knowing the on-the-ground reality. Even as I get used to the leadership aspect of a staff engineer role, I will stay close to our code.

An introduction to Wardley (Value Chain) Mapping

I’ve heard quite a bit about Wardley mapping from other senior engineers and finally took some time to read about it. It’s a way to represent a value chain across two axes, the proximity to the customers on the y-axis and the degree of uncertainties on the x-axis. Its goal is to understand the situation and then plan the next strategic moves.

An example Wardley map from the above-linked article

Rich Harris on Svelte’s TS to JSDoc Conversion

Svelte, one of the rising web frameworks, has decided to move away from Typescript to Javascript with type annotations in JSDoc, which was against the trend. The creator of Svelte explained why, and it resonated with me: it’s easier to understand and debug Javascript written by humans and to contribute to the project as there is no build process.

Using @defer Directive with GraphQL Code Generator

It is exciting to see the defer directive gain tractions across the ecosystem. Seeing my favorite GraphQL code generator tool adopt the directive is more exciting.

People ❤️

Can AI help employers screen for honesty?

This article poses an interesting question:

[I]s it unfair for employers to use machines to help evaluate a person’s integrity? Or is it more fair than relying solely on the subjective judgment of humans?

To that, I propose: it’s wrong to judge a person’s character based on their non-verbal cues, which is culture-dependent. Instead, we should ask about their past experiences. Once we change the questions and prove that AI can predict a hired person’s future performance as well as a trained human interviewer, I don’t have a problem with AI interviewing us.

Layoffs push down scores on Glassdoor: this is how companies respond

This article helps you understand how Glassdoor’s review system operates. In short, remember that Glassdoor’s revenue comes from employers, not employees.

Business 💰

An apparently AI-generated hoax of an explosion at the Pentagon went viral online — and markets briefly dipped

This is the brave new world.

Young Reacts #228

By the time you are reading this, I will be on a 🚢 to Alaska. So I’ll be taking a one-week break to focus on recharging. I’ll be back in your inbox next week with a fresh batch of content.


Software Engineering ⚙️

ts-migrate

My coworker and I made our Typescript stricter on our monorepo with more than ten thousand Typescript files. We had more than twenty thousand type errors, and it would have been too painful to fix in one go if we did not have this ts-migrate script from Airbnb. They developed this script to automatically ignore type errors so that they can gradually fix the type errors.

Meet New Relic Grok, the first GenAI assistant for observability

New Relic says I will soon be able to ask, “What percentage of our users failed to complete the campaign creation workflow?” instead of having me go back and forth between our code and New Relic to conjure up a SQL query. I will propose that my team try this tool as part of our dashboard review sessions. My first question will be, “What should we look at first?”

Learn how to build a custom test reporter using node. js’ new native test runner

I did not know that Node.js after v18 comes with a native test runner. It was also interesting to learn that you can either stream or batch the test report generation.

Koala Evaluation Set

This evaluation set was used to test the effectiveness between two large language models by feeding the questions to the models and having humans evaluate the responses. The set is based on the actual user prompts, so I enjoyed reading some of these prompts. One of my favorites was “Write a poem about Mike and Joe becoming millionaires by leveraging the power of AI to become the greatest Agile coaches in history. Include content from the agile manifesto.”

Business 💰

Google “We Have No Moat, And Neither Does OpenAI

A leaked internal document of Google’s claim expresses concerns that Google’s competitive advantage in AI, the almost infinite amount of money to train the model, is not enough. Just as stable diffusion overtook Dall-E, an open-sourced large language model can overtake ChatGPT.

The Unified Content Business Model

Just as you manage a sale funnel for a product from awareness to consideration to conversion, content businesses also have multi-tiered touch points with consumers, from advertisements to subscriptions to offline consumptions.

Context SDK – Introducing the most intelligent way to know how and when to monetize your user

This SDK lets an app classify its user’s context (running, sitting on a couch, etc.) to provide the right experience for that context. Theoretically, you can do the same on mobile web as well as you can run ML models with WebAssembly, and can get access to the same sensors. But getting user permissions for those sensors will be much more difficult.

Young Reacts #226

I am hesitant to try new things. To mask my discomfort, I often say something like, “My time is worth more than that.” But sometimes, the best way to grow and learn is to step outside of my comfort zones.

That’s what I learned when I decided to take over the maintenance of my spa and pool. I had always hired a service company to do it, but I have become disappointed with the service. The company was often unresponsive, and my spa and pool water were never quite clean enough.

So, I decided to learn how to maintain my spa and pool myself. I was surprised that it wasn’t as difficult as I thought. I actually enjoyed learning about it and fixing things with my own hands. I realized I could do this and finally gave the service company the notice.

This experience made me realize how much I resist getting out of my comfort zone. Whether it’s maintaining a pool at home or coding in C# at work, I dread doing them before I first try and see what it’s actually like. But after overcoming that initial hurdle, I’m more confident about taking care of the house. That new scary thing is often not as bad as I expect it to be, and I hope to bring this experience to my work.


Software Engineering ⚙️

Large Language Models Are Human-Level Prompt Engineers

Here I thought prompt engineering was the future of software engineering. And, of course, LLMs are coming for those jobs too. In all seriousness, a research team built a model that, given an output, will create an instruction to make another LLM model produce a similar output.

What’s New in DevTools (Chrome 113)

In Chrome 113 (which is the beta version for desktop Chrome), you will be able to override a request header either via UI or code. This feature will be most useful when I need to test new infrastructure.

A script to auto add // @ts-ignore to lines with TypeScript compilation error

My coworker and I have been working to make our Typescript code stricter to avoid nullability-related bugs. Since our code has a few hundred files, fixing all issues in one go was impossible. We checked out some prior arts (one with Jest and one with a package structure) but were uncomfortable with the added developer friction. So instead, we decided to run a script to mask all existing failures with the directive ts-expect-error and fix them over time.

How Discord Stores Trillions of Messages

Engineers at Discord learned that Cassandra no longer fit their needs because of its operational toil, so they migrated to ScyllaDB. This doesn’t necessarily mean their first decision to use Cassandra was bad. Circumstances do change. The scale has increased, and technology has evolved. But it’d be good to revisit the decision-making process.

People ❤️

Experimental Evidence on the Productivity Effects of Generative Artificial Intelligence

It’s unclear whether generative AI will assist humans in doing things better or replace them by doing things cheaper. This research finds the latter, unfortunately for us human workers.

Rescuing a project in progress

When things aren’t working, you can turn around by focusing narrowly, getting small wins, and building momentum.

Business 💰

Streaming services urged to clamp down on AI-generated music

Even if the trained models do not generate music similar to its input, I think the music’s copyright owner should decide if their music can be used to train a model, just as I should be able to determine the same for my personal information.

Stripe leverages GPT-4 to streamline user experience and combat fraud.

I am just amazed at how quickly Stripe adopted this technology in their business.

Young Reacts #214

I was surprised to see many new subscribers to this newsletter over the past couple of weeks. I appreciate and welcome you all, and I hope you find the shared articles as informative and enlightening as I did.


Software Engineering ⚙️

Speeding up the JavaScript ecosystem – module resolution

This excellent article taught me how module resolution works behind the scenes (i.e., how Node.js can import without file extensions). Check out the author’s first article on Javascript performance, too.

The gotcha of unhandled promise rejections

I am used to seeing a few warnings about unhandled promises during development and testing. But I never wondered what “unhandled” really meant. The article explains how they happen and how we can work around some tricky scenarios.

Announcing TypeScript 5.0 Beta

Another version of Typescript is coming out. If you are familiar with SemVer, it may look like a major release, but it’s not. Typescript does not follow SemVer and goes from x.9 to x+1.0, with every release having a few breaking changes. I am most looking forward to the improved module resolution in this release.

Community Health Analytics in Open Source Software

This Linux Foundation project defines many metrics to measure the health of an open-source project and maintains a tool to measure them. Given that our technology choices have a long-term impact (imagine you chose Angular instead of React five years ago), it’s prudent to understand the community health of the technologies.

Business 💰

Why VR/AR Gets Farther Away as It Comes Into Focus

This article puts the current state of VR/AR into perspective. More demanding performance goals under tighter physical limitations (weight, dimension, cooling, etc.) with (resolution, frame rate, sensors, etc.) make the technology harder to appeal to the mainstream. I got quite a bit pessimistic about these devices after reading this.

PermisionSlip

Consumer Reports, a US non-profit, created an automation app for consumers to protect their data based on the California Consumer Privacy Act.

Interesting Finds 💡

this house may or may not be real

Apparently, many staged photos on real estate listings are now “virtually staged,” meaning that the furniture and fixtures are photoshopped. It disturbs me to think that we won’t be able to trust information about the most expensive purchases of our lives.

Young Reacts #212

To those in the US: Happy MLK day! The fact that I, an immigrant Asian, can live without discrimination or fear in the US owes a lot to Dr. King. The progress has been too slow, and challenges are still innumerable, but let’s use today to remember his legacy.


Software Engineering ⚙️

The State of JS 2022

I always learn new things from this report. This time I learned the following:

tRPC Introduction

After learning about this library in the survey, I read about what tRPC is. It reads like it’s simpler than GraphQL to adopt for full-stack developers who work on a monolith. But it won’t give you GraphQL’s flexible APIs.

People ❤️

Finding Fulfillment

This article made me look back at my past decisions. Did I make them out of ego? Did I sacrifice my true fulfillment to satisfy my ego at the time? How can I make better decisions for myself in the future?

Shopify encourages employees to say no to meetings

Shopify canceled all non-1:1 meetings at the beginning of the year. This was intended to force all meetings to be re-evaluated on their merits. I like this. All meetings should be able to justify their existence.

Business 💰

Every book deserves to be heard

Apple announced a pilot program to create audiobooks with AI voices. As an avid audiobook listener, I got very excited as I often wanted to get interested in an old book without an accompanying audiobook. Unfortunately, this will also upend many narrators’ livelihoods, and only the author-narrated books will survive as collector’s items.

CNET Is Experimenting With an AI Assist. Here’s Why

CNET, a major tech media, started publishing articles created by an AI system and edited by a human editor. I am actually not surprised, I suppose, because I’ve already seen ChatGPT.

My lawyer, the robot

This is the most advanced and high-stakes AI in today’s post. DoNotPay, a legal tech company, is looking for a person to use its AI to argue their case.

Young Reacts #211

It’s nice to see you again in 2023. Tech layoffs continue in January (Amazon, Salesforce, etc.), and I wish you the resilience to manage the stress well.


Software Engineering ⚙️

First-class Support for TypeScript

With the 0.71 release, React Native’s starter CLI will generate a project in Typescript, not Javascript. Even React’s starter CLI doesn’t do that. So Typescript isn’t just first-class, more like a preferred option now.

How did NASA remotely fix the code on the Mars Pathfinder?

I wondered how to debug a program running on a computer millions of kilometers away. The answer was simple: those programs run with the debugging facility enabled, and the engineers can transmit a command to modify the programs’ states. It’s just that you need to triple-check everything because a mistake costs dearly.

People ❤️

Measuring an engineering organization

This article is one of the most impactful ones in my recent memory. Engineering leaders cannot avoid providing some visibility into their teams’ operations. But different stakeholders are looking for different insights, and the leaders should tailor measurements for the use cases. This article provides the typical use cases and the typical metrics for each.

Business 💰

FTC fines Fortnite maker Epic Games $520M over children’s privacy and item shop charges

$245M out of $520M was to refund customers for Epic Games’ dark patterns that “trick users into making purchases.” This refund was the largest refund in FTC’s history. I hope that this news warns other companies from employing dark patterns.

Why we still believe in the future

Meta’s VR chief, Andrew Bosworth argues Meta’s core ad business is still strong and reaffirms Meta’s commitment to VR.

The infrastructure behind ATMs

The article tells an interesting story about how ATMs came about and provided the infrastructure for debit cards and that the infrastructure for debit card transactions is different from that for credit card transactions.

Interesting Finds 💡

I usually wake up just ahead of my alarm. What’s up with that?

I had the same experience that, when I had to wake up early to catch an airplane or a meeting, my eyes were open 30 min before my alarm went off. This article goes into a few possible explanations.

Young Reacts #210

This is the last issue of 2022. Thank you for being a subscriber through this eventful year. I will take a break next week to celebrate the new year and return on January 9. Happy new year!


Software Engineering ⚙️

Web workers, React, and TypeScript

I wanted to learn about two things reading this article: first, is the communication overhead between the main thread and the worker thread small enough? Second, can that communication be typed (see this article for inspiration)? Unfortunately, the answer to the first question wasn’t in this article, and the answer to the second was no.

A framework for balancing and budgeting engineering resourcing

An essential part of engineering management is balancing priorities and communicating your balancing decision with the stakeholders. Summarizing the team’s priorities in percentage will provide valuable discussion points.

People ❤️

317 Free Resources for Product Management

When you try to devise a creative solution to a problem, there is no worse drag than having to start from a blank page. This list has templates from actual product companies (Airtable, Coda, etc.).

The Dangers of Courage Culture and Why Brene Brown Isn’t For Black Folk

Women of color experience the world very differently from how men of color or white women experience it. Just as “lean in” didn’t work for women of color, Brene Brown’s advice probably won’t work for them.

Business 💰

A Roomba recorded a woman on the toilet. How did screenshots end up on Facebook?

This article digs deep into the machine learning data supply chain. It starts with how private images captured on a robot vacuum ended up online and how different parties get involved in building “smart” devices. I knew of companies like Scale AI but didn’t understand how they fit into the picture until I read this article.

Interesting Finds 💡

The decline of the city grid

This article comes with a cool interactive visualization of how grid-like your neighborhood is. The image at the bottom is a polar histogram of my neighborhood. It shows that while the area has large grid blocks (see horizontal and vertical lines), it also has a lot of non-conforming roads. I added the histogram of Chicago for comparison.

My neighborhood
Chicago

Young Reacts #207

I’ve been enjoying the World Cup and its many upsets so far. I am happy that current and former Arsenal players do well on this global stage. Even some who didn’t fit in with Arsenal’s system continue to perform at the top level for their national teams. It reminds me that we all need the right environment to realize our full potential.


Software Engineering ⚙️

Speeding up the JavaScript ecosystem – one library at a time

This article showcases the power of debugging tools by shedding a few seconds of build time with only dozens of lines of change.

NextJS, SvelteKit, Remix and the future of Storybook

Storybook prioritizing its compatibility with other frameworks and build tools is good evidence that they are gaining more popularity.

Retrofitting null-safety onto Java at Meta

One lesson from this article is similar to one from Ten Years of Typescript: enabling a gradual migration was critical to the adoption. A large software project should always support the migration path to be successful.

People ❤️

Tension: why product development requires balancing conflicting goals

The contrasting statements in this article brought my attention to consider a few tradeoffs.

“Output is not outcome.”

This means that on-time project delivery does not guarantee that the resulting product solves customer problems.

“Business problems are not customer problems.”

This means that the customers don’t care about the business’s needs (growth, profitability, etc.). Plus, if I may add my interpretation, the business also needs a way to make money as it solves customer problems.

Better, Faster, and More

I don’t appreciate how this article explains (somewhat patronizingly) why one cannot compare the compensation for different offers because each role is unique. This logic will always give the employers the upper hand because the candidates will never have as much information as the hiring company.

However, I agree that it’s easy and tempting to focus on quantitative values such as compensation instead of intangibles like role fit and growth opportunity.

Business 💰

FTX’s Collapse Was a Crime, Not an Accident

I did not know who Sam Bankman-Fried was before his frauds were uncovered. But seeing how he played the media as a philanthropist, I am reminded that we cannot trust one’s words but only their actions.

New Meta AI demo writes racist and inaccurate scientific literature, gets pulled

By this point, there have been enough public AI abuses. AI research teams should more proactively collaborate with a red team to harden their products before public releases.