Young Reacts #68 – Agility and Flexibility

The pandemic added a lot of uncertainties to my team’s roadmap. Our studio stakeholders’ priorities are changing daily, yet they are too slammed to provide much feedback on our ongoing projects. Given those two constraints, our team must stay agile and flexible. Our work, in response to the pandemic, has looser product definitions with high urgency to deliver now. As a result, much of the work may be thrown away or proven useless. And that’s ok. Now is the time for us to jump into the unknown along with our stakeholders. That’s the least we can do as partners to our studio.

People ❤

Getting the Bigger Role – Brian Donohue

Brian Donohue gives invaluable advice in advancing your career. I especially liked the Caveats section: “it’s better to ask for forgiveness than permission, when doing the bigger role,” and “doing the bigger role doesn’t mean you’re entitled to it.” The tricky part for me is to see if I want that bigger role.

Twitter Thread – Steward Butterfield

This thread gives an interesting look at how Slack reacted to COVID-19 for the last two weeks.

Software Engineering 🌐

Tracking Research Questions, Assumptions, and Facts in Agile – Rachel Krause

Product development is a series of experiments creating and validating assumptions. Thus, the learnings from the development are as important as the product itself. But we often lose those learnings when people leave the team. This article helps to make the learnings explicit and long-living.

Introducing Gretchen: Making Fetch Happen in TypeScript – Eric Bailey

It is essential to model a type system as close as possible to the corresponding domain to educate the other developers. But most data fetching libraries often do this:

type Result = { data?: TDataType; error?: TErrorType }

This confuses the domain since it isn’t clear if both data and error can exist, or be absent. But I appreciate Gretchen uses a more explicit union type:

type Result = { data: TDataType; error: undefined } | { data: undefined; error: TErrorType }

Business 💸

O’Reilly’s events business – Laura Baldwin

O’Reilly closes its offline conference business. I wonder two things: how will attendees interact online? More importantly, what will differentiate them from a personal YouTube channel from a speaker’s point of view? O’Reilly is losing so much of its gatekeeping ability.

The End of Starsky Robotics – Stefan Seltz-Axmacher

I feel empathetic to Stefan. There is so much you can do as an individual when the tide is against you. Timing and luck are a huge part of our lives, and you can’t change them once you start your startup.

Young Reacts #67 – Github acquiring npm

Outside the pandemic, I was particularly surprised by Github’s acquisition of npm. Both of them are the backbone of the opensource community. Github and npm, combined, will host most existing Javascript packages. 

Their parent company, Microsoft, is playing a long game to create the best possible developer experience, seamlessly integrated with Typescript, VS Code, Github, npm, and Azure, and win the minds and hearts of the next generation. At the very least, its coming ecosystem looks promising to Javascript developers.

People ❤

Peacetime CEO/Wartime CEO by Ben Horowitz

While I don’t appreciate the war metaphor, we are heading into turbulent times. Our teams will fight for survival in the coming months. Though I don’t think a lot of the mentioned wartime qualities in the article are necessary, I hope you consider and execute the necessary mentality shift for your teams.

Software Engineering 🌐

The epistemology of software quality by Hillel Wayne

Only human factors, not technologies, are proven to have a deep impact on software quality. I realize technologies don’t have inherent values. They only aid in providing the best possible work environment for humans.

Domain-Driven GraphQL Schema Design by Khalil Stemmler

Our internal GraphQL working group is figuring out the best practices to design GraphQL schema. The usual freedom and responsibility do not apply here considering that GraphQL schema is hard to revert and global. Domain-driven design looks like a great starting point.

scriptlint: an enforceable script naming standard for package.json

We have linters for Javascript (eslint), and CSS (csslint). Why not for package.json?

Business 💸

npm is joining GitHub by Nat Friedman and Next Phase Montage by Isaac Z. Schlueter

The first article describes Github’s rationales, like possible synergies, and the second article tells npm’s journeys. I am grateful for what Isaac has done for the community. I feel bad that npm never became a viable business. But given his said priorities, it is understandable.

The state of the restaurant industry by OpenTable

Lots of marketplace startups digitized trust and moved the offline markets to online. We stayed at strangers’ homes and got rides from their cars. But this pandemic has removed the base level of trust, required to create markets. For example, these numbers from OpenTable show a non-functioning restaurant marketplace. This doesn’t bode well for the coming months and years.

Young Reacts #66 – Remote Working Recap

It has been a challenging week for me since I started working remotely. I wrote about my work from home experience.


People ❤

My focus this week has been on remote working. These guides should help you get more comfortable working from home.

Remote – William Blankenship

Remote work is not inferior to office work. A lot of people just assume so, but we can start by questioning that assumption together.

How to be Effective at Working Remotely – Brady Voss

I loved the analogy of a remote relationship. While people may be tempted to blame physical remoteness when balls get dropped, we can only overcome the challenges through more intentional, proactive communication from both sides.

Working from Home — a Guide – Charles Patterson

The line between work life and personal life gets blurred when we work from home. We are all better served by separating physical space or following a routine to mark the start and end of work.

Software Engineering 🌐

dataloader-codegen – Yelp

If you want to start creating GraphQL endpoint on top of RESTful API, this library will simplify the process of wiring GraphQL resolvers to the API.

Zod: Typescript-first schema validation with static type inference – Colin McDonnell

This library is not necessary if you use typed API, like GraphQL or generated clients. But if you have REST API prone to produce unexpected results, Zod and io-ts seem to be the best options available.

Alternatives to enums in TypeScript – Axel Rauschmayer

As I have only worked on apps, not libraries, I never thought about runtime checks for Javascript. It is good to learn about different techniques. If you aren’t interested in specifics, my recommendation is to stick to String Enum.

Business 💸

Ether Plunge Tests DeFi Giant While Ripple Effects Have Just Begun – Camila Russo

There has been yet another hack against the new decentralized finance. Will open-source ever be able to protect its investors from the hacks and pitfalls?

Remote Working Recap – First Week

Remote working will eventually be mainstream since talents and living costs have become too expensive in the tech hubs. Thus, even though I never worked remotely and I probably suck at it, I have wanted to try working remotely. Due to COVID-19, Netflix strongly recommended that all Los Gatos employees (that include me) work from home starting last Tuesday. So this week gave me the first taste of working remotely, for a prolonged time. I might as well learn from this experience. I am gathering my initial thoughts here so that I can improve my productivity and satisfaction.

Good

  1. I love that I get to spend more time with my wife. We do a quick grocery run, enjoy lunch, and stretch our legs together throughout the day. My usual commute is pretty short, about 40 minutes. So I should be saving about an hour and a half every day, but I feel that I get far more quality time with my wife. Everyday somehow feels like Friday.
  2. Since remote working introduces additional frictions to meetings, a lot of non-essential meetings, such as a presentation about the latest market research, got postponed or canceled. I will eventually miss those meetings. But, for now, I find more time to code and feel more productive.

Bad

  1. My weekday routine got disrupted. I miss my morning workout, brisk walks to/from my shuttle stop, and a quick meditation session on the way to the office. Instead, I now wake up past 9 am, don’t take a shower until the evening, and walk less than 2000 steps, which upsets me since I feel like I wasted the day. This disruption hurts more because I was making consistent progress towards my health goal. Now I need to build a new routine that will get me through the next coming months.
  2. I can’t seem to focus during remote meetings. I daydream a lot and get distracted easily, so I usually make a point of not bringing my laptop into the meetings. I instead take a pen and a note with me. But now that I need my laptop to call into the meetings, I get distracted by notifications and new emails during the meetings. With the camera on, I behave better. But it is a struggle.
  3. Now that my work laptop is on my home desk, I keep getting sucked back into work after dinner. I tell myself, “I just need to push one more small code change.” It’s so alluring. But I should recognize that work literally has no end and protect my personal time.

Overall, I still feel productive. Possibly more than before. But in the long run, I worry about my psychological health. I also am concerned that our team could suffer organizational problems like lack of alignment and relationship since Netflix has been an office-first company. I will keep logging my thoughts to keep me honest and improve myself in the coming months.

Young Reacts #65 – Fighting Inertia

I hate to admit but I have been experiencing some mannerisms after a while at Netflix. I still find the work challenging and rewarding but learned to give up some fights after a while—problems such as how to run sprints, or how to organize our codes. When I first joined, I tried to question them and hopefully improve them. But I wasn’t enough and eventually got desensitized to those recurring issues. I always had other more pressing work to do.

But after new team members joined, they renewed the team’s energy to revisit those old challenges. They have been speaking up during the code reviews and sprint planning meetings when they don’t understand why. In less than a month, we reorganized our codebase, scheduled a new weekly design-eng sync, and started spending time more consciously during the meetings. I am grateful for this opportunity to grow as a team and looking forward to the coming months.


People ❤

How I Write & How to Write Usefully

I have been trying to write more because I can clarify my thinking and retain my learnings better by writing. At the same time, I also have had a hard time coming up with ideas and writing coherent long articles. I appreciated that both prolific authors shared their processes and the work they put into each writing.

Software Engineering 🌐

Fix the slow render before you fix the re-render

The math is simple. Your app will need to render at least once. So if that render is slow (say >50 ms), it doesn’t matter whether your app renders only once. I also learned to differentiate “render,” “reconciliation,” and “commit” in React land.

renamer: Rename files in bulk

My current codebase is a hodgepodge of camelCase, PascalCase, and kebob-case. I look forward to cleaning those up with this tool. But I would love to have a tool that will update dependency paths in files.

What’s behind the hype about Blazor?

Blazor is a client-side UI framework based on .NET and C#. I asked JS engineers at the company about their thoughts and was surprised to see that many who I respected loved writing C#. So maybe there is something to the framework.

Business 💸

The Gross Margin Problem: Lessons for Tech-Enabled Startups & The New Business of AI (and How It’s Different From Traditional Software)

Two articles, although they analyze two different verticals (physical world products and AI), share the same insight. Gross margin used to be great for software companies, where the cost of serving customers after the first one was effectively zero. But efficiency starts to matter.

Cool things of the week 😎

YouTuber uses neural networks to upscale 1896 short film to 4K 60 fps

I got so used to HD that I find movies before 2010 hard to watch. Maybe, we can get remaster releases of classics such as Starcraft or Warcraft Remasters using this technique like this.

youka: Generate karaoke for any song in any language

Another cool AI technique splitting the voice and the instruments from audio to generate karaoke video.

Young Reacts #64

The outbreak of Coronavirus and its consequences make me think about the fragility of our society and lives. I hope everyone stays healthy and safe.


People ❤

The Horrifically Dystopian World of Software Engineering Interviews

For every successful hire, we have tens of horror stories like this. There can’t be an interview process to satisfy everyone, in terms of the resource constraints (for both candidates and interviewers), effectiveness/predictability, and interviewee experience. However, it still is important to remember that the candidates are people too.

On mid-career and managers

The key insight here is that people change over time. What I need now is different from what I needed five years ago. The same applies to the people around you. Do think about that.

Unlearning toxic behaviors in a code review culture

You have to be overly explicit when you are giving feedback because others don’t have the same context as you do. After reading this article, I realized that I sometimes pose alternatives but do not provide why they could be better. Something for me to improve.

Software Engineering 🌐

Rome: An experimental JavaScript toolchain

Rome, in their words, “aims to be a comprehensive tool for anything related to the processing of JavaScript source code.” I am generally skeptical of the tools that try to be-all, end-all. There usually is a subtle but essential use-case that can’t be covered by tools like this (80-20 rule). But, maybe, Rome will be good enough for 80% of the Javascript projects.

JavaScript Internationalization in 2020

It was amazing to see my Chrome console returns the following. I am about to remove a bunch of utility functions 🥳

new Intl.RelativeTimeFormat("en").format(-1, "days") // 1 day ago new Intl.RelativeTimeFormat("en").format(-2, "days") // 2 days ago new Intl.RelativeTimeFormat("ko").format(-1, "days") // 1일 전

Implementing an opaque type in typescript

By using the following technique, you can enforce validations at compile time in Typescript.

declare const validEmail: unique symbol;  type Email = string & {   [validEmail]: true }

Business 💸

The truth behind filter bubbles: Bursting some myths

I learned two things: first, “online news use on search and social media is more diverse,” and second, “this diversity is causing some kind of polarisation, in both attitudes and usage.” Then I remembered my parents only subscribed to newspapers that fit their views. Filter bubbles aren’t a thing.

Chinese smartphone brands build consortium to challenge Google Play domination

Another sign that the Chinese tech industry is going down on its own path, which isn’t necessarily a bad thing.

Young Reacts #63 – Does It Spark Joy?

My manager left the company last Friday to become a software engineer again since she realized she found more joy in the creative process. I am sad to see someone who put faith in me go. But such is life. With two new members to join my team and without a full-time manager, the next couple of months will open up new opportunities for me to learn and grow.

PS: Her writing on her move, which I copied the title Does It Spark Joy? from, is one of those writings that make one ponder about one’s career and life. I recommend it highly.

Photo by Tim Mossholder on Unsplash


People ❤

The loneliness of management

When I was managing a team, I loved having a support group of trusted fellow managers. I could vent and get insights without worrying about repercussions. The group is what I miss the most since I left Korea to join Netflix. I keep thinking about how best to start something similar here.

How to break the “senior engineer” career ceiling

The level I am at, “Senior Engineer,” is often called “the terminal level” since one does not have to advance to stay with the company. But I also feel that the industry calls it “terminal” because there isn’t a clear way to progress past this level. This post describes what it means to be more than a “Senior Engineer.”

Every Leader Needs to Navigate These 7 Tensions

This HBR article reminds me that there is no easy answer to leadership. The tensions I experience more often in Netflix’s bottom-up culture are the Expert vs. the Learner, the Teller vs. the Listener, and the Constant vs. the Adapter.

Software Engineering 🌐

ronami/meta-typing: Functions and algorithms implemented purely with TypeScript’s type system

There has been an interesting discussion about Typescript’s type system’s Turing completeness. I don’t know how one proves the completeness. But this repo is a mindblowing example of Typescript’s expressive type system.

Helpful GraphQL Articles

To help my coworker who never used GraphQL before, I compiled a list of GraphQL articles I learned from. I hope the list is useful for you too.

Business 💸

Arbs Exploit DeFi to Make $900k in Seconds; Provoke Soul-Searching in the Process

With so many components, decentralized finance opens up a new exploit angle. The diagrams included in the article are super helpful in understanding how the exploits went down last week.

How to explain the loss of the cookie to your family and friends (and why you should)

Cookies have been the centerpiece of AdTech. With Google’s public announcement to restrict its usages, the industry will change drastically. As a former AdTech engineer, I am curious to see the coming changes.

Young Reacts #62 – WebAssembly Summit

I attended the first-ever WebAssembly Summit this week. It had a very distinct feel to it than other more established conferences I have been to. It had a single track and happened on a single day. A lot of contributors/early adopters were in the room, and the speakers geared toward them. I went there to find compelling use cases that could be applied to my day-to-day work, but I wasn’t able to achieve that, which tells me the technology is still in the early adopter phase.

You can find my (messy) note here if you are interested in learning more.

Speakers and organizers


People ❤

How to Give a Killer Presentation

In April, I am giving a talk in front of the largest audience in my experiences so far. It is honestly terrifying, so I will give it my 100%. This guide from Chris Anderson, the TED organizer, says a compelling narrative is the most important.

Software Engineering 🌐

Fire Mario, not Fire Flowers

When we engineers think about solving a problem, our goal should be to make our users awesome (Fire Mario) rather than to create an excellent tool (Fire Flower).

WebAssembly music

The coolest presentation I saw at the WebAssembly Summit. The link will play the synthesized sound purely from code.

GraphQL Server Specification: Mutations

The most essential trait of GraphQL API is backward compatibility. The relay spec is an easy way to future proof the compatibility.

Business 💸

Front Series C Deck

Mathilde Collin has published the deck that raised $59 million for Front, a shared inbox company. Here are Series A deck and Series B deck as well.

HQ Trivia shuts down after acquisition falls through

An online trivia service that was so hot just a couple years ago shut down. I still remember how envious my team was of the service when I was at an online community startup. Consumer-facing services are a tough business.

WebAssembly Summit 2020 Recap

Organizers and Speakers 👏

Website: WebAssembly Summit

Date: Feb 10, 2020

Recording: https://www.youtube.com/watch?v=WZp0sPDvWfw

The event was the first WebAssembly conference. It had a single track and happened on a single day. A lot of contributors/early adopters were in the room and the topics were geared toward them. I went there to find interesting use cases that could be applied to my day-to-day work but I wasn’t able to achieve that.

Here are my notes from the conference. I am no expert with WebAssembly so my notes may be incorrect:

Opening Keynote: WebAssembly: Building a new kind of ecosystem – Lin Clark

  • WebAssembly on Web is portable and secure.
  • WebAssembly on Server may lose security if we are not careful.
  • Currently in Node.js ecosystem, there is no sandbox to secure the system from 3rd party codes
    • Malicious code
      • Example: electron-native-notifier. A Bait and Switch scheme to steal bitcoins
        • Memory access
      • The number of malicious code has doubled from 2017 to 2019
    • Vulnerable code
  • Spinning up a new process as OS does for a library is too expensive
    • Memory issue
    • IPC is hard to deal with
  • Solution (WebAssembly Nanoprocesses):
    • Sandbox
    • Memory model (memory isolation)
    • Interface types: copy from an isolated memory to another memory to pass the data
    • WebAssembly System Interface (capability based security)
    • The missing link
      • How to pass the said capability to the dependencies
  • Nanoprocess isn’t a standard yet. just a convention. ByteCode Alliance works to provide a secure foundation.

References

Shipping Tiny WebAssembly Builds – Alon Zakai

WebAssembly is usually smaller than Javascript because

  • dead code elimination
  • binary format

Has a risk tho:

  • big runtime lib requirements

Tip 1: Compression: GZip or Brotli

Tip 2: wasm-opt will generate a smaller wasm from a wasm via:

  • dead code elimination
  • constant propagation
  • inlining
  • since wasm-opt is running at Link Time Optimization
  • wasm-opt will be run by some tool sets out of the box

Tip 3: size profiling

  • Bloaty
  • Twiggy
  • wasm-opt’s —func-metrics

There is a tradeoff between writing a idiomatic code vs. the smaller binary output

C/C++ Tip (a lot of specific tips):

Rust Tip:

Go Tip:

  • TinyGo vs. the regular runtime size differences

References

Why the #wasmsummit Website isn’t written in Wasm, and what that means for the future of Wasm – Ashley Williams

WebAssembly shouldn’t replace Javascript

How are values prioritized for WebAssembly? The community does not have an explicitly shared vision. We should make it easier for people to use WebAssembly.

Empowering people!

What does WebAssembly want?

  • Marketing does not speak the language of the people it wants to reach

Rust, C++, Javascript, Academia, New Developers all get together

What do people want from WebAssembly?

  • multilanguage support
    • Why? JS doesn’t meet my need
      • Why? performance inconsistencies / don’t understand/like it

What do the above numbers mean?

  1. Javascript has an unwilling monopoly.
  2. Performance is not as large of a concern as you would respect.
  3. A lot of people haven’t tried WASM yet.

History of Programming Language Development

  • 1995 → High-level abstractions (Ruby, Javascript, Java)
  • 2010 → Low-level languages (Go, Rust, WASM)

The demand for speed of computation on Web is growing since Web is the most powerful distribution channel.

Excel and Flash were hugely empowering technologies. WebAssembly should strive to be the same.

References

JavaScriptCore’s new WebAssembly interpreter – Tadeu Zagallo

I didn’t take much note here since this article (https://webkit.org/blog/9329/) can represent the talk very well.

WebAssembly Music – Peter Salomonsen

A talk on generating midi music with WebAssembly implementation. Javascript to write songs and WebAssembly to generate sound. He was able to create an executable out of the Javascript to play the song via terminal.

References

WebAssembly and Internet of Things – Jonathan Beri

What is IoT?

  • Embedded systems
    • Constrained
      • Limited processing power and battery
      • Limited connectivity

In 2017, a runtime for embedded systems did not exist.

A unikernel is a specialized OS for a single application.

Unikraft works to enable building unikernels with ease. Unikraft

WebAssembly on Arduino is now possible thanks to WAMR and WASM3

References

Building a Containerless Future with WebAssembly – Kevin Hoffman

Low-level runtimes: https://github.com/appcypher/awesome-wasm-runtimes

Mid-level runtimes: waPC https://medium.com/@KevinHoffman/introducing-wapc-dc9d8b0c2223 & wasCAP https://docs.rs/wascap/0.3.0/wascap/

High-level runtimes: waSCC https://wascc.dev/

Since webassembly is without container, its code can be updated on the fly without rebooting (dynamically bound).

My Q: Why waSCC is needed when you have the sandbox?

WebAssembly as a <video> polyfill – Brion Vibber

Limitations to wikipedia’s tech stack due to its philosophy. It could only use open/public licenses

Over time, they optimized the polyfill with:

  1. Javascript to WebAssembly
  2. Threaded build
  3. SIMD

References

Closing Keynote: WebAssembly: Expanding the PIE – Ben Smith

This talk felt like a recap of the community for the last 4-5 years. Incrementalism in WebAssembly community enable moving forward at a steady pace

Sep 2015

  • ml-proto (ocaml based) ⇒ WebAssembly reference interpreter
  • v8-native-prototype (binary format) ⇒ becomes WebAssembly binary format
  • a two weeks bet to translate ml-proto to v8-native-prototype: sexpr-wasm ⇒ sexpr-wasm-prototype ⇒ wabt

A modest goal at the time: C++ compile to WebAssembly. WA and JS interop.

APIE has been expanding since its inception:

  • Ability
  • Producer
  • Interop
  • Embedder

Sep 2017

Notable proposals: Garbage Collection, Host bindings

Jun 2018

Notable proposals: Garbage Collection, Reference Types (later became Interface Types), Wasm C API

Aug 2019

Notable proposals: Typed Function References, Type Imports, WASI, Interface Types

Feb 2020,

Notable proposals: Reference Types (Phase 4), GC, Wasm C API, WASI, Interface Types

Young Reacts #61 – Feature Flag Working Group

During my last compensation review, one identified growth area was to expand my impact outside my team and applications. So I started looking for cross-cutting problems, one of which was the lack of a user-based feature flagging solution.

But I couldn’t just go and build the system I wanted since none would buy into my solution. A unilateral decision doesn’t work at Netflix due to our culture of freedom and responsibility. Therefore, most of the cross-cutting problems are solved via working groups, a group of interested people who work together to define needs, recommend a solution, and, possibly, implement the solution.

So I kicked off a working group on feature flags last week. Even though I have seen firsthand how the groups worked together to transition our servers to containers, and to introduce GraphQL, this time is my first attempt at running a working group. It will be a challenging and teaching experience. But I will get through it.

Photo by Perry Grone on Unsplash


People ❤

Where to Start

This article gave me a perspective on how to identify cross-cutting problems. A sequel to this article, Technical Research and Preparation, also suggests a possible path forward.

The 3 Things Employees Really Want: Career, Community, Cause

Facebook surveyed what employees look for from their employers. The three values resonated with me as well. It was good to have my wants organized neatly like this.

Software Engineering 🌐

SwiftCrypto

Swift, a language originally designed by Apple for its UI applications, is now expanding to server applications just as Javascript and Kotlin did. To help with the expansion, Apple announced a library to enable cryptography using Swift on Linux.

Adding special values to types in TypeScript

Once you get used to modeling your data using Typescript, your thinking will become much more precise. This guide comprehensively shows how to represent different kinds of values.

JavaScript Libraries Are Almost Never Updated Once Installed

If it ain’t broke, don’t fix it is taken by heart by many engineers. This statistic shows precisely that.

Business 💸

Introducing Rolling Venture Funds

AngelList created a financial innovation to reduce fund-raising frictions for VCs. Will the new VCs, enabled by the lower barrier to entry, be able to change the VC industry?